&nbsp; On 8/7/07, <b class="gmail_sendername">Gerard Hickey</b> &lt;<a href="mailto:hickey@kinetic-compute.com">hickey@kinetic-compute.com</a>&gt; wrote:<div><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div style=""><span class="q"><br><div><div>On Aug 7, 2007, at 1:41 AM, Luki wrote:</div><br><blockquote type="cite"><blockquote type="cite"><div style="margin: 0px;">Does anyone know of a program/code out there for high volume voice
</div><div style="margin: 0px;">broadcasting, the applications include high volume political calling,</div><div style="margin: 0px;">outbound surveys, emergency notifications, patient reminders, etc, etc.</div><div style="margin: 0px;">
Looking for a program that can handle small volumes of calls, example 50</div><div style="margin: 0px;">to 200 calls for doctors offices to very large call volumes of</div><div style="margin: 0px;">1,000,0000 calls per hour for mass messaging.
</div> </blockquote><div style="margin: 0px; min-height: 14px;"><br></div><div style="margin: 0px;">For a project like this, a distributed solution would be ideal. You</div><div style="margin: 0px;">know, Google-style: lots of low-end machines, cheaper and redundancy
</div><div style="margin: 0px;">included. With <span id="st" name="st" class="st">Asterisk</span> you probably can&#39;t squeeze more than 250 calls</div><div style="margin: 0px;">even on a decent hardware, and for 1,000,000 calls per hour, say 2
</div><div style="margin: 0px;">minutes in duration (with call setup), you need about 130 decent</div><div style="margin: 0px;">machines. Or like 300 low-end ones... so like 8 racks full.</div><div style="margin: 0px; min-height: 14px;">
<br></div><div style="margin: 0px;">The code should be pretty simple (this setup is easily distributable).</div><div style="margin: 0px;">One beefy database server (or a small cluster for redundancy) can</div><div style="margin: 0px;">
handle ~500-1000 queries/sec you&#39;d need to sustain for 1,000,000 calls</div><div style="margin: 0px;">per hour.</div></blockquote></div><div><br></div></span>Yes, you&nbsp;definitely need to have a distributed solution to scale up to the 1M calls/hour, but the architecture is much more complex than you first might think it is.&nbsp;
<div><br></div><div>First you need to have a set of machines as directors to keep track of what machines have outdial capabilities. Using a director approach allows one to have better control of the systems and receive up to the minute reporting concerning the efficiency of the cluster of 
<span id="st" name="st" class="st">asterisk</span> machines. Arguably you could reverse the solution and have the individual <span id="st" name="st" class="st">asterisk</span> boxes query the database when it has&nbsp;capability to place a call, but it is easy to have two or more 
<span id="st" name="st" class="st">asterisk</span> boxes attempting to dial the same number. You also have the problem of not detecting <span id="st" name="st" class="st">asterisk</span> boxes that are not pulling their own weight as easily.&nbsp;
</div><div><br></div><div>The bigger problem is call scheduling. Your queueing system gets very complex very fast when you start servicing multiple clients with different requirements and different workloads. Lets take the examples from the first email: a doctor&#39;s office placing patient reminders and a political campaign. Everything is great when the system is processing the patient reminders because the system is lightly loaded. Then the political campaign starts and the system gets flooded with thousands of calls (seems to me that 1M calls is a bit much unless you are doing national political campaigns). As the campaign calls take over the system, one will find that without the proper queuing algorithms the patient reminders are now being placed 2 days after the appointments.&nbsp;
</div><div><br></div><div>Finally, blacklists and do not call lists need to be incorporated into the system. If&nbsp; I remember correctly there are a number of federal regulations concerning automated calling that also need to be addressed in the system along with observing time of day restrictions for the destination number.&nbsp;
</div><div><br></div><div>All in all the solution gets pretty complex pretty fast. Unless you do a hack job, just don&#39;t care and have not problem treating your customers like dirt. Then you have it made.&nbsp;<br><div> <span style="border-collapse: separate; border-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">--</span></font></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">Gerard Hickey </span></font><font face="Courier">
<span style="font-family: Courier;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></font><font face="Courier"><span style="font-family: Courier;">Kinetic Compute Services</span></font></div><div style="margin: 0px;"><a href="mailto:hickey@kinetic-compute.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">
<font face="Courier"><span style="color: rgb(0, 0, 238); font-family: Courier;">hickey@kinetic-compute.com</span></font></a><font face="Courier"><span style="font-family: Courier;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></font><font face="Courier">
<span style="font-family: Courier;">694 Allen Ave.</span></font></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;"><span onmouseup="SetCallButtonPressed(this, 0,0)" onmousedown="SetCallButtonPressed(this, 1,0)" onmouseover="SetCallButton(this, 1,0);skype_active=CheckCallButton(this);" onmouseout="SetCallButton(this, 0,0);HideSkypeMenu();" class="skype_tb_injection" id="__skype_highlight_id">
<span title="Change country code ..." onclick="javascript:if(1){doRunCMD(event, &#39;chdial&#39;,&#39;0&#39;);}else{doRunCMD(event, &#39;call&#39;,&#39;+12073185646&#39;);}event.preventBubble();return false;" onmouseout="SetCallButtonPart(this, 0);" onmouseover="SetCallButtonPart(this, 1);" class="skype_tb_injection_left" id="__skype_highlight_id_left">
<span style="background-image: url(chrome://skype_ff_toolbar_win/content/cb_normal_l.gif);" class="skype_tb_injection_left_img" id="__skype_highlight_id_left_adge"><img src="chrome://skype_ff_toolbar_win/content/cb_transparent_l.gif" style="height: 11px; width: 7px;" class="skype_tb_img_adge" height="11">
</span><span class="skype_tb_injection_left_img" id="__skype_highlight_id_left_img"><img style="width: 16px;" src="chrome://skype_ff_toolbar_win/content/famfamfam/us.gif" title="" class="skype_tb_img_flag" name="skype_tb_img_f0">
<img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1"><img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1">
<img src="chrome://skype_ff_toolbar_win/content/arrow.gif" title="" class="skype_tb_img_arrow" name="skype_tb_img_a0"><img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1">
<img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1"></span></span><img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1">
<span title="Call this phone number in United States of America with Skype: +12073185646" onclick="javascript:doRunCMD(event, &#39;call&#39;,&#39;+12073185646&#39;);event.preventBubble();return false;" onmouseout="SetCallButtonPart(this, 0)" onmouseover="SetCallButtonPart(this, 1)" class="skype_tb_injection_right" id="__skype_highlight_id_right">
<span class="skype_tb_innerText" id="__skype_highlight_id_innerText"><img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1">
<img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1"><img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1">
<img src="chrome://skype_ff_toolbar_win/content/space.gif" style="margin: 0px; padding: 0px; height: 1px; width: 1px;" class="skype_tb_img_space" height="1" width="1">207-318-5646</span><span style="background-image: url(chrome://skype_ff_toolbar_win/content/cb_normal_r.gif);" class="skype_tb_injection_left_img" id="__skype_highlight_id_right_adge">
<img src="chrome://skype_ff_toolbar_win/content/cb_transparent_r.gif" style="height: 11px; width: 19px;" class="skype_tb_img_adge" height="11"></span></span></span></span></font><font face="Courier"><span style="font-family: Courier;">
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span></font><font face="Courier"><span style="font-family: Courier;">Portland, ME </span></font><font face="Courier"><span style="font-family: Courier;">&nbsp; </span></font><font face="Courier">
<span style="font-family: Courier;">04103-3707</span></font></div><div style="margin: 0px; min-height: 14px; font-family: Courier;"><br style="font-family: Courier;"></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">
Specializing in UNIX/Linux/Mac OSX solutions for business and education.</span></font></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">&nbsp;&nbsp; &nbsp; </span></font><font face="Courier"><span style="font-family: Courier;">
* ACSA certified and member of Apple Consultants Network</span></font></div><div style="margin: 0px; min-height: 14px; font-family: Courier;"><br style="font-family: Courier;"></div><div style="margin: 0px;"><font face="Courier">
<span style="font-family: Courier;">Alternative contact methods:</span></font></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">&nbsp; &nbsp; </span></font><font face="Courier"><span style="font-family: Courier;">
Jabber: </span></font><a href="mailto:unixgeek@jabber.kinetic-compute.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"><font face="Courier"><font color="#0000f0"><span style="color: rgb(0, 0, 240); font-family: Courier;">
unixgeek@jabber.kinetic-compute.com</span></font></font></a></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">&nbsp; &nbsp; </span></font><font face="Courier"><span style="font-family: Courier;">
AIM:</span></font><font face="Courier"><span style="font-family: Courier;">&nbsp; &nbsp; </span></font><font face="Courier"><span style="font-family: Courier;">unixgeek69</span></font></div><div style="margin: 0px;"><font face="Courier">
<span style="font-family: Courier;">&nbsp; &nbsp; </span></font><font face="Courier"><span style="font-family: Courier;">Skype:</span></font><font face="Courier"><span style="font-family: Courier;">&nbsp; </span></font><font face="Courier">
<span style="font-family: Courier;">unixgeek69</span></font></div><div style="margin: 0px; min-height: 14px; font-family: Courier;"><br style="font-family: Courier;"></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">
All email messages are sent digitally signed with a X.509 key for</span></font><font face="Courier"><span style="font-family: Courier;">&nbsp;</span></font></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">
authentication purposes. Messages not signed should be considered</span></font><font face="Courier"><span style="font-family: Courier;">&nbsp;</span></font></div><div style="margin: 0px;"><font face="Courier"><span style="font-family: Courier;">
forgeries and discarded.</span></font></div></span></div></div></div></blockquote><div><br><br>&nbsp;At BTWTech we&#39;ve developed such a distributed system originally for a large telemarketing client, but we also now have some municipal alert and political reference clients on it as well. It takes into account many of the features that Gerard has correctly pointed out are challenges in operating such a platform.
<br><br>&nbsp;Contact us at <a href="mailto:info@btwtech.com">info@btwtech.com</a> for more info. <br></div><br></div><br>-- <br>Bird&#39;s The Word Technologies, Inc.<br><a href="http://www.btwtech.com/">http://www.btwtech.com/
</a>