DEV Outbound Programming Notes

Programming Notes

Application Dynamics and Personalization

The start_url is called by the Plum Outbound system with parameters which allow dynamic personalization of the application script. The phone number dialed and the Plum platform assigned call ID are returned to the client application server start_url as HTTP POST variables.


The Plum Outbound system and VoiceXML scripting enables the creation of personalized call scripts based on the identity of the callee. To that end, several identifiers are accepted by the Plum Outbound system which are passed back to the client application server once the call is connected at HTTP GET variables:




Phone Number


For many applications, the phone number will be enough to uniquely identify the call. Based on the phone number, the client application server can retrieve information such as the callee's name.

Message Reference


Where the phone number does not uniquely identify the call, the client application can send a message reference along with the queuecall.php/queuecalls.php request.

Call ID


Each call is also assigned a unique identifier at queue time by the Plum Outbound System. This call ID is returned by the queuecall(s).php request. This identifier is unique to the Plum Outbound System Server. (However, if the client application is being served by multiple Plum Outbound servers, then this call_id may not be unique. The client application should assign and refer to the message_reference instead.)

Message Parameters

campaign_parameters call_parameters

Use the message parameters to pass call personalization information directly to the call script. For example, for an appointment reminder application, the message parameters could be used for the callee name and the appointment date and time. The VoiceXML script could then be constructed with a personalized greeting and reminder without looking up the callee's record in a database at call time.

Callee Type Detection

The Plum Outbound system provides asynchronous callee type detection that allows the call to begin immediately while the system listens in on the first 4 seconds of the call to determine what is on the other end of the line.

You can access the current callee type through the global variable session.connection.callee_type. The value of this variable will change over time, we recommend playing an initial prompt to the callee and then performing any branching logic against this variable.

The possible values for session.connection.callee_type are “processing”, “voice”, “answeringmachine”, “fax” and “unknown”.

Below is sample code that demonstrates detecting and acting on the callee type:

<?xml version="1.0"?>
<vxml version="2.1">
<property name="inputmodes" value="dtmf"/>
<form id="callee_type_detection">
<record name="input" finalsilence="1s" maxtime="30s">
<property name="interdigittimeout" value="10ms"/>
<prompt>Hello! This is a call from Company X Y Z. Please press any key to accept this call.</prompt>
<if cond="input$.termchar == null">
<throw event="noinput"/>
<goto next="#voice"/>
<if cond="session.connection.callee_type == 'answeringmachine'">
<goto next="#answeringmachine"/>
<elseif cond="session.connection.callee_type == 'fax'"/>
<goto next="#fax"/>
<goto next="#voice"/>
<form id="answeringmachine">
<block>Sorry we missed you, please call us back at: 555-555-1234</block>
<form id="fax">
<form id="voice">
<block>Hello human, welcome to the IVR call flow.</block>