<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Easy outbound dialling for the Asterisk PBX</description><title>The Wombat Dialer blog</title><generator>Tumblr (3.0; @wombatdialer)</generator><link>http://blog.wombatdialer.com/</link><item><title>Version 0.6.13 - A taste of things to come</title><description>&lt;p&gt;We have a new version of WombatDialer available on the public repo. This version adds a few interesting things to WombatDialer and should make your life easier when running it in production.&lt;/p&gt;

&lt;p&gt;First, WombatDialer has a better status view of queues: it now prints out the agents present on a queue and their current state, plus the calls (if any) currently queued.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/abcb7ad8e22f3c32a269fe9f6239e6ce/tumblr_inline_mmf7yikRcm1qz4rgp.png" alt="New dialer status"/&gt;&lt;/p&gt;

&lt;p&gt;This way it is easier to understand what is going on in real-time. Also, when a call is connected to an agent, the agent being used is shown on the Live page. WombatDialer also tries to sync the queue as soon as it is brought up, so you always see all queues for your running campaigns even if you restart the dialer.&lt;/p&gt;

&lt;p&gt;The second major change is that call lists are now dynamic. You can pause and add lists on running campaigns, and WombatDialer will immediately respond to the changes you make.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/bbc6f82b33583dce4492326ce2100c87/tumblr_inline_mmf7z0sCA81qz4rgp.png" alt="List manager"/&gt;&lt;/p&gt;

&lt;p&gt;You can even add lists to idle campaigns, and they will start dialing immediately. For each list, the current high-water mark is displayed. The Live page also includes a check so that you cannot send commands to the dialer if the dialer is currently down.&lt;/p&gt;

&lt;p&gt;One last important change is that the infamous DTSC bug was fixed, so you do not need to restart the dialer multiple times. This will make installation of the system easier.&lt;/p&gt;

&lt;p&gt;We look forward to your comments - we have a feedback system available at &lt;a href="http://wombatdialer.userecho.com" target="_blank"&gt;&lt;a href="http://wombatdialer.userecho.com" target="_blank"&gt;http://wombatdialer.userecho.com&lt;/a&gt;&lt;/a&gt; so the community can propose new features and discuss them before we implement them. And do not forget to follow us on &lt;a href="https://twitter.com/WombatDialer" target="_blank"&gt;Twitter&lt;/a&gt; or &lt;a href="http://www.facebook.com/WombatDialer" target="_blank"&gt;Facebook&lt;/a&gt; so you can be updated when we have something new for you!&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/49844662937</link><guid>http://blog.wombatdialer.com/post/49844662937</guid><pubDate>Tue, 07 May 2013 11:09:00 +0200</pubDate><category>asterisk</category><category>freebpx</category><category>Elastix</category><category>dialer</category><category>call-center</category><category>linux</category><category>autodialer</category><category>predictive</category><category>progressive</category><category>voicebroadcast</category></item><item><title>Tutorial: WombatDialer and PIAF</title><description>&lt;p&gt;It is quite easy to install WombatDialer on PBX-in-a-Flash in order to give it autodialer, voice broadcasting and progressive dialing capabilities. This was tested on PIAF 1.7.5.6.1&lt;/p&gt;

&lt;p&gt;Before we start, it is important to notice that there is no need to run WD on the same box your PBX is running. As WombatDialer relies exclusively on AMI, you would be likely better off (at least when experimenting) to set up a virtual box based on CentOS 6, install WombatDialer there and connect remotely to PIAF (or any other PBX). You will just need to create a special AMI user on your PBX allowing remote connection (see below).&lt;/p&gt;

&lt;p&gt;If you want to install it on the PIAF system, here is what you would do:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;Add the Loway repos&lt;/p&gt;

&lt;p&gt;wget -P /etc/yum.repos.d &lt;a href="http://yum.loway.ch/loway.repo" target="_blank"&gt;http://yum.loway.ch/loway.repo&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Install WombatDialer automatically using &lt;em&gt;yum&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;yum install wombat&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For the moment, stop &lt;em&gt;iptables&lt;/em&gt;, or you won&amp;#8217;t be able to connect remotely&lt;/p&gt;

&lt;p&gt;/etc/init.d/iptables stop&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Of course you would not want to run a production system with &lt;em&gt;iptables&lt;/em&gt; off, so just add a rule allowing access to port 8080 from your workstations.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Finish the installation using your browser&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Now open your browser and go to:&lt;/p&gt;

&lt;p&gt;http://server:8080/wombat/&lt;/p&gt;

&lt;p&gt;It will get you  to a page that will prompt for database creation.
This will create a db called &amp;#8220;wombat&amp;#8221; and will fill it in with initial data.&lt;/p&gt;

&lt;p&gt;When asked, remember that the default MySQL root password for PIAF is &amp;#8220;passw0rd&amp;#8221;.&lt;/p&gt;

&lt;p&gt;After this, it may need to update the database. Will take only a few seconds (this step might not be necessary - depends on the version of WD you are installing).&lt;/p&gt;

&lt;p&gt;Then, you will be shown the license agreement. Approve it (but read it first!)&lt;/p&gt;

&lt;p&gt;Now you can log in as &amp;#8220;demoadmin&amp;#8221; password &amp;#8220;demo&amp;#8221;.&lt;/p&gt;

&lt;p&gt;As a first thing, you&amp;#8217;ll have to tell WombatDialer to which server to connect to. If you connect via AMI to the local system, you can use default AMI user &amp;#8220;admin&amp;#8221; password &amp;#8220;amp111&amp;#8221;. If you installed WD on a different system, you need to create a AMI user that will allow remote connection - edit &lt;em&gt;/etc/asterisk/manager_custom.conf&lt;/em&gt; to add it. At this point you should really have a look at the &lt;a href="http://wombatdialer.com/manuals/WD_UserManual-chunked/ar01s02.html" target="_blank"&gt;Getting Started Guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now that WombatDialer is installed, you should look around on this blog to see many different things you can do with it. If you&amp;#8217;d like to try automated queue call-backs, see &lt;a href="http://blog.wombatdialer.com/post/41774590472/autorecall" target="_blank"&gt;&lt;a href="http://blog.wombatdialer.com/post/41774590472/autorecall" target="_blank"&gt;http://blog.wombatdialer.com/post/41774590472/autorecall&lt;/a&gt;&lt;/a&gt; - the source script can be found at &lt;a href="https://github.com/Loway/WombatDialerExamples" target="_blank"&gt;&lt;a href="https://github.com/Loway/WombatDialerExamples" target="_blank"&gt;https://github.com/Loway/WombatDialerExamples&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/47095049986</link><guid>http://blog.wombatdialer.com/post/47095049986</guid><pubDate>Thu, 04 Apr 2013 10:07:00 +0200</pubDate><category>asterisk</category><category>freepbx</category><category>piaf</category><category>pbx-in-a-flash</category><category>autodiler</category><category>voicebroadcast</category><category>progressive</category><category>call-center</category><category>linux</category><category>wombatdialer</category></item><item><title>A bit of history of WombatDialer (with furry picture)</title><description>&lt;p&gt;We originally started working on the &lt;a href="http://wombatdialer.com" target="_blank"&gt;WombatDialer&lt;/a&gt; as a &amp;#8220;sidekick&amp;#8221; of &lt;a href="http://queuemetrics.com" target="_blank"&gt;QueueMetrics&lt;/a&gt; for a couple of clients who were interested in having ways to automatically feed &lt;a href="http://queuemetrics.com/manuals/QM_UserManual-chunked/ar01s11.html" target="_blank"&gt;Quality Assessment&lt;/a&gt; data into QM. The idea was to recall callers and offer them a short IVR quality assessment menu, in order to gather information on how well their call-centre was behaving.&lt;/p&gt;

&lt;p&gt;So we needed something to do that, in a way that was basically  turn-key. By designing the requirements, we found out that you could have Asterisk do a lot of things that all had in common the dialing logic - see &lt;a href="http://www.wombatdialer.com/manuals/WD_UserManual-chunked/ar01s01.html#_why_was_wombatdialer_created" target="_blank"&gt;Why was WombatDialer created&lt;/a&gt; for a longer explanation. The name came from the son of our lead engineer, who was three at the time and heavily into wombats and furry animals in general.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/c29cc18c30f6d49ba1a993aa52a1d84b/tumblr_inline_mjppdtWJjy1qz4rgp.jpg" alt="A likewise wombat"/&gt;&lt;/p&gt;

&lt;p&gt;Our point with WD was not replacing common Asterisk predictive-dialer solutions (there are a number of them, and they work well) but offering declarative dialing primitives - you tell WD what you need and it performs as if it was one single call on one single server, though it may be hundreds of calls on multiple servers. The idea was that you would install it on an existing system - that had its own dialplan and GUI - and it would interface. That it would work along whatever telephony traffic you had on the box. So we did not initially target predictive, agent-heavy systems, but thought about telecasting, and moved on to power-dialer when used together with queues. And we added a &lt;a href="http://wombatdialer.com/purchase.jsp" target="_blank"&gt;free usage license&lt;/a&gt; so that people like you could download it and use it to create something new on their own PBX - no questions asked, but please share!&lt;/p&gt;

&lt;p&gt;We found a lot of interest so far - we already have a number of systems installed worldwide and many more in testing phase that we are following up. People keep coming up with ideas on things one could build - recalling queue hangups is really interesting, and so are reverse IVRs in general. We are learning a lot and try to make the product better.&lt;/p&gt;

&lt;p&gt;What would you like to build next to improve your call-center (or your PBX) by adding easy to use, scriptable outbound iteractions? Just &lt;a href="http://wombatdialer.userecho.com/" target="_blank"&gt;let us know&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/45427641800</link><guid>http://blog.wombatdialer.com/post/45427641800</guid><pubDate>Fri, 15 Mar 2013 18:19:00 +0100</pubDate><category>asterisk</category><category>WombatDialer</category><category>wombat</category><category>elastix</category><category>dialer</category><category>call-center</category><category>linux</category><category>free</category></item><item><title>Automatic queue recalls with WombatDialer and QueueMetrics</title><description>&lt;p&gt;If you run a call center, serving clients in a timely way is often very complex, as it requires having enough people available to handle traffic spikes. 
The number of callers that disconnect because they have been waiting too long in a queue is then an important driver of the quality of your work, and these frustrated callers are the focus of much attention and scheduling/planning efforts in all call centers.
This is because in a traditional setting doing inbound calling you basically had no other way of servicing the client but waiting for the person to call in.&lt;/p&gt;

