Voxeo Prophecy IVR Integration

Events happening in the community are now at Drupal community events on www.drupal.org.
Souvent22's picture

I just wanted to write a short wirte up of my Voxeo Prophecy IVR integration. First, a little bit about Voxeo and the need for it.

Information: http://community.voxeo.com
Prophecy: http://www.voxeo.com/prophecy/

A client had come to our company and they wanted an IVR system (Interactive Voice Response, think of that annoying 'computer' you talk to when you call a bank or business). They just wanted it to simply call their customers and remind them of an appointment. The first quote we got from a vendor was outrageous. We then looked at PhoneTree. They make a very nice system for a very nice price. However, it wasn't flexible enough for our clients needs. So, enter the Voxeo Prophecy server and Drupal. The Prophecy system is a fairly cheap IVR system. It reads CCXML, CallXML, and VXML as 'scripts' to run. Another nice point is that a 2 port system is free. Yes, you can download the system for free and install it on your local server and run it.

You will need a telephony board (e.g. Dialogic) OR a VoIP provider e.g. Vonage, BusinessVoip, in-house SIP?VoIP server/PBX (Asterisk, etc.)

So the plan was to use Drupal to setup the application and generate the XML on the fly. The IVR server gets is XML files via URL's.

I think this would be a good Drupal module for things like mailing lists. To call a list of people and remind them of something with a simple msg. The module also does email. It emails first, and one can 'confirm' via email, it will then call if one does not verify (there are variables for these. e.g. email 3 days in advance, call 2 days. if one confirms via email, then you are removed from the queue and not called).

I am happy to report that the system works great. I am hoping to release some of the module that I made to make this happen. The basics of the system are as follows:

Drupal
Drupal is used to setup most all of the variables. You first create an 'account' area. Inside of an account, you can create 1 of 3 items:

  • Schedules
    • Here you setup when you want the system to call. For example, I only want it to call M-F from 2pm - 5pm.
  • Lists
    • This is where you setup where you want to look for the list of phone numbers, names and information. You also tell it when days you want it to look for the file, and what time. When I file is grabbed, and md5 hash is created of it, and stored. That way, an alert is filed if the client accidentally uploads the same file twice. Who wants to be reminded multiple times? :). Once you enter the location, it looks for the file, and then presents the first 3 rows of the the file with text boxes next to each column. This allows you to "map" the columns and give them names. You can then use these variables in your msg.
  • Appointments/Queues
    • Queues are where the information is actually stored. This is where you set your msg.

.

Java
There is a small Java app that was made. This is called during the cron run in Drupal. It checks to see if anyting needs to be called. It then looks through the "queues", and fires off calls. This had to be made beacuse we have a multi-port system (makes 8 calls at a time), and PHP does not do threading. The server also listens on a certain port, and Drupal can send commands to the server while its running. For example, I can tell the server to shut down, or I can tell it to use only 5 ports. I click a button, and drupal sends a command through the socket on the correct port to the java program.

It has been running for about a week with no problems. There are some other features, and I shall try and lists those later. The main issue is the downloading of the files. With growth, this could very well take an hour or so, so I don't know how well Drupal will do when you have a cron.php running for an hour, and then the usual drupal running on top. I believe this is more a hardware issue.

P.S. I have set it up that a variable is set when the ivr cron is run, that way if cron.php is called again before it finishes, the other crons will be run, and my hook_cron function in my module just does a simple return and doesn't run if the variable is set from a previous run.

Comments

Super write up, on this

prasannah.ganeshan's picture

Super write up, on this issue. I currently have a similar requirement at the moment with one of my on going projects. But my requirement is at the moment for a mobile solutions with voice commands sort of.

Do you think it is possible for me to tackle my problem with this approach?

regards,
Prasannah

Enterprise

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: