1. Hey! there’s a Wombat in my Docker!

    It is Summer. So when Erwin started talking about ships and sailing, we considered it quite normal. But what is Erwin doing on an (apparently pirate) container ship?

    Yes - WombatDialer is now available as a working Docker image.

    Why is this cool?

    Docker containers are a new standard for infrastructure management. Docker containers let you install and upgrade software without worrying about dependencies and software versions - each of them behaves as-if it was a separate virtual machine, but it is lightweight as the actual running processes and has very low latency.

    This plays very well with WombatDialer, that is an extremely flexible and scalable outbound dialer for the Asterisk PBX. It follows our philosophy that you should tell the system what you want done, not how, and that WombatDialer will take care of all the low-level details (errors, reschedules, call handling, server clustering, logging) while you focus on the high-value-added business application - be it call reminders, queue recalls, telephony surveys… you name it.

    What this means for WombatDialer

    You can run the Dockerized version of WombatDialer in a single command on any Linux OS that supports Docker. So to test-drive WombatDialer on a new system running Docker v1.0+, you just enter:

     docker run -p 8080:8080 -P -d loway/wombatdialer

    This downloads an image containing Wombat and its database, and starts it by binding it to port 8080 of the local server. So you can connect it as http://[serverip]:8080/wombat and it will run immediately. Docker runs on Centos 6.5 systems, CentOS 7 and Debian systems. Just make sure that you are running version 1 or newer. Want to test-drive it fully? get a free WombatDialer demo key and start serious dialing immediately.

    To make sure it’s running and know its id, enter:

     docker ps

    And to stop it:

    docker stop {id}

    Each container is run as a separate instance - so you could have multiple distinct WombatDialers on the same box, just by binding them to a separate public port. Want to run a quick test? just start a new instance, do your testing and throw it away. Each instance starts as a clean-slate, with a clean database and configuration ready to be customized.

    That’s nice but… how do I keep the data between different runs?

    WombatDialer uses a pattern called “data-only containers”. This means that you can have special containers that only contain the data (databases and custom configuration) where everything else is in a code image. You do this by creating a data-only container, giving it a name (in our case it’s MYWBT) and mounting it to your WombatDialer instance.

    docker run --name=MYWBT loway/data true
    docker run --volumes-from MYWBT -p 8080:8080 -P -d loway/wombatdialer

    So if you run a WombatDialer instance without a special data container, everything will be put in the code image. If you do, all data that is supposed to be present on an update will be stored in the data-only container.

    You want to upgrade WombatDialer because a new version is out? stop your existing Wombat instances, and run them again on the same data containers. Docker will download the latest version and when you connect to it, the database will be automatically updated. Want to make backups? connect to the data-only container using a tool like nsenter and run a backup job.

    What is coming next?

    We expect Docker to play a significant role in infrastructure management. We believe that it makes it so simple to run WombatDialer instances that end up being just “fire and forget”. Plus, having higher performance, lower memory consumption and lower latency compared to a separate VM, it plays especially well for telephony applications.

    To know more

  2. Introducing QueueWiz

    For the Astricon 2013, we created a little tool that lets you easily model Asterisk-based call centres.

    QueueWiz is the first free web app for interactive, quick and accurate call center sizing, cost and revenue simulation. Insert your data with the intuitive interface, measure traffic intensity, expected wait times, agents’ engagement, revenue per call and per agent and even hourly margins. Save your simulation and share it via email or social media.

    Completely free of charge at http://queuewiz.queuemetrics.com.

  3. WombatDialer 0.7.3: Black lists, CSV uploads and more

    After a few months of work, we are proud to release WombatDialer 0.7.3. This is a major release that adds a number of features that have been on the wish list for quite a bit of time.


    • Black lists. It is now possible to filter call lists dynamically when dialing out using one or more Black Lists. Black Lists are lists like any other in WombatDialer that can be used to collect numbers that are not to be called anymore. They can be updated through the HTTP API, so you can control this feature externally and while a campaign is running.
    • CSV import / export of lists. You can now prepare lists of numbers to be dialed (with all their attributes) using your favourite spreadsheet and upload them to the dialer through and easy-to-use drag and drop interface. You can also export lists of numbers with attributes as CSV files.
    • Separate Agent CLID. A number of times, you want your agents to receive a call which caller-id contains information on the call being made (e.g. the name of the person called, or their CRM id - you choose). You can now have separate caller-ids for the external versus the internal side of a call.
    • Attributes substitution. You can now use call attributes in caller-id’s, caller presentation and logging code.
    • Sortable campaign runs. In the Live page, you can now decide the sort order of campaigns and runs
    • Number generator. The number generator can now create correctly set of numbers to be dialed whatever their prefixes
    • Better security. On all user-created records, you can now see who created them and who modified them last
    • Live dialer status. The dialer box on the main page can be set to refresh automatically

    Plus a large number of fixes, usability tweaks and minor redesigns meant to make the experience smoother and better.

    You can try the latest version with the free license included or you can upgrade an existing systems through the yum installer. Get started from our Dialer Installation page. We are sure you will like the new release.

    PS. We’ll be exhibiting WombatDialer and QueueMetrics at the Astricon in Atlanta, booth 33 - come and say hi.

  4. Tutorial: WombatDialer and PIAF

    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

    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).

    If you want to install it on the PIAF system, here is what you would do:

    • Add the Loway repos

      wget -P /etc/yum.repos.d http://yum.loway.ch/loway.repo

    • Install WombatDialer automatically using yum

      yum install wombat

    • For the moment, stop iptables, or you won’t be able to connect remotely

      /etc/init.d/iptables stop

    Of course you would not want to run a production system with iptables off, so just add a rule allowing access to port 8080 from your workstations.

    • Finish the installation using your browser

    Now open your browser and go to:


    It will get you to a page that will prompt for database creation. This will create a db called “wombat” and will fill it in with initial data.

    When asked, remember that the default MySQL root password for PIAF is “passw0rd”.

    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).

    Then, you will be shown the license agreement. Approve it (but read it first!)

    Now you can log in as “demoadmin” password “demo”.

    As a first thing, you’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 “admin” password “amp111”. If you installed WD on a different system, you need to create a AMI user that will allow remote connection - edit /etc/asterisk/manager_custom.conf to add it. At this point you should really have a look at the Getting Started Guide.

    Now that WombatDialer is installed, you should look around on this blog to see many different things you can do with it. If you’d like to try automated queue call-backs, see http://blog.wombatdialer.com/post/41774590472/autorecall - the source script can be found at https://github.com/Loway/WombatDialerExamples.

    Happy hacking!

  5. WombatDialer 0.6.7 released

    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 (“ghost calls”). This version introduces a sanity check at the beginning of each run so that the database is purged of possible unwanted entries.

    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.

    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.

    As a last note, we are trying a new form of collaborative support system - you will find it at http://wombatdialer.userecho.com. 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.

  6. WombatDialer 0.6.5 released

    Today we released version 0.6.5 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.

    Together with version 0.6.5, we release a new version of the User Manual 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.

    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.

  7. 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.

    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).

  8. WombatDialer 0.6.4 released

    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 ask for a demo license 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.

    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’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’s appointment reminders, for example. And pricing for license packs is really affordable.

    Licenses can be installed from the License page, after you log in, and are displayed on the dialer status.

    We look forward to your comments - WombatDialer is now a small community and it’s starting to be used worldwide.

  9. Over 200 downloads of WombatDialer 0.6

    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!

    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.

  10. Elastix queue call-backs with WombatDialer

    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’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.

    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:

    • your customer are happy; they don’t have to wait in queue for so long
    • 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

    This scenario requires some additional “glue” to what is basically supported by Asterisk - exiting a queue and reading a number are easy, but then starts the pain. You’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’ll have to have a GUI of some kind for the manager to start and stop dialing. You’ll have to adapt to the number of available agents. You’ll have to report on this activities. You’ll have to avoid flooding the trunks of your PBX with too many calls. In short, it’s the kind of thing that gets more complex the more you think about it. That’s what WombatDialer is for.

    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.

    The client uses Elastix as PBX system, so we’ll have to integrate it with WombatDialer. No problem!

    So what we do is:

    • First we create a normal queue, for inbound. We call it “400”.
    • Then we create a call-back queue. If our main queue is called “400”, then let’s call this second queue “401”. 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 “Ring Strategy: rrmemory”, “Event When Called: Yes”, “Member Status: Yes”, “Autofill: yes” so that WD can use it effectively.
    • we create a piece of dialplan that will handle the exits from queue “400” and will gather the telephone number
    • we create a new “custom extension” (399) that will jump in the dialplan at “Local/1@queue-leavenumber”
    • In Elastix, we create an IVR menu and set it as a destination for queue “400”. This menu has only one option (1) that basically jumps to the custom extension “399” that we just created, in order to call our script
    • we go back to the queue “400” and set its “Fail Over Destination” as our IVR we just created

    We start by editing the extensions_custom.conf file in our system, adding a new stanza like:

    exten => 1,1,NoOp
    exten => 1,n(Start),agi(googletts.agi,"Please enter your telephone number and we will call you back.",en)
    exten => 1,n,agi(googletts.agi,"The number must be composed of 7 digits.",en)
    exten => 1,n,Read(CBNUM,beep,7,,2,5)
    exten => 1,n,NoOp( Num ${CBNUM} )
    exten => 1,n,GotoIf($["${LEN(${CBNUM})}"="7"]?lenOk)
    exten => 1,n,agi(googletts.agi,"The number you entered has the wrong number of digits.",en)
    exten => 1,n,GoTo(1)
    exten => 1,n(lenOk),agi(googletts.agi,"You entered the following number",en)
    exten => 1,n,SayDigits(${CBNUM})
    exten => 1,n,Wait(1)
    exten => 1,n,agi(googletts.agi,"Press 1 to confirm or any other digit to start again.",en)
    exten => 1,n,Read(CONF,beep,1,,2,5)
    exten => 1,n,GotoIf($["${CONF}"="1"]?Store:Start)
    exten => 1,n(Store),NoOp
    exten => 1,n,Set(WHEN=${STRFTIME(${EPOCH},,%y%m%d-%H%M%S )}
    exten => 1,n,Set(PARM=number=${CBNUM}&attrs=orgQ:400%2Cwhen:${WHEN})
    exten => 1,n,Set(foo=${CURL( op=addcall&campaign=callback&${PARM})})
    exten => 1,n,agi(googletts.agi,"Thank you! we will call you back as soon as possible.",en)
    exten => 1,n,Hangup

    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 “callback”. 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 ‘%2C’ instead of the comma ‘,’).

    In order to configure WombatDialer:

    • We create a trunk called “Trunk” 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.
    • We create an End-Point of type Queue for monitoring queue 401; set extension to “401” and context to “from-internal”; 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.
    • We create a campaign called “callback”; 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.
    • We start the new campaign; having no numbers, it should immediately turn yellow on the Live page to tell you it’s idling.

    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 “callback/AUTO” and that will contain the numbers and attributes like:

     Number:     5551235
     Attributes: orgQ:400   when:121115-153402

    Those numbers are NOT immediately called, but WD will wait for some agent to be present and active on queue “401” 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.

    Further improvements

    • 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
    • You could add time limits to the WD campaign so that you are sure that no calls are made otside acceptable periods

    See also