&lt;p&gt;With an Asterisk-based PBX and using digital lines, this scenario changes a bit, as:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Your average caller has an associated caller-id that often matches a physical phone in their proximity&lt;/li&gt;
&lt;li&gt;Telephone traffic is very cheap compared to the cost of agent time for call handling&lt;/li&gt;
&lt;li&gt;You have ample means of programming the PBX to suit your exact needs&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;So it is now a conceivable scenario to improve the services you are offering by adding an automated call-back option, so that you search the logs of lost calls and you actively schedule recalls on them in order to get back to people who hung up in frustration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The plan: automatic queue recalls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this article, we explain how to implement a basic call-back scenario using QueueMetrics and WombatDialer. What we do is very easy, as in:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;We periodically run a script to gather the caller-ids of lost calls that were handled on a queue &lt;/li&gt;
&lt;li&gt;We check each caller-id as to be sure is a valid number&lt;/li&gt;
&lt;li&gt;We check that there is no subsequent successful call on the queue from the same caller-id (as to prevent recalling people who already retried themselves)&lt;/li&gt;
&lt;li&gt;We schedule those calls for dialing no more than once  per number per day&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;As our dialing schedule happens on a WombatDialer campaign, we can control the flow of calls through it by adding and removing agents supposed to handle outbound traffic, or pausing it completely during periods of high inbound traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1. Configuring QueueMetrics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In order to gather information  from QueueMetrics to an external script, we need to enable XML-RPC access credentials. This is usually very easy to do, as QueueMetrics ships with a (disabled) ROBOT login that  allows external access.&lt;/p&gt;

&lt;p&gt;Enabling it is very easy:  log in as an administrator, click on &amp;#8220;Edit users&amp;#8221;, edit the &amp;#8220;robot&amp;#8221; user and set &amp;#8220;Enabled&amp;#8221; to yes. While you are at it, take a second to change the default password.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2. Configuring WombatDialer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Set up WombatDialer with a queue end-point (as described for example in &lt;a href="http://blog.wombatdialer.com/post/35777830906/elastix-callback" target="_blank"&gt;&amp;#8220;Elastix Queue call-backs with WombatDialer&amp;#8221;&lt;/a&gt;) and make sure everything is working.&lt;/p&gt;

&lt;p&gt;Create a new campaign for calling back people - set its &amp;#8220;Idles on termination&amp;#8221; property to yes and make the logging QueueMetrics-compatible. This way the campaign can run until needed, waiting for more numbers to be added when idle. Do not add any call list as we will load numbers to be called through the WombatDialer APIs.&lt;/p&gt;

&lt;p&gt;Before you start scheduling recalls, your campaign should look like the following one:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/07820dcfd09bdfaa7f6538b5c5cfe769/tumblr_inline_mhdptmHafc1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;You might also want to pause it, so you can decide when to run it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3. The script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scripting QueueMetrics and WombatDialer is really easy. It can be done in any language - we chose PHP as it is well known, has good XML-RPC support to query QueueMetrics and is very simple to edit and customize.&lt;/p&gt;

&lt;p&gt;We created a sample script that can easily be downloaded from GitHub - as you will likely edit this to suit your needs, feel free to fork a new project and work on that. Our script is available from &lt;a href="https://github.com/Loway/WombatDialerExamples" target="_blank"&gt;&lt;a href="https://github.com/Loway/WombatDialerExamples" target="_blank"&gt;https://github.com/Loway/WombatDialerExamples&lt;/a&gt;&lt;/a&gt; in a folder named &amp;#8220;AutoRecall&amp;#8221;.&lt;/p&gt;

&lt;p&gt;The following parameters should be edited in the script:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$qm_server = "10.10.5.11";
$qm_port = 8080;
$qm_webapp = "queuemetrics";
$qm_login ="robot";
$qm_pass = "robot";
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;These parameters specify the XML-RPC connector of your QueueMetrics instance.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$wbt_url = "http://10.10.5.18:8080/wombat";
$wbt_cmp = "c1";
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;These parameters specify the URL of WombatDialer and the campaign that calls should be added to. The dialer must be running when the calls are added and the campaign should be active (usually IDLE). Note that the campaign you use for call-back might be paused so that call-backs are actually deferred during periods of high activity.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$queue = "300";
$lookback = 3600 * 8 ; // in seconds
$allowedPatterns = array( 
    "/^555..../",
    "/^0041.+/"
);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;These parameters decide which set of queue(s) should be scanned and how long is to look back for the current day. Multiple queues can be used, separated by the pipe character.&lt;/p&gt;

&lt;p&gt;The last parameter is a set of regexps that will be used to check the numbers read from QueueMetrics. At least one regexp must match for the number to be queued. This is used to avoid queueing invalid numbers or - worse - malicious numbers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4. Putting it all together&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In order to run the script periodically, you could crete a cron jub that runs it every 20 minutes. As number are never recalled more than once and the script keeps an history files of numbers already dialed, you can safely run it over and over again.&lt;/p&gt;

&lt;p&gt;Once tested, a crontab entry like the following one will automate the running:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;*/20 * * * * /usr/bin/php /root/WombatDialerExamples/AutoRecall/autoRecall.php
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is how a simple run looks like - the scripts logs its activity to STDOUT, so you may want to redirect it to some log file for the keeping.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$&amp;amp;gt;php autoRecall.php
Finding applicable period
Loading call log file for 2013-01-24
Looking for data between 2013-01-24.07:54:33 and 2013-01-24.15:54:33
 on server '10.10.5.25' - queues '300'
Query took 0 seconds.
# 201 - Last call lost @ 2013-01-24.15:46:39 - Scheduling.
Adding 201 to campaign c1 on WombatDialer.
Saving call log
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;After running this, you should see that new numbers are added to an AUTO call list like the one shown in the following screenshot; and if the campaign is not paused and agents are availble on the recall queue, calls will be dialed as needed.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/99e93fb979bc1ba0d6bc0ac98619827a/tumblr_inline_mhdpszgLCj1qz4rgp.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Improving the solution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In order to run this solution in a real-life scenario, you should edit the campaign in order to:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;set up a time window that matches your agents&amp;#8217; presence and when it is customarily allowed to recall. For example, even if a call is queued at 11 PM on a Saturday night, a recall might be acceptable only on Monday morning. This of course depends on what you are doing and the local customs.&lt;/li&gt;
&lt;li&gt;set up reschedule rules in order to handle calls unanswered and busy lines correctly. It would be too bad not to be able to recall just because the caller&amp;#8217;s phone was busy at the moment&lt;/li&gt;
&lt;li&gt;it could also be useful to connect the caller to a reverse-IVR first, so that they get a message like &amp;#8220;Hello, we are calling you back because of your call made at 10.30AM. If you&amp;#8217;d like to talk to one of our agents, please press 1 now&amp;#8221; before being routed to an agent&lt;/li&gt;
&lt;li&gt;a simple addition that could be made to the script would be to set up a minimum wait time to qualify calls; that is, you would recall only people who waitied in queue for more than 10 seconds.&lt;/li&gt;
&lt;li&gt;using a technique very similar to the one explained here, it would be trivial to set up campaigns for quality assessment or customer satisfaction, run as reverse IVRs.&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.wombatdialer.com/post/41774590472</link><guid>http://blog.wombatdialer.com/post/41774590472</guid><pubDate>Tue, 29 Jan 2013 09:50:00 +0100</pubDate><category>asterisk</category><category>linux</category><category>wombatdialer</category><category>dialer</category><category>call-center</category><category>elastix</category><category>QueueMetrics</category><category>queue</category><category>recall</category></item><item><title>WombatDialer 0.6.7 released</title><description>&lt;p&gt;A new version of WombatDialer is out. The major changes implemented have to do with what happens when a campaign run terminates abnormally - e.g. if the system is shut down in the middle of a call. In general WombatDialer is supposed to recover gracefully when it gets back up, but there were a couple of possible cases where calls would linger on in the live screen (&amp;#8220;ghost calls&amp;#8221;). This version introduces a sanity check at the beginning of each run so that the database is purged of possible unwanted entries.&lt;/p&gt;

&lt;p&gt;As a side effect of this job, we came across a set of cases where database access was sub-optimal and optimized those. This will make dialer startups quicker and will impose less load on the server when performing  Live monitoring of calls.&lt;/p&gt;

&lt;p&gt;The Live page was also improved - the details on which run is placing a particular call are easier to see, and the status of the dialer is also always visible from the Live page.&lt;/p&gt;

&lt;p&gt;As a last note, we are trying a new form of collaborative support system - you will find it at &lt;a href="http://wombatdialer.userecho.com" target="_blank"&gt;&lt;a href="http://wombatdialer.userecho.com" target="_blank"&gt;http://wombatdialer.userecho.com&lt;/a&gt;&lt;/a&gt;. It is supposed to make it easier for a community to be heard on what is important and should make our life easier when pushing for new features. We suggest you stop by and say hi, so we can test how it is.&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/41090728273</link><guid>http://blog.wombatdialer.com/post/41090728273</guid><pubDate>Mon, 21 Jan 2013 09:11:25 +0100</pubDate><category>asterisk</category><category>freepbx</category><category>elastix</category><category>dialer</category><category>call-center</category><category>linux</category><category>WombatDialer</category></item><item><title>WombatDialer 0.6.5 released</title><description>&lt;p&gt;Today we released &lt;strong&gt;version 0.6.5&lt;/strong&gt; of WombatDialer - this version contains a few minor fixes for the UI, most noticeably a complete reworking of the security system with locks and keys.&lt;/p&gt;

&lt;p&gt;Together with version 0.6.5, we release a &lt;a href="http://wombatdialer.com/manuals.jsp" target="_blank"&gt;new version of the User Manual&lt;/a&gt; that is now complete and covers all topics, including full documentation for the APIs, system administration and a Cookbook section that presents some real-life scenarios, plus a Getting Started section that shows a basic installation on Elastix.&lt;/p&gt;

&lt;p&gt;We have a &lt;a href="http://www.youtube.com/watch?v=d2hA4XAl7Pw" target="_blank"&gt;new video tutorial displaying WombatDialer installation&lt;/a&gt; and how to set up a simple telecasting campaign to run on an existing Elastix system in less than 10 minutes. It also shows how to set up basic rescheduling rules and how to analyze what went on during the campaign.&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/40167058055</link><guid>http://blog.wombatdialer.com/post/40167058055</guid><pubDate>Thu, 10 Jan 2013 11:13:00 +0100</pubDate><category>asterisk</category><category>elastix</category><category>manual</category><category>pbx</category><category>voip</category><category>freepbx</category><category>dialer</category><category>call-center</category><category>linux</category><category>wombatdialer</category></item><item><title>We have a new video tutorial displaying WombatDialer...</title><description>&lt;iframe width="400" height="225" src="http://www.youtube.com/embed/d2hA4XAl7Pw?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;We have a new video tutorial displaying WombatDialer installation and how to set up a simple telecasting campaign to run on an existing Elastix system in less than 10 minutes. 
It also shows how to set up basic rescheduling rules and how to analyze what went on during the campaign.&lt;/p&gt;

&lt;p&gt;After getting to this point, it will be easy to create the more complex solutions detailed on the User Manual (BTW we are releasing a new version of the User Manual next week).&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/40005967250</link><guid>http://blog.wombatdialer.com/post/40005967250</guid><pubDate>Tue, 08 Jan 2013 12:01:00 +0100</pubDate><category>asterisk</category><category>freepbx</category><category>elastix</category><category>dialer</category><category>call-center</category><category>linux</category><category>WombatDialer</category><category>wombat</category></item><item><title>WombatDialer 0.6.4 released</title><description>&lt;p&gt;We have just released WombatDialer 0.6.4 - this is the first version that does not expire but has a licensing model instead. So when you upgrade, it will contain a limited demo key and you can &lt;a href="http://wombatdialer.com/requestDemoKey.jsp" target="_blank"&gt;ask for a demo license&lt;/a&gt; in order to run a full test with a large number of lines. You should really upgrade as current versions will expire by the end of the current year.&lt;/p&gt;

&lt;p&gt;The licensing model used with WombatDialer is linked to the total number of lines it may use - does not matter how many campaigns you are running, how many calls you make and how many Asterisk servers it&amp;#8217;s controlling. You can purchase multiple licenses at once, so for example to have 60 lines you may install a 50-line and a 10-line license together. And we believe you can create intresting and useful applications even with the 2-line free license included - enough for a doctor&amp;#8217;s appointment reminders, for example. And pricing for license packs &lt;a href="http://wombatdialer.com/purchase.jsp" target="_blank"&gt;is really affordable&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Licenses can be installed from the License page, after you log in, and are displayed on the dialer status.&lt;/p&gt;

&lt;p&gt;We look forward to your comments -  WombatDialer is now a small community and it&amp;#8217;s starting to be used worldwide.&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/38376545832</link><guid>http://blog.wombatdialer.com/post/38376545832</guid><pubDate>Thu, 20 Dec 2012 12:20:43 +0100</pubDate><category>asterisk</category><category>linux</category><category>FreePBX</category><category>Elastix</category><category>dialer</category><category>call-center</category><category>WombatDialer</category></item><item><title>Over 200 downloads of WombatDialer 0.6</title><description>&lt;p&gt;By looking at the statistics this morning, we realized that WombatDialer 0.6 was downloaded over 200 times since it was released.
This really sounds like a good omen and goes beyond our expectations for the beta - thank you for making this possible!&lt;/p&gt;

&lt;p&gt;We are currently working on version 0.7 that should be out by the end of the year and will include the new licensing manager and a number of bug fixes found during the beta, plus we will add a new video that will show a complete installation on an Elastix system.&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/37107211793</link><guid>http://blog.wombatdialer.com/post/37107211793</guid><pubDate>Mon, 03 Dec 2012 12:44:02 +0100</pubDate><category>asterisk</category><category>freepbx</category><category>elastix</category><category>dialer</category><category>call-center</category></item><item><title>Small installation tutorial in Spanish</title><description>&lt;p&gt;We just found out that somebody from Voztovoice posted a short installation guide and review of WombatDialer, all in Spanish. It shows how easy it is to set up WombatDialer on a CentOS 6.3 system.&lt;/p&gt;

&lt;p&gt;You can find it on &lt;a href="http://www.voztovoice.org/?q=node/578" target="_blank"&gt;WombatDialer - Marcador automático para Asterisk&lt;/a&gt;.&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/36056839076</link><guid>http://blog.wombatdialer.com/post/36056839076</guid><pubDate>Mon, 19 Nov 2012 10:08:00 +0100</pubDate><category>asterisk</category><category>dialer</category><category>elastix</category><category>freebpx</category><category>linux</category><category>voztovoice</category></item><item><title>Elastix queue call-backs with WombatDialer</title><description>&lt;p&gt;You are called in to a client site; they seem to have a problem. They run a small (10 agents) inbound call centre,
and when you join everybody else in the meeting room, there is a large and colourful graph  in the middle of the table.
The graph shows the call wait times during the week and boy, it&amp;#8217;s not a good sight. Their main inbound activity is to 
offer client support for a company selling sport bikes, and everybody seems to be calling on Monday morning. 
It looks like people go riding on weekends and whatever problem they have, they call on Monday morning. Wait times
peak, abandon rates spike, and nobody is happy. The call center manager is mostly concerned of having to hire and train
some temp people in order to handle the load that only happens one day a week. They ask you if you have any better idea
on what can be done. And yes, you have some.&lt;/p&gt;

&lt;p&gt;You can program an Asterisk queue so that when people tire of waiting, they press a digit and get to
a menu where they can leave their number. Then the system queues their call and attempts to call them at a convenient 
time. This way:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;your customer are happy; they don&amp;#8217;t have to wait in queue for so long&lt;/li&gt;
&lt;li&gt;your call center manager is twice happy: the first time because wait times and abandon rates go down,
the second one because by placing calls at a convenient time they can smooth out the workload 
of their agents during the day&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This scenario requires some additional &amp;#8220;glue&amp;#8221; to what is basically supported by Asterisk - exiting a queue and
reading a number are easy, but then starts the pain. You&amp;#8217;ll have to create a database and write a script that
reads back from it. You have to handle invalid numbers, busy numbers and the like (if we promised to call back the 
client, we cannot just try once and forget about it). You&amp;#8217;ll have to have a GUI of some kind for the manager to start
and stop dialing. You&amp;#8217;ll have to adapt to the number of available agents. You&amp;#8217;ll have to report on this activities.
You&amp;#8217;ll have to avoid flooding the trunks of your PBX with too many calls. In short, it&amp;#8217;s the kind of thing
that gets more complex the more you think about it. That&amp;#8217;s what WombatDialer is for.&lt;/p&gt;

&lt;p&gt;What we plan to do is to use WombatDialer as the call-back engine. It can be controlled by an external HTTP API,
so you can do that from the Asterisk dial-plan. It has a definite topology and call back rules, so you get the
number of calls you expect on one or more Asterisk servers. It can work with an existing PBX and does not interfere
with calls that are not its own. It keeps track of call completions and knows what to do in case of invalid
and busy numbers. It has reports of its own and can work with QueueMetrics for powerful and detailed reports.&lt;/p&gt;

&lt;p&gt;The client uses Elastix as PBX system, so we&amp;#8217;ll have to integrate it with WombatDialer. No problem!&lt;/p&gt;

&lt;p&gt;So what we do is:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;First we create a normal queue, for inbound. We call it &amp;#8220;400&amp;#8221;.&lt;/li&gt;
&lt;li&gt;Then we create a call-back queue. If our main queue is called &amp;#8220;400&amp;#8221;, then let&amp;#8217;s call this second queue &amp;#8220;401&amp;#8221;.
The idea is that WD will monitor this queue - when you have members on this queue, then WD will start placing 
calls. This way an inbound call-center with multiple queues will find it very natural to have some agents join
and leave a call-back queue. When you creet this queue, make sure you set &amp;#8220;Ring Strategy: rrmemory&amp;#8221;, 
&amp;#8220;Event When Called: Yes&amp;#8221;, &amp;#8220;Member Status: Yes&amp;#8221;, &amp;#8220;Autofill: yes&amp;#8221; so that WD can use it effectively.&lt;/li&gt;
&lt;li&gt;we create a piece of dialplan that will handle the exits from queue &amp;#8220;400&amp;#8221; and will gather the telephone number&lt;/li&gt;
&lt;li&gt;we create a new &amp;#8220;custom extension&amp;#8221; (399) that will jump in the dialplan at &amp;#8220;Local/1@queue-leavenumber&amp;#8221;&lt;/li&gt;
&lt;li&gt;In Elastix, we create an IVR menu and set it as a destination for queue &amp;#8220;400&amp;#8221;. This menu has only one option
(1) that basically jumps to the custom extension &amp;#8220;399&amp;#8221; that we just created, in order to call our script&lt;/li&gt;
&lt;li&gt;we go back to the queue &amp;#8220;400&amp;#8221; and set its &amp;#8220;Fail Over Destination&amp;#8221; as our IVR we just created&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We start by editing the extensions_custom.conf file in our system, adding a new stanza like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[queue-leavenumber]
exten =&amp;gt; 1,1,NoOp
exten =&amp;gt; 1,n(Start),agi(googletts.agi,"Please enter your telephone number and we will call you back.",en)
exten =&amp;gt; 1,n,agi(googletts.agi,"The number must be composed of 7 digits.",en)
exten =&amp;gt; 1,n,Read(CBNUM,beep,7,,2,5)
exten =&amp;gt; 1,n,NoOp( Num ${CBNUM} )
exten =&amp;gt; 1,n,GotoIf($["${LEN(${CBNUM})}"="7"]?lenOk)
exten =&amp;gt; 1,n,agi(googletts.agi,"The number you entered has the wrong number of digits.",en)
exten =&amp;gt; 1,n,GoTo(1)

exten =&amp;gt; 1,n(lenOk),agi(googletts.agi,"You entered the following number",en)
exten =&amp;gt; 1,n,SayDigits(${CBNUM})
exten =&amp;gt; 1,n,Wait(1)
exten =&amp;gt; 1,n,agi(googletts.agi,"Press 1 to confirm or any other digit to start again.",en)
exten =&amp;gt; 1,n,Read(CONF,beep,1,,2,5)
exten =&amp;gt; 1,n,GotoIf($["${CONF}"="1"]?Store:Start)

