The Corner

Technical Guide

prepared by: Joseph Sheedy, Velotron Heavy Industries
last update: 2009-09-10, jls

This is a technical description of the solution provided to meet the requirements of The Corner project. The requirements necessitated an Interactive Voice Response (IVR) phone system which could be reached via a local or toll free number. This system plays back prerecorded messages and questions, and accepts user responses via touch tone (DTMF) signals. At specified points in the call tree, a user can leave voice messages of up to 2 minutes. These messages are then available to be played back over the phone system to future callers, and are also available on the web at

The IVR system was implemented using PrettyMay Call Center (PMCC), a software application which provides traditional PBX services, using Skype as the carrier. PMCC is running at The Planet on a dedicated server running Windows Server 2003. All configuration was done over a Remote Desktop connection. PMCC's Inbound CallFlow was configured with the design included in this documentation, examples/the_corner_pmcc_call_flow_20090812.xml. A Skype account was set up with a paid SkypeIn local phone number. kall8 was used to provide a toll free number. Calls to the toll free number get routed to kall8, to skype, to a skype instance running on the hosted server, which is controlled by PMCC.

Skype requires access to an audio device, even though no audio signals are being routed in or out of the server in this configuration. To get around this, Virtual Audio Cable (VAC) is installed, which provides virtual audio devices which Skype can be configured to access. VAC version 4 was difficult to configure properly, so version 3 was installed with good results.

User messages were stored in the location configured in the inbound call flow. The website is hosted on the same server as the rest of the application. The Apache HTTP server is running, and was configured to serve the mp3 directory via an Alias rule in httpd.conf. The web site was built using static html with some inline PHP code. It presented the user messages by scanning the directory for the appropriate messages for the page, and presenting them appropriately. Some example code is included here in examples/php_example.php.

A few support tasks ran in the background at frequent intervals via Windows Scheduled tasks. They are described below.

The voice prompts presented by PMCC were made dynamic by swapping out the configured MP3 files with new ones by background tasks. A random audio file was selected for each of 6 user options and copied to the location configured in PMCC by this Ruby script. The script creates new voice prompts using a randomly selected user message with voice prompts concatenated at the end. The software mp3wrap was used to do the concatenation. In early iterations, we used a combination of VBR mp3 files and static bit rate mp3 files, which mp3wrap happily wrapped together. However, this caused PMCC to crash, so we switched to a standard constant bit rate.
This script concatenates all user messages left in response to a certain question into one big mp3 file for playback over the IVR system.
All voicemails left to PMCC by users contained the caller's phone number in the filename. This script removes the phone number for privacy reasons. A feature request was left with the authors of PMCC to allow configurable naming of the voicemails.