exten =&amp;gt; 1,n(Store),NoOp
exten =&amp;gt; 1,n,Set(WHEN=${STRFTIME(${EPOCH},,%y%m%d-%H%M%S )}
exten =&amp;gt; 1,n,Set(PARM=number=${CBNUM}&amp;amp;attrs=orgQ:400%2Cwhen:${WHEN})
exten =&amp;gt; 1,n,Set(foo=${CURL(&lt;a href="http://10.10.5.18:8080/wombat/api/calls/?" target="_blank"&gt;http://10.10.5.18:8080/wombat/api/calls/?&lt;/a&gt; op=addcall&amp;amp;campaign=callback&amp;amp;${PARM})})
exten =&amp;gt; 1,n,agi(googletts.agi,"Thank you! we will call you back as soon as possible.",en)
exten =&amp;gt; 1,n,Hangup
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We use Google TTS as a voice synthesizer - you could use a different one or you could have the messages custom-recorded for you.
What our dialplan does is first to collect a 7-digit number, then read it back asking for confirmation and when confirmed,
it sends it over to WombatDialer on a campaign called &amp;#8220;callback&amp;#8221;. Together with the number, we also store the code of the queue
that the call was on and the date and time this number was gathered.
(Please note that in order to send multiple comma-separated parameters in the HTTP request, 
we have to use &amp;#8216;%2C&amp;#8217; instead of the comma &amp;#8216;,&amp;#8217;).&lt;/p&gt;

&lt;p&gt;In order to configure WombatDialer:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;We create a trunk called &amp;#8220;Trunk&amp;#8221; with a dial-string of Local/9${num}@from-internal and a capacity of 10 lines. This basically
replies all numbers as if they were entered on a local extension prefixed by 9. &lt;/li&gt;
&lt;li&gt;We create an End-Point of type Queue for monitoring queue 401; set extension to &amp;#8220;401&amp;#8221; and context to &amp;#8220;from-internal&amp;#8221;; max number of
lines to 10; boost factor as 1 and max waiting calls to 2. This means that the number of calls placed will match the number of 
available agents on queue 401. &lt;/li&gt;
&lt;li&gt;We create a campaign called &amp;#8220;callback&amp;#8221;; set it to Idle on termination and turn on QM_COMPATILE logging. We add the trunk 
and the EP we just created. We create a set of reschedule rules in order to handle REJECTED, BUSY, INVALID and NOANSWER calls,
e.g. by retrying up to 5 times each waiting 10 minutes between each attempt. Note that we create no lists for this campaign.&lt;/li&gt;
&lt;li&gt;We start the new campaign; having no numbers,  it should immediately turn yellow on the Live page to tell you it&amp;#8217;s idling.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If we start sending calls to the queue and we try and leave any numbers, we will see that a new list will be created on  WombatDialer under the name &amp;#8220;callback/AUTO&amp;#8221; and that will contain the numbers and attributes like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; Number:     5551235
 Attributes: orgQ:400   when:121115-153402
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Those numbers are NOT immediately called, but WD will wait for some agent to be present and active on queue &amp;#8220;401&amp;#8221; so that
they can be called back. This way, the call-center manager can monitor the current call backlog and decide who and 
when it is to join the callback queue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further improvements&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;If there is a caller-id on the call, you could ask the caller whether to use it as the number to be called back&lt;/li&gt;
&lt;li&gt;You could add time limits to the WD campaign so that you are sure that no calls are made otside acceptable periods &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;See also&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;WombatDialer User Manual at &lt;a href="http://wombatdialer.com" target="_blank"&gt;http://wombatdialer.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.wombatdialer.com/post/35777830906</link><guid>http://blog.wombatdialer.com/post/35777830906</guid><pubDate>Thu, 15 Nov 2012 17:09:00 +0100</pubDate><category>QueueMetrics</category><category>WombatDialer</category><category>asterisk</category><category>call-center</category><category>callback</category><category>elastix</category><category>queue</category><category>linux</category><category>freepbx</category><category>voip</category></item><item><title>WombatDialer 0.6.0 has just been released.</title><description>&lt;p&gt;This is the end of a path - started with 0.5.0 - that was meant to improve the usability of WombatDialer. This could not have been possible without the help of all beta testers who contribuited their feedback - the amount of feedback we had on WombatDialer really exceeded our expectations, so thank you!&lt;/p&gt;

&lt;p&gt;The main changes since 0.5.0 are:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;WD has a way to &amp;#8220;hide&amp;#8221; campaigns and lists that are no longer in use&lt;/li&gt;
&lt;li&gt;Many changes and new graphs on the Live page, including statistics of running campaigns&lt;/li&gt;
&lt;li&gt;Editing of call attributes&lt;/li&gt;
&lt;li&gt;Export of call sets&lt;/li&gt;
&lt;li&gt;Creation of new  lists from campaign outcomes (from the Reports tab)&lt;/li&gt;
&lt;li&gt;50+ errors and fixes in the GUI&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you tried WombatDialer before you will notice its interaction is noticeably better. And we do have a User Manual now - though it&amp;#8217;s still a work in progress, it should document well the general principles and the full APIs, and explains the rationale behind WombatDialer.&lt;/p&gt;

&lt;p&gt;We also added the option to install WombatDialer manually in a web container, so you do not have to use the RPM packages if you don&amp;#8217;t need to.&lt;/p&gt;

&lt;p&gt;One last note: a number of people are working on implementing queue call-back scenarios with WombatDialer. This seems to be something that many call-centers need, and it&amp;#8217;s something WombatDialer is very well suited to. We are working on a general tutorial and we plan to release it on the blog in a few days.&lt;/p&gt;

&lt;p&gt;WombatDialer and its manuals are available from &lt;a href="http://wombatdialer.com" target="_blank"&gt;http://wombatdialer.com&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/35765674267</link><guid>http://blog.wombatdialer.com/post/35765674267</guid><pubDate>Thu, 15 Nov 2012 09:43:04 +0100</pubDate></item><item><title>News and User Manual... at last</title><description>&lt;p&gt;We have been working for a while on improving the WombatDialer experience. So in versions 0.5.0 to 0.5.7 we fixed many glitches in the user interface and made the user experience way smoother to follow. We thank the many people who tested WombatDialer and posted error reports so we could improve (you know who you are!).&lt;/p&gt;

&lt;p&gt;WombatDialer has been in production use in three medium sites for a couple of months now (adding to our initial pilot site), having 50 to 100 agents each, and has been exensively used as a robodialer and a power dialer. So we expect it to be essentially stable and usable. No major issues have been found in the dialer itself so far. We welcome all comments and suggestions.&lt;/p&gt;

&lt;p&gt;As an added benefit, we now have an initial draft of the User Manual online - it should be enough to document the basic concepts and the APIs in a systematic fashion. You can find it in HTML or PDF formats on the &lt;a href="http://wombatdialer.com/manuals.jsp" target="_blank"&gt;manuals page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We had a lot of good feedback and suggestions at the Astricon 2012, so stay tuned!&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/34696457124</link><guid>http://blog.wombatdialer.com/post/34696457124</guid><pubDate>Wed, 31 Oct 2012 12:33:00 +0100</pubDate><category>QueueMetrics</category><category>WombatDialer</category><category>asterisk</category><category>call-center</category><category>dialer</category><category>dialplan</category><category>queue</category><category>wombat</category><category>astricon</category></item><item><title>WombatDialer and QueueMetrics</title><description>&lt;p&gt;The WombatDialer can be used as a stand-alone product for message broadcating, but it was built to integrate easily with QueueMetrics, the premier call-center monitoring and reporting tool for the Asterisk PBX. WombatDialer and QueueMetrics do different things, but together can be a very powerful call-center solution.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;WombatDialer is able to use a Queue as and end-point in order to connect calls to a set of agents&lt;/li&gt;
&lt;li&gt;QueueMetrics is able to monitor extensively the queue and provides a convenient agent interface that works well with WombatDialer&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In this example, we improve the scenario described in &lt;a href="http://blog.wombatdialer.com/post/25927555359/onecarriot" target="_blank"&gt;Feeding Wombats, one carrot at a time&lt;/a&gt; imagining that the want to:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;use a custom CRM interface so that agents can immediately see the name of the person being called and can open up an external CRM application for each client so they can gather donation data&lt;/li&gt;
&lt;li&gt;monitor each agent&amp;#8217;s performance &lt;/li&gt;
&lt;li&gt;use a dynamic list of people to be called so that as soon as you know of an interesting lead, you can add it to the list of persons to be called.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can have WombatDialer and QueueMetrics installed on the same server, unless you have a very high load or a very high number of lines.&lt;/p&gt;

&lt;p&gt;As a first step, we&amp;#8217;ll have to create a small interface script that will be our CRM application. We will call it wombatPopup.php and will store it on one of our servers as &lt;a href="http://10.10.5.10/lenz/wombatPopup.php" target="_blank"&gt;http://10.10.5.10/lenz/wombatPopup.php&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;  Plain Wombat Agent Panel&amp;lt;hr&amp;gt;
  &amp;lt;?
  $number = $_REQUEST["caller"];
  $agent  = $_REQUEST["agent"];
  $unique = $_REQUEST["unique"];

  preg_match('/#(\d+)\s(.+)/', $number, $matches);
  $id = $matches[1];
  $name = $matches[2];
  ?&amp;gt;

  Person is: &amp;lt;?= $name ?&amp;gt; (ID #&amp;lt;?= $id ?&amp;gt;)&amp;lt;p&amp;gt;
  Agent is: &amp;lt;?= $agent ?&amp;gt; &amp;lt;p&amp;gt;
  Call unique is: &amp;lt;?= $unique ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This page basically displays the person&amp;#8217;s name and ID, so we can display it immediately - or this could redirect to an external CRM application.&lt;/p&gt;

&lt;p&gt;At the Asterisk level, if you have not already done so, create a queue &amp;#8220;999&amp;#8221; with the correct parameters to be monitored by Wombat - see &lt;a href="http://blog.wombatdialer.com/post/30306271938/understand-queue-ep" target="_blank"&gt;Queue end-points in Wombat&lt;/a&gt; . Then edit your extensions_custom.conf file so that you have an extension &amp;#8220;1235&amp;#8221; that leads to the queue:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;   [from-internal-custom]
   ….
   exten =&amp;gt; 1235,1,Answer
   exten =&amp;gt; 1235,n,Set(CALLERID(num)=#${ID} ${PERS})
   exten =&amp;gt; 1235,n,Goto(from-internal,999,1)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This rewrites the incoming caller-id for the queue to e.g. &amp;#8220;#1234 John_Doe&amp;#8221;, so this is what the agent sees - even before the agent pop-up is opened. This also is recorded in QueueMetrics, so this is what you will see when you run call reports. Note that if you run FreePBX you cannot call the queue directly using the Queue() command but you&amp;#8217;ll have to go through its dialplan in order to have all parameters correctly set.&lt;/p&gt;

&lt;p&gt;In QueueMetrics,  set the following properties in configuration.properties:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    realtime.agent_autoopenurl=true
    default.crmapp=
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then create a queue &amp;#8220;999&amp;#8221; and set its Queue URL to:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;    &lt;a href="http://10.10.5.10/lenz/wombatPopup.php?caller=" target="_blank"&gt;http://10.10.5.10/lenz/wombatPopup.php?caller=&lt;/a&gt;[C]&amp;amp;unique=[U]&amp;amp;agent=[A]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This tells QueueMetrics that it has to enable a screen-pop for calls coming in through that queue.&lt;/p&gt;

&lt;p&gt;Now log on to WombatDialer; create an EndPoint of type Queue set for queue 999, and its entry point in the dialplan to 1235@from-internal-custom. Do not forget to set the &amp;#8220;Boost factor&amp;#8221; to 1 and the &amp;#8220;maximum queue length&amp;#8221; to 2.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m9eok8lqVL1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Then create a campaign called &amp;#8220;QmSample&amp;#8221; that idles on termination.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m9eokehQIB1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Set the trunks, the EP we just created, add no lists and define any reschedule rules you need. The end result should look like the following:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m9eoklUZoU1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Now start the campaign. It will go in status IDLE immediately, as it has no numbers to dial, and you will see it all yellow in the Live page of WombatDialer.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m9eokvdZHs1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;At this point, it is time for your agents to log in in QueueMetrics. Have them log-in to their Agent&amp;#8217;s page, and from there log them on to queue 999. At this point, make sure that each agent&amp;#8217;s browser allows QueueMetrics to open pop-up windows (this is usually disabled in modern browsers).&lt;/p&gt;

&lt;p&gt;Now, for each call you&amp;#8217;d like to be started, send an HTTP request to WombatDialer that looks like the following one (we do this through the Linux shell, but there is nothing preventing you to script this in some other way:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt; curl "http://10.10.5.18:8080/wombat/api/calls/index.jsp
       ?op=addcall
       &amp;amp;campaign=QmSample
       &amp;amp;number=2000136
       &amp;amp;attrs=ID:2301,PERS:John_Doe"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that you associate two parameters: ID that is a unique id used by your CRM and PERS that is the called person&amp;#8217;s name. You could also add additional parameters you may need, e.g. a person&amp;#8217;s class or their thelephone number.&lt;/p&gt;

&lt;p&gt;What happens now is that when the call goes through, its caller-id is rewritten as &amp;#8220;#2301 John_Doe&amp;#8221; as soon as it reaches Asterisk. When your agent receives the call, they will reload the agent&amp;#8217;s page and the pop-up will be immediately opened.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m9eol4z8cs1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;In the pop-up, you parse the caller field and extract your CRM id, so you can use this for your external application to display the correct data.&lt;/p&gt;

&lt;p&gt;From the agent&amp;#8217;s page you can also manually open other forms for recent calls. The agent will also see the person&amp;#8217;s name in QueueMetrics, so this makes their life easier.
The agent may also set a manual status code for each call through QueueMetrics, e.g. if the sale was successful or not, and this lets you measure your agent&amp;#8217;s performance. You may also use QueueMetrics&amp;#8217;s extensive QA monitoring features to analyze calls and improve the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analyzing outbound campaigns&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you set your campaign to have QM_COMPATIBLE logging, you will find data abpout two different queues on QueueMetrics:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;If you run a report for queue &amp;#8220;QmSample&amp;#8221;, you will see all calls that Wombat attempted - the successful as well as the unsuccessful ones. This is basicall the activity that WombatDialer performed and the actual telephone usage durations. In a real-life scenario, the vast majority of calls will be unanswered.&lt;/li&gt;
&lt;li&gt;If you run a report for queue &amp;#8220;999&amp;#8221;, you will see activty about calls that were successfully connected and were actually queued to be answred by agents, You would expect to have a very low unanswered rate here - if it is high, it means something is not working as expected. You will of course have some lost calls, e.g. because the called person hung up before the agent was connected.&lt;/li&gt;
&lt;li&gt;The difference between the number of successful calls in &amp;#8220;QmSample&amp;#8221; and the total number of calls in &amp;#8220;999&amp;#8221; are calls that were hung-up before reaching the queue, e.g. during an initial IVR phase.&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.wombatdialer.com/post/30306486415</link><guid>http://blog.wombatdialer.com/post/30306486415</guid><pubDate>Mon, 27 Aug 2012 10:53:00 +0200</pubDate><category>QueueMetrics</category><category>queue</category><category>Asterisk</category><category>dialer</category><category>call-center</category><category>reporting</category></item><item><title>Understanding queue end-points in Wombat</title><description>&lt;p&gt;An end-point of type queue in Wombat tries to determine the number of available channels based on the number of available agents on the queue it is observing. An agent is considered available if it is logged on to the queue, is not paused and is not currently in conversation.&lt;/p&gt;

&lt;p&gt;After getting the number of available agents, it multiplies it by the &amp;#8220;boost factor&amp;#8221; (that is used to account for the success rate in connecting the numbers to be dialed) and tries to schedule as many calls. Therefore, if you have e.g. 7 available agents and a boost factor of 1.3, it will try to connect to 9 numbers at once (7 x 1.3 = 9.1).&lt;/p&gt;

&lt;p&gt;It will also enforce two limits:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;If there are more than &amp;#8220;max waiting calls&amp;#8221; waiting on a queue, it will not try and place new calls - in theory there should never be calls queued, as they follow the number of availble agents, but it is possible that either some agent logs off after being counted to place calls or some calls reach a queue without passing through Wombat. This also acts as a counterbalance to high &amp;#8220;boost factor&amp;#8221; values.&lt;/li&gt;
&lt;li&gt;it will never place more than &amp;#8220;max channels&amp;#8221; calls on the queue - this lets you use a shared queue where some calls come from inbound activity and some come from Wombat itself. Of course you can turn this off by setting &amp;#8220;max channel&amp;#8221; to a value higher than the total number of agents on the queue.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;It is also important to notice that the queue is used only as a way to know how many calls can be placed on a queue, but calls will still be transferred to a point in the dial-plan that should lead to the queue. This lets you execute dial-plan logic (e.g. playing pre-recorded messages or running IVRs) on the calls it just placed.&lt;/p&gt;

&lt;p&gt;In order to use Wombat effectively with a queue, the following guidelines are best followed:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;though Wombat would work with static member channels, if you want your calls to go through to agents who may or may not be available (e.g. some days they may be sick) it is strongly advisable to  use dynamic agents who log on and off from the queue.&lt;/li&gt;
&lt;li&gt;as an agent cannot be physically available at all times during the day, it is important that they have a way to pause themselves, be it to run &amp;#8220;wrap up&amp;#8221; activities after calls or to take breaks. The QueueMetrics web interface offers an excellent panel that lets you add pause codes as well&lt;/li&gt;
&lt;li&gt;the queue must provide events to Wombat about agent activities. Therefore you must set &amp;#8220;eventswhencalled=true&amp;#8221; - otherwise the queue will be unobservable. It is also important that extension presence is correctly observed - e.g. if an end-point is busy because the agent is doing a personal call, its queue status should immediately reflect this. Whenther this happens or not on your system is a matter of Asterisk version and type of channel that is used to reach the agent - with recent versions of Asterisk and SIP channels this should work automatically.&lt;/li&gt;
&lt;li&gt;the queue should connect calls to agent as efficiently as posssible when there are multiple calls waiting and multiple avavilable agents, so it should have the &amp;#8220;autofill&amp;#8221; option set to true. &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In order to run a campaign with a Queue endpoint, it is best to:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;create a campaign with a Queue endpoint. You may create it IDLE and add no call lists, so the campaign does not actually do anything until fed some numbers.&lt;/li&gt;
&lt;li&gt;run that campaign &lt;/li&gt;
&lt;li&gt;reload the Dialer status in order to see if the queue is being observed (you have to click on the reload icon manually each time). If the queue is present, you should see it something saying &amp;#8220;Free 4 of 7&amp;#160;W:2&amp;#8221;. This means that Wombat is seeing 7 agents connected of which 4 are free (where 4 is the result of multiplying the actual number of observd channels by its boost factor), and that there are 2 calls waiting on the queue. &lt;/li&gt;
&lt;li&gt;try and log on, log off, pause and unpause an agent. You should see the number of free and available channels. Try also sending calls to the queue and see if the number of agents and of waiting calls is correct. &lt;/li&gt;
&lt;li&gt;try also placing calls from some agent extensions and see if the number of free channels reflects this correctly.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m9enwsCyz21rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;The Queue functionality of Wombat lets you use Wombat as a powerful progressive dialer and can lead to very complex integration scenarios, but as it involves actual people being called and answering the phone, it is better to understand it well before actually using it in production.&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/30306271938</link><guid>http://blog.wombatdialer.com/post/30306271938</guid><pubDate>Mon, 27 Aug 2012 10:44:00 +0200</pubDate><category>Asterisk</category><category>queue</category><category>dialer</category><category>WombatDialer</category><category>AGI</category></item><item><title>Helping wombats - one carrot at a time</title><description>&lt;p&gt;You know how it goes; so many good ideas in real-life end up being limited by the amount of funds you can raise to implement them. That&amp;#8217;s why Vicky, the energetic new president of &amp;#8220;Friends of the Wombat&amp;#8221;, called you. &amp;#8220;Friends of the Wombat&amp;#8221; is a non-profit institution that helps wombats in need, but their activities are limited by the rising cost of carrots; so they decided to start a volunteer fund-raising campaign.&lt;/p&gt;

&lt;p&gt;What they would like to do is to call a list of known contacts  that expressed an interest in wombats and ask them to make a donation. They started doing this manually with paper and pencil, but getting to a lead is really tiring and time-consuming – their volunteers spend most of the time dialling numbers and it is really hard for them to get through to somebody who is interested.&lt;/p&gt;

&lt;p&gt;After a good cup of green tea, what you propose to do is to use &lt;a href="http://www.wombatdialer.com" target="_blank"&gt;WombatDialer&lt;/a&gt; to automate the process by dividing it into multiple stages:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Create an electronic list of those leads&lt;/li&gt;
&lt;li&gt;Leads from their list are dialled &lt;/li&gt;
&lt;li&gt;If the call is answered, a message is played that explains what the campaign is for &lt;/li&gt;
&lt;li&gt;If the callee is interested, they press 1 to be put in conversation with a volunteer that will explain how to send a donation.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This setting leads to two huge efficiency boosters:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;As numbers are dialled automatically and error conditions are handled behind the scenes, a lot of drudge work with paper and telephone keyboards is automated; no more post-it notes to recall a busy number!&lt;/li&gt;
&lt;li&gt;As they noticed that about 50% of the calls made manually result in calls to busy numbers or numbers where nobody picks up, and that only 50% of the callees are actually interested after an initial interview, they expect that 75 calls out of every 100 they make can be screened out automatically. So if they have 4 volunteers on shift, WombatDialer could start 16 calls at once on average, and have all of our volunteers busy most of the time with people who are actually interested in contributing.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In order to implement such a campaign with WombatDialer, we start by creating a call queue that will hold our agents and will send them calls. You can use any Asterisk GUI to do this -  in the example below we use Elastix, but you can choose the one that suits you best.&lt;/p&gt;

&lt;p&gt;We go to &lt;em&gt;Queues&lt;/em&gt; -&amp;gt; &lt;em&gt;Create new&lt;/em&gt;, set the extension for the queue as 999, enter any name you want, and look on the settings below so that:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Strategy is set to &amp;#8220;rrmemory&amp;#8221;&lt;/li&gt;
&lt;li&gt;Queue events: yes  (this is very important – if you don&amp;#8217;t do this Wombat won&amp;#8217;t be able to observe your queue at all). &lt;/li&gt;
&lt;li&gt;Autofill: yes (all free agents are assigned calls at the same time)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you create a queue manually without using a GUI, configure it with the parameters below so that WombatDialer can observe it.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[999]
autofill=yes
eventmemberstatus=yes
eventwhencalled=no
maxlen=0
strategy=rrmemory
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now we create a custom piece of dialplan to be called as an end-point for calls that connect successfully.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[friendscampaign]
exten =&amp;gt; 100,1,Answer
exten =&amp;gt; 100,n,Playback(campaign_message)
exten =&amp;gt; 100,n,Read(type,,1)
exten =&amp;gt; 100,n,GotoIf($["${type}" = "1"]?ok)
exten =&amp;gt; 100,n,Goto(1)

exten =&amp;gt; 100,n(ok),UserEvent(CALLSTATUS,Uniqueid:${UNIQUEID},V:1)
exten =&amp;gt; 100,n,Queue(999,,120)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(In order to make this example shorter, we assume you have a baisc familiarity with WombatDialer concepts such as Campaigns, Servers, Trunks and End-points. If you don&amp;#8217;t, see the tutorial at &lt;a href="http://blog.wombatdialer.com/post/23597570852/tut-idle" target="_blank"&gt;&lt;a href="http://blog.wombatdialer.com/post/23597570852/tut-idle" target="_blank"&gt;http://blog.wombatdialer.com/post/23597570852/tut-idle&lt;/a&gt;&lt;/a&gt;  )&lt;/p&gt;

&lt;p&gt;Now log-in to WombatDialer and create a new End-Point:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Type: QUEUE&lt;/li&gt;
&lt;li&gt;Queue: 999&lt;/li&gt;
&lt;li&gt;Max channels: 10&lt;/li&gt;
&lt;li&gt;Boost factor: 2.0&lt;/li&gt;
&lt;li&gt;Max waiting callers: 2&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This means that WombatDialer will try and place two calls for each agent available, but never more than 10, and will stop placing calls if there are two or more people waiting in queue. We expected to use a boost factor of three to four given the previous statistics, but it is better to start with a small figure and grow it if needed.&lt;/p&gt;

&lt;p&gt;It is important to understand the impact of different boost factor settings; in general having more calls made than agents may result in calls waiting in queue when all of your agents are busy (in call-center parlance this is usually referred as &amp;#8220;nuisance calls&amp;#8221;). WombatDialer tries to minimize the impact of this case by continuously monitoring the number of calls waiting  on the queue and avoiding placing new calls if there are too many. If you don&amp;#8217;t want to have cases where calls are not immediately connected to an agent, you should leave the boost factor to 1, that is, place no more calls than available agents. The trade-off here is that agents end up being under-used, as they have to wait for a successful call to come in.&lt;/p&gt;

&lt;p&gt;We then create a test trunk, upload a list of test numbers and create a campaign  called &amp;#8220;friends&amp;#8221; as in the previous examples; we now start the dialer and start the campaign from the Live page. When we start running it we notice that it does not seem to work – the campaign is running but no calls are placed. How comes?&lt;/p&gt;

&lt;p&gt;If we reload the current Dialer status, we see that it is saying that the queue has 0 channels available – this is because there are no agents on the queue.&lt;/p&gt;

&lt;p&gt;If we log an agent on (e.g. by entering 999* on Elastix), we will notice that WombatDialer starts dialing. If you pause an agent or log him off, WombatDialer will immediately react and adapt to the changed number of available end-point channels.&lt;/p&gt;

&lt;p&gt;Another thing that we do is to track (through a status code) which callers ask for being put in contact with a volunteer – this allows easy inspection of what goes where from the Campaign Report panel.&lt;/p&gt;

&lt;p&gt;Now all we have to do is to set our campaign to use an actual telephone trunk and upload the &amp;#8220;real&amp;#8221; list of numbers and we are ready to go – it&amp;#8217;s time to buy some new carrots for our wombats!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding statistics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you run a report of our campaign with a queue analyzer like QueueMetrics, you will have two different views of the campaign:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;if you analyze the queue &amp;#8220;friends&amp;#8221; (the one that matches the name of your WombatDialer campaign) you will see the total &amp;#8220;external&amp;#8221; system activity – all calls placed on the campaign are tracked, and the wait time matches the external wait time (that is, the time between the dial request and a successful connect). All calls appear to be connected on the end-point, as you could have multiple ones assigned to the same campaign.&lt;/li&gt;
&lt;li&gt;if you analyze the queue &amp;#8220;999&amp;#8221;, you will see the human side of action – how many calls were queues for humans to interact with, how fast they were answered and by whom.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Further expansion&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;You can use the same end-point in multiple parallel campaigns, if needed.&lt;/li&gt;
&lt;li&gt;It is possible that your campaign reaches someone who is interested but is currently doing something else so does not have the time to speak to your volunteers. They could tell you by hitting 2 – you could add a Reschedule Rule that reschedules the call in a few hours.&lt;/li&gt;
&lt;li&gt;You could easily generate personalized messages instead of one single rescorded message by using a Text-to-Speech synthesizer, as in example &lt;a href="http://blog.wombatdialer.com/post/24187267017/drstrangelove" target="_blank"&gt;http://blog.wombatdialer.com/post/24187267017/drstrangelove&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Please note that outbound telemarketing, whether it is of the good or evil persuasion, is regulated by your local law, so be sure you comply to its terms before you start calling millions of people!&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/25927555359</link><guid>http://blog.wombatdialer.com/post/25927555359</guid><pubDate>Tue, 26 Jun 2012 16:42:00 +0200</pubDate><category>asterisk</category><category>voip</category><category>dialer</category><category>predictive</category><category>WombatDialer</category><category>wombat</category></item><item><title>Tutorial: Outbound IVRs and dr. Strangelove</title><description>&lt;p&gt;A Dr. Strangelove just called, saying he needs your help for an automated appointment reminder system. Dr. Strangelove is tired of patients forgetting appointments, so he needs a way to call them the day before and making sure they will be there at the right time. Also, as he specializes in every possible thing, he needs to know what the appointment will be about so he can either have an operating room ready to remove your appendix or his psych couch cleaned and stocked with a large supply of paper towels. Do you think you can help?&lt;/p&gt;

&lt;p&gt;After calling him, you understand that he wants a system that will not only connect to a list of numbers and handle common issues (busy calls, non-answers, etc) but also a system that is able to detect whether the callee actually confirms receipt of the message. If they do, that&amp;#8217;s okay; if they don&amp;#8217;t, a new call is placed after a while.&lt;/p&gt;

&lt;p&gt;He also wants a system that is able to synthesize a custom message for each call, and that is able to gather data from the callee and pass it along to his office management system as it is collected.&lt;/p&gt;

&lt;p&gt;Doing this with WombatDialer is easy; it is basically a matter of implementing an outbound IVR and tracking call parameters and call completion codes. Doing so will also let us show how WombatDialer handles call retries. As an added bonus, we&amp;#8217;ll see how WombatDialer notifies other systems over HTTP.&lt;/p&gt;

&lt;p&gt;To get us started, we create a list of telephone numbers called “Appointments” with custom attributes; in order to do this, we log in to WombatDialer, go to the Lists page and create a new list. After creation, we select it and upload a list of numbers like the following one:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;5551234,HH:10,MM:30
5556785,HH:11,MM:00
5552012,HH:11,MM:30
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This means that the person at number 5551234 is to be reminded an appointment for tomorrow at 10:30. We use two separate variables as this makes life easier for our Text-to-Speech engine.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m4xm5yCDaJ1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;We now have to program the outbound IVR context in Asterisk; we can do that easily with the help of WD call attributes so that we know what we have to tell our customer. In this example, we will also use the Google Text-to-Speech engine to synthesize audio on-demand.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[drstrangelove]
exten =&amp;gt; s,1,Answer
exten =&amp;gt; s,n,Set(TIMEOUT(response)=5)
exten =&amp;gt; s,n,UserEvent(CALLSTATUS,Uniqueid:${UNIQUEID},V:0)
exten =&amp;gt; s,n(start),agi(googletts.agi,"Your appointment with doctor 
                strangelove is for tomorrow at ${HH} ${MM}")
exten =&amp;gt; s,n,agi(googletts.agi,"Press 1 for to book for major surgery 
                press 2 for psychiatric counseling.")
exten =&amp;gt; s,n,Read(type,,1)
exten =&amp;gt; s,n,GotoIf($["${type}" = "1"]?appe)
exten =&amp;gt; s,n,GotoIf($["${type}" = "2"]?psyc)
exten =&amp;gt; s,n,Goto(start)

exten =&amp;gt; s,n(appe),UserEvent(ATTRIBUTE,Uniqueid:${UNIQUEID},APPT:APPE)
exten =&amp;gt; s,n,agi(googletts.agi,"You choose the appendectomy.")
exten =&amp;gt; s,n,Goto(confirm)

exten =&amp;gt; s,n(psyc),UserEvent(ATTRIBUTE,Uniqueid:${UNIQUEID},APPT:PSYC)
exten =&amp;gt; s,n,agi(googletts.agi,"You choose psychiatric counseling.")
exten =&amp;gt; s,n,Goto(confirm)

exten =&amp;gt; s,n(confirm),agi(googletts.agi,"Thank you! Now press 1 
                to confirm the appointment")
exten =&amp;gt; s,n,agi(googletts.agi,"or 2 to cancel it.")
exten =&amp;gt; s,n,Read(conf,,1)
exten =&amp;gt; s,n,GotoIf($["${conf}" = "1"]?ok) 
exten =&amp;gt; s,n,GotoIf($["${conf}" = "2"]?ko)
exten =&amp;gt; s,n,Goto(confirm)

exten =&amp;gt; s,n(ok),UserEvent(CALLSTATUS,Uniqueid:${UNIQUEID},V:1)
exten =&amp;gt; s,n,agi(googletts.agi,"The appointment was confirmed. 
                See you tomorrow.")
exten =&amp;gt; s,n,Hangup

exten =&amp;gt; s,n(ko),UserEvent(CALLSTATUS,Uniqueid:${UNIQUEID},V:2)
exten =&amp;gt; s,n,agi(googletts.agi,"Boo the appointment was cancelled.")
exten =&amp;gt; s,n,Hangup
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notable points in the code above are:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Custom call attributes &lt;code&gt;HH&lt;/code&gt; and &lt;code&gt;MM&lt;/code&gt; are passed along with the phone number so we can know what to tell each client. &lt;/li&gt;
&lt;li&gt;We set the call status to &amp;#8220;0&amp;#8221;, &amp;#8220;1&amp;#8221; or &amp;#8220;2&amp;#8221;. &amp;#8220;0&amp;#8221; means that the call was connected but no choice was made, &amp;#8220;1&amp;#8221; means that the appointment is confirmed and &amp;#8220;2&amp;#8221; is that it is cancelled &lt;/li&gt;
&lt;li&gt;We generate some UserEvents in order to populate the outbound (that is, coming from outbound) attribute &lt;code&gt;APPT&lt;/code&gt; with the patient&amp;#8217;s choice.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;We now have to create an end-point for our campaign that points at extension &lt;code&gt;s@drstrangelove&lt;/code&gt; so that WombatDialer knows where to connect successful calls. We will also need at least one trunk to send calls through – to get us started it is advisable to have a “dummy” trunk routing everything to a local extension.&lt;/p&gt;

&lt;p&gt;If you have not already done so, it would be advisable at this point to have a look at &lt;a href="http://blog.wombatdialer.com/post/23597570852/tut-idle" target="_blank"&gt;our previous tutorial&lt;/a&gt; to see how to create and control a simple campaign.&lt;/p&gt;

&lt;p&gt;When done, we create a new Campaign to connect all pieces together.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m4xm69br1b1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;We set the campaing to be idle on termination, so that we can add more numbers over HTTP when they become available. We also program it to be running only between 8AM and 6PM, every day of the week, so we don&amp;#8217;t call people in the middle of the night if a nightly job is used to load new appointments every day.&lt;/p&gt;

&lt;p&gt;We also set a &lt;em&gt;forced closure&lt;/em&gt; after 90 seconds so that if the call exceeds a duration of 90 seconds, it is automatically hung up to prevent using valuable resources on a call that is likely invalid.&lt;/p&gt;

&lt;p&gt;As a last measure, we set the logging format to QM_COMPATIBLE (so that we can observe activity via QueueMetrics) and enter the  HTTP notification URL of Dr. Strangelove&amp;#8217;s office management system to be notified of call events (see below for more information).&lt;/p&gt;

&lt;p&gt;We then complete the campaign by adding a trunk, our new end-point with the outbound IVR and our Appointments list.&lt;/p&gt;

&lt;p&gt;As a last step, we create a set of Reschedule Rules that implement the retry logic.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;If the call is unanswered, busy or in error, we retry every 300 seconds for up to five times. &lt;/li&gt;
&lt;li&gt;If the call times out because of a forced closure, we retry after 120 seconds. &lt;/li&gt;
&lt;li&gt;If the call completes naturally but its extended status is 0 (no choice), we retry it for up to three times after 300 seconds each. &lt;/li&gt;
&lt;li&gt;If a call completes naturally but its extended status is not 0, then it is not retried.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m4xm6hEPo81rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;Now it is time for us to start the campaign – make sure the WD is running, go to the Live page, select your campaign and run it. If all goes well, you should start receiving calls on your test extension.&lt;/p&gt;

&lt;p&gt;While the campaign is running, you can add more calls to it via HTTP by issuing:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl "http://server:8088/wombat/api/calls/index.jsp?
 op=addcall&amp;amp;campaign=AppRemiders&amp;amp;number=45678
 &amp;amp;attrs=HH:12,MM:15"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and you can even specify a minimum time for calls to be placed at, like e.g.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl "http://server:8088/wombat/api/calls/index.jsp?
 op=addcall&amp;amp;campaign=AppRemiders&amp;amp;number=45678
 &amp;amp;attrs=HH:12,MM:15
 &amp;amp;schedule=2012-06-01.10:00:00"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When the campaign terminates,  it will be in IDLE state. In order to close it, first pause  and then remove it.&lt;/p&gt;

&lt;p&gt;After a successful run, you can see its statistics, by viewing the Campaign Report screen:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m4xm6sjm0W1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;You will see that some calls appear as TERMINATED 0, some as TERMINATED 1 and some as TERMINATED 2, based on the extended call status entered through a user selection. Only calls in state TERMINATED 0 are retried.&lt;/p&gt;

&lt;p&gt;You can also see the state of attributes for each call by going to the List editor:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m4xm6zk8Ai1rniery.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;You see that calls successfully placed will have an APPT attribute that is either “APPE” or “PSYC”; also you will see a complete log of activity for each number.&lt;/p&gt;

&lt;p&gt;As a last item, you&amp;#8217;ll remember we enabled HTTP notification. This basically POSTs the result of each call to a HTTP server, where you could have a simple PHP script to parse it, like in the following example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;?
$out = "";
foreach($_POST as $name =&amp;gt; $value) {
   $out .= "$name:$value ";
}
print($out);
error_log("RQ: $out",0, "", "");
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The script above basically logs all activity on the HTTP error log. What you get is a sequence of calls like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;RQ: num:5551234 reschedule:0 I_MM:30 extstate: 
     state:RS_REJECTED I_HH:10 retry:0
RQ: num:5556785 reschedule:0 I_MM:00 extstate: 
     state:RS_REJECTED I_HH:11 retry:0
RQ: num:5552012 reschedule:0 I_MM:30 extstate: 
     state:RS_REJECTED I_HH:11 retry:0
RQ: num:5551234 reschedule:0 I_MM:30 extstate:1 
     state:TERMINATED I_HH:10 O_APPT:APPE retry:0
RQ: num:5556785 reschedule:300 I_MM:00 extstate: 
     state:RS_NOANSWER I_HH:11 retry:0
RQ: num:5552012 reschedule:0 I_MM:30 extstate:2 
     state:TERMINATED I_HH:11 O_APPT:PSYC retry:0
RQ: num:5556785 reschedule:300 I_MM:00 extstate:0 
     state:TERMINATED I_HH:11 retry:1
RQ: num:5556785 reschedule:300 I_MM:00 extstate:0 
     state:TERMINATED I_HH:11 retry:2
RQ: num:5556785 reschedule:300 I_MM:00 extstate:0 
     state:TERMINATED I_HH:11 retry:3
RQ: num:5556785 reschedule:0 I_MM:00 extstate:0 
     state:TERMINATED I_HH:11 retry:4
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You see that for each call:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;strong&gt;num&lt;/strong&gt; is set to the number dialed&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;state&lt;/strong&gt; is the call state at its completion&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;extstate&lt;/strong&gt; is the call&amp;#8217;s extended state, if present&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;retry&lt;/strong&gt; is the retry counter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;reschedule&lt;/strong&gt; is set to the time to be waited before a reschedule; if no reschedule is necessary, it will be set to zero&lt;/li&gt;
&lt;li&gt;all &lt;strong&gt;inbound attributes&lt;/strong&gt; (the ones you set with the telephone number) are passed along prepended by I_&lt;/li&gt;
&lt;li&gt;all &lt;strong&gt;outbound attributes&lt;/strong&gt; (the ones you read from the callee), if any, are passed along prepended by O_&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This way you can easily create an integration script that stores the results of the call on a database or passes them along for furter processing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further developments&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;By connecting multiple trunks and end-points residing on multiple servers you can scale this example up to hundreds of parallel lines&lt;/li&gt;
&lt;li&gt;If you have clients living in different time zones, you could have multiple campaigns active with different time windows to place calls&lt;/li&gt;
&lt;li&gt;It is often a good idea to set call attributes that are not actually used by Asterisk (e.g. a patient ID) but make life easier for third-party systems to find out what the call was about.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The Google-TTS script used is available at: &lt;a href="http://zaf.github.com/asterisk-googletts/" target="_blank"&gt;http://zaf.github.com/asterisk-googletts/&lt;/a&gt;&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/24187267017</link><guid>http://blog.wombatdialer.com/post/24187267017</guid><pubDate>Fri, 01 Jun 2012 11:23:00 +0200</pubDate><category>asterisk</category><category>strangelove</category><category>VoIP</category><category>IVR</category><category>call-center</category><category>dialer</category><category>WombatDialer</category><category>SIP</category><category>Text-to-Speech</category></item><item><title>Tutorial: A social media dialer</title><description>&lt;p&gt;As we are getting started with WombatDialer, we present an initial fictional scenario that shows a number of interesting features.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s imagine that we work for &lt;em&gt;ACME Social&lt;/em&gt;, a company that specializes in tracking the success of its clients on social networks like Facebook or Google+. So, every time someone befriends one of their clients, we want WombatDialer to call the client telling them their current number of friends. The call would say something like &lt;em&gt;&amp;#8220;Hello&amp;#160;! Customer 1234 has 127 friends. Goodbye!&amp;#8221;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This example shows a couple of features that are not trivial to implement on most dialers, notably:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The message will be customized with a number of parameters, so that each client receives a personalized version and not just a pre-recorded note&lt;/li&gt;
&lt;li&gt;The dialer starts calling on-demand when something happens and handles reschedules internally&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In order to implement this, we start by editing the Asterisk dialplan and create a couple of new contexts. The first one is called &amp;#8220;telecast&amp;#8221; and is used to generate the message being played:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[telecast]
exten =&amp;gt; 100,1,Wait(1)
exten =&amp;gt; 100,2,Answer
exten =&amp;gt; 100,n,Playback(hello-world)
exten =&amp;gt; 100,n,Playback(agent-loginok)
exten =&amp;gt; 100,n,SayDigits(${user})
exten =&amp;gt; 100,n,Playback(vm-youhave)
exten =&amp;gt; 100,n,SayDigits(${friends})
exten =&amp;gt; 100,n,Playback(vm-Friends)
exten =&amp;gt; 100,n,Playback(vm-goodbye)
exten =&amp;gt; 100,n,Hangup
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;As you can see, the context above introduces two channel variables &lt;code&gt;${user}&lt;/code&gt; and &lt;code&gt;${friends}&lt;/code&gt; that are placeholders for the user-id of our client and the number of friends they currently have.&lt;/p&gt;

&lt;p&gt;As a convenience when testing, we want all numbers dialled during the test phase to actually dial our own SIP phone; to do this we create a new context called &lt;code&gt;dialout&lt;/code&gt; that routes any number to our extension:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[dialout]
exten =&amp;gt; _X.,1,Dial(SIP/500)
exten =&amp;gt; _X.,n,Hangup
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We reload Asterisk to pick up the dial-plan changes. Then we log-in in WombatDialer and configure it, so that:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;code&gt;AS&lt;/code&gt; is our Asterisk server&lt;/li&gt;
&lt;li&gt;We create a trunk called &amp;#8220;Out&amp;#8221; on server AS that points to our telephone. We enter &lt;code&gt;Local/${num}@dialout&lt;/code&gt; as its dial string and set its capacity to 1 (so we never receive more than one call)&lt;/li&gt;
&lt;li&gt;We create an end-point called &amp;#8220;Msg&amp;#8221; on our server AS with extension &lt;code&gt;100@telecast&lt;/code&gt; and a capacity that is enough for the campaign – let&amp;#8217;s say 10 lines.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Your configuration will look like the following screenshot:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m4gp7yyoYy1rniery.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;At this point, we create a new List called &amp;#8220;Test&amp;#8221; and add only one number to it; you may enter the number as:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;0916300000,user:10,friends:100
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This uploads the number and associates the variables &amp;#8220;user&amp;#8221; with value 10 and &amp;#8220;friends&amp;#8221; with value 100.&lt;/p&gt;

&lt;p&gt;Then we create a new campaign - this is where all the pieces are tied together:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;We set its name as &amp;#8220;Runme&amp;#8221; – avoid long names or spaces if you plan to control it externally&lt;/li&gt;
&lt;li&gt;We set its priority to 10 – the priority is the order in which campaigns are queued when trying to assign free lines. A campaign with a lower number will run first, while campaigns with the same priority will have a fair share each.&lt;/li&gt;
&lt;li&gt;We set &amp;#8220;Idle on termination?&amp;#8221; to Yes – this way this campaign will not just stop when it is out of numbers but will wait for more.&lt;/li&gt;
&lt;li&gt;We set &amp;#8220;Additional logging&amp;#8221; to &amp;#8220;QM compatible&amp;#8221; so that you can use &lt;a href="http://queuemetrics.com" target="_blank"&gt;a famously reliable call-center monitoring tool&lt;/a&gt; to keep track of it.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;After saving the campaign, we select it and then add:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Trunks: Out&lt;/li&gt;
&lt;li&gt;Endpoints: Msg&lt;/li&gt;
&lt;li&gt;Lists:Test &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;As you can see, a campaign can have multiple trunks, multiple end-points and multiple call lists, and they may be shared between multiple campaigns.&lt;/p&gt;

&lt;p&gt;It would be fair to add some rescheduling rules as well – for example, if we do not get an answer within 30 seconds, we want the system to retry placing the call exactly once after two minutes.&lt;/p&gt;

&lt;p&gt;In the end, you would get a situation similar to the one here:&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m4gp745B8a1rniery.jpg" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;At this point we&amp;#8217;re ready to go:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;make sure that the WombatDialer engine is turned on (from the Home Page, click on the &amp;#8220;Play&amp;#8221; icon)&lt;/li&gt;
&lt;li&gt;go to the &amp;#8220;View Live&amp;#8221; page and select our campaign &amp;#8220;Runme&amp;#8221; under &amp;#8220;Available campaigns&amp;#8221;&lt;/li&gt;
&lt;li&gt;click on &amp;#8220;Start&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If all goes well, within a few seconds you shoul receive a call to your SIP phone telling you that user 10 has 100 friends.Hooray!&lt;/p&gt;

&lt;p&gt;After this, you should see your campaign being shown on the Live page in gold, with status IDLE; now, when our internal tracking system detects new friends for one of our valued customers, all it needs to do is to send a HTTP request to the WombatDialer, like we would manually from the command line:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;curl "http://server:8080/wombat/api/calls/index.jsp?
op=addcall&amp;amp;campaign=Runme
&amp;amp;number=0916309765&amp;amp;attrs=user:107,friends:123"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you do, in a few seconds the dialer will send this new call. You can send  all the calls it needs to place, one at a time, and it will try scheduling them as soon as possible given the current system conditions - running campaigns and available outbound lines.&lt;/p&gt;

&lt;p&gt;Now, if you want it to actually dial out and not just call our SIP phone, edit your Trunk &amp;#8220;Out&amp;#8221;: set the dial string to something like &lt;code&gt;SIP/myprovider/${num}&lt;/code&gt; and set its capacity as the total number of parallel calls you want to place. Then go to the Live page and reload the campaign.&lt;/p&gt;

&lt;p&gt;When you want to stop the campaign, you have two choices:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;You can temporarily pause it&lt;/li&gt;
&lt;li&gt;You can remove it from running campaigns when it is paused&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Of course, you can have this campaign run on multiple trunks and multiple endpoints, using  multiple separate Asterisk servers, just by creating the relevant items and telling the campaign to use them. This way, handling hundreds of channels is just as easy as testing with your SIP phone!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Further evolution:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;You could create your own audio recordings - the example here was created with sounds present in a standard Asterisk distribution, but of course you should record your own messages.&lt;/li&gt;
&lt;li&gt;You can do even better and embed a Text-to-Speech engine script, so you are not limited to inserting numbers but can play back nearly anything  &lt;/li&gt;
&lt;li&gt;You can add an IVR option to the &amp;#8220;telecast&amp;#8221; context, so that if the callee wants to talk to a live person, they are sent to a queue. By monitoring the number of lines that you are using on your trunk and the number of available agents, the WombatDialer acts as a simple progressive dialer.&lt;/li&gt;
&lt;li&gt;As all the configuration is GUI-agnostic, you can use your favourite Asterisk configuration GUI to create End-points – play messages, read IVRs, add time-dependent rules like you would for incoming calls. All you need to know is the point in the dial-plan that they start from - e.g. internal number 123 in FreePBX is always available as &lt;code&gt;123@from-internal&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;You can optionally add an &lt;em&gt;Active Period&lt;/em&gt; to the running campaign, so that calls on it are placed only – say – between 9 AM and 6 PM no matter when the messages are queued.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The &lt;a href="http://wombatdialer.com" target="_blank"&gt;WombatDialer home page&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://queuemetrics.com" target="_blank"&gt;QueueMetrics&lt;/a&gt; is a powerful call-center reporting tool that works with WombatDialer&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;A number of Asterisk Text-to-Speech solutions are available, see e.g.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Script using &lt;a href="https://github.com/Uskur/Asterisk-TTS" target="_blank"&gt;Google TTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A &lt;a href="http://www.voip-info.org/wiki/view/Text-to-Speech+(TTS)" target="_blank"&gt;list of Asterisk TTS solutions&lt;/a&gt; from voip-info.org&lt;/li&gt;
&lt;/ul&gt;</description><link>http://blog.wombatdialer.com/post/23597570852</link><guid>http://blog.wombatdialer.com/post/23597570852</guid><pubDate>Wed, 23 May 2012 08:27:00 +0200</pubDate><category>asterisk</category><category>dialer</category><category>WombatDialer</category><category>PBX</category><category>VoIP</category><category>dialplan</category></item><item><title>A first preview version of the Wombat Dialer is available for...</title><description>&lt;iframe width="400" height="300" src="http://www.youtube.com/embed/Sxc65LxcN8M?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;A first preview version of the Wombat Dialer is available for download - see &lt;a href="http://www.wombatdialer.com/installation.jsp" target="_blank"&gt;http://www.wombatdialer.com/installation.jsp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you install, you need to define a few things to have it run:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;p&gt;A &lt;strong&gt;trunk&lt;/strong&gt;, that is a set of outbound channels. This can be shared with other users on your PBX, so it basically tells Wombat to use no more than the chosen number of channels - e.g you could have an outbound trunk called &lt;strong&gt;DAHDI/g2/${num}&lt;/strong&gt; and you tell Wombat to use no more than 10 channels out of it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An &lt;strong&gt;end-point&lt;/strong&gt;, that is a point in your dial-plan that has to be called when the call connects on the trunk. You could have Asterisk play back a message, run an IVR, enter a queue - you choose. For example, if you run FreePBX and want the calls to connect to the same point you’d get by dialling 1234, you would set this as &lt;strong&gt;1234@from-internal&lt;/strong&gt;. Here you have to define again the maximum  channels to use - for a start, make it as large as the trunk.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A &lt;strong&gt;list of numbers&lt;/strong&gt; to be dialled. They can optionally have parameters that are passed to Asterisk dialplan, so to you have an automated message that plays “&lt;em&gt;Your invoice # 1234 is past due”&lt;/em&gt; , you would make your extension play &lt;em&gt;“Your invoice number”&lt;/em&gt;, then synthesize the content of variable INVOCE_NUMBER, then play &lt;em&gt;“is past due”&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Given these rules, it is possible to start experimenting with the Wombat. Good luck!&lt;/p&gt;</description><link>http://blog.wombatdialer.com/post/22707062770</link><guid>http://blog.wombatdialer.com/post/22707062770</guid><pubDate>Wed, 09 May 2012 09:59:32 +0200</pubDate><category>asterisk</category><category>dialer</category><category>voip</category></item></channel></rss>
