6   Controlling Outbound Calls

A session begins when a call is either received or placed, and then associated with an application via the BeVocal VXML Interpreter. The application can then initiate an outbound call to a third party, allowing the user to talk to the called third party:

 •  The standard VoiceXML tag <transfer> transfers the user's call to the third party, either terminating execution of the application or temporarily suspending execution of the application (except for recognition of speech that matches the transfer grammar).
 •  The BeVocal VoiceXML extension <bevocal:dial> initiates an outbound call to a third party and continues executing the application. Additional extension tags can modify the outbound call in any of the following ways:
 
 •  The outbound call can be put on hold.
 •  The application can listen to the user, waiting for a recognized utterance.
 •  The application can put the user on hold and play audio output to the called third party.

This chapter describes interactions among the user, the application, and the called third party during outbound calls:

 •  Call Status
 •  Limitations on Outbound Calls
 •  Interactions Without an Outbound Call
 •  Interactions During a Transfer
 •  Interactions During a Dialed Call
 •  Putting a Dialed Call on Hold
 •  Listening to a Dialed Call
 •  Interrupting a Dialed Call
 •  VoIP and Outbound Calls

Note: Committees are currently working to standardize call-control features for VoiceXML, and their current approach is different from the BeVocal VoiceXML implementation. Because the approval of any call-control standards will be quite some time in coming, however, BeVocal VoiceXML contains this extension to allow developers to start taking advantage of call-control features.

BeVocal will continue to monitor the development within these committees. If the call-control features become a part of VoiceXML or a separate call-control standard, BeVocal VoiceXML will implement that standard. We will then deprecate the current extension and provide developers with information on how to convert their applications to the new standard.

Call Status

An call is in progress from the time a successful connection is made, to the time the call is terminated.

A call is active from the time the call is connected until the Interpreter detects a hangup.

Limitations on Outbound Calls

Only one outbound call can be in progress at a given time:

 •  During an outbound call placed by a <transfer> tag, execution of the application is suspended. Consequently, it is not possible to try to place a second outbound call at the same time.
 •  After an outbound call is placed by a <bevocal:dial> tag execution continues; that call must be terminated before another <bevocal:dial> tag or a <transfer> tag is executed.
  Note: Putting the outbound call on hold is not sufficient; it must be terminated before another outbound call can be placed successfully.

Additional restrictions apply to outbound calls placed by a Café customer's VoiceXML application:

 •  The application may place a local or long-distance outbound call, but not an international call.
 •  The maximum duration of the outbound call is 60 seconds.
 •  Inbound calls using VoIP cannot currently make outbound calls.

These restrictions do not apply to a hosting customer's VoiceXML applications.

Interactions Without an Outbound Call

When no outbound call is in progress, the user speaks and sends DTMF signals to the application; the application listens to the user and plays audio output to the user.

Interactions During a Transfer

A <transfer> element places an outbound call to a third party. During the outbound call, the user and the called third party talk to each other; either the application is quiet or it is completely terminated.

BeVocal VoiceXML currently supports three transfer methods: bridge, blind and supervised. During a bridging transfer, execution of the application is suspended. When the outbound call terminates, execution resumes. At that time, child elements of the <transfer> element (for example, <filled>) are executed, if appropriate. Then, the interpreter proceeds as usual, looking for the next form item to execute.

The application may "participate" in the outbound call, depending on whether the <transfer> element includes child grammars.

BeVocal VoiceXML also supports blind and supervised transfers. In a blind transfer, as soon as the session starts the outbound call, the VoiceXML session ends. Regardless of the success or failure of the outbound call, control does not return to the VoiceXML application. In a supervised transfer, once the outbound call is successfully connected, the VoiceXML session ends and control cannot return to the VoiceXML application; however, if the outbound call is not successfully connected (for example, due to no answer or line busy), then control returns to the VoiceXML application.

Note: To use blind or supervised transfers, contact BeVocal Customer Support.

Without a Transfer Grammar

If the <transfer> element has no child grammar, the VoiceXML application simply waits for the outbound call to terminate. The application does not listen to the user; execution is suspended, so the application cannot play audio output to the user. Because the inbound communication channel is not used in this situation, the inbound call is inactive.

With Transfer Grammars

If the <transfer> element includes any child grammars, the application listens to the user. If a user utterance matches a child grammar, the outbound call is terminated.

Interactions During a Dialed Call

A <bevocal:dial> tag places an outbound call to a third party. After the call is placed, the user and the called third party talk to each other. Execution of the application continues as soon as the call is placed. The inbound communication channel remains open, and the application continues to listen to the user. If a user utterance matches an active grammar, the application responds to the recognized utterance as usual.

The name attribute of the <bevocal:dial> tag is required; its value is the name of a variable. If the specified name does not match an existing variable name, a new variable is created. When the call is placed successfully, the specified variable is set to a JavaScript object referring to the call. That variable can be used in the call attribute of other tags to terminate the call or to modify interactions during the call.

The outbound call continues until the called third party hangs up, the application executes a <bevocal:disconnect> tag, or the call exceeds its maximum allowed duration.

If the inbound call terminates (either because the user hangs up or because the application executes a <disconnect> tag), the outbound call is also terminated and the session ends.

The interactions during a dialed call can be modified in any of the following ways:

 •  If the destination phone number specifies an extension as post-dial digits, those digits are sent to the called third party as DTMF signals after the call is answered.
 •  If the onhold attribute of the <bevocal:dial> tag is true, the outbound call is put on hold as soon as the connection is made. In addition, an active call is put on hold when a <bevocal:hold> tag is executed. See Putting a Dialed Call on Hold.
 •  A <bevocal:listen> element allows the application to suspend execution temporarily during the outbound call. See Listening to a Dialed Call.
 •  A <bevocal:whisper> element puts the user on hold, allowing the application to play audio output to the called third party. See Interrupting a Dialed Call.

Putting a Dialed Call on Hold

A dialed outbound call can be put on hold in either of two ways:

 •  A new call is put on hold as soon as the connection is made if the onhold attribute of the <bevocal:dial> tag is true; otherwise, the call remains active.
 •  An active outbound call is put on hold if the interpreter executes a <bevocal:hold> tag.

While the outbound call is on hold, communications are like those when no outbound call is in progress. Namely, the user speaks and sends DTMF signals to the application; the application listens to the user and plays audio output to the user. For SIP calls, you can use the transferaudio attribute to play audio to the called third party. Otherwise, the called third party hears silence. Neither the user nor the application hears the third party.

Note: You cannot place a new outbound call while a prior call is on hold.

Placing a call on hold does not extend its maximum allowed duration. The maxtime attribute of <bevocal:dial> limits the total time that the call can be in progress (not the time the call can be active).

An outbound call remains on hold until the interpreter executes a <bevocal:connect> tag to reconnect it; at that time, the dialed call becomes active once again. Alternatively, a call that is on hold can be terminated without becoming active.

Listening to a Dialed Call

While a dialed call is active, a <bevocal:listen> tag can temporarily suspend execution of the application. The application may listen to the user while execution is suspended, depending on whether the <bevocal:listen> element includes child grammars.

A <bevocal:listen> element is an input item; if a user utterance matches a child grammar, its input variable is set to the recognition result.

After successful recognition, execution of the application resumes and the outbound call continues. At that time, child elements of the <bevocal:listen> element are executed, if appropriate. Then, the interpreter proceeds as usual, looking for the next form item to execute.

If you want the outbound call to end when recognition occurs, you must terminate the call explicitly in a <filled> element.

If the outbound call terminates with no recognition, an event is thrown and execution continues. In this case, the input variable is not set.

Note: An outbound call must be active when the <bevocal:listen> element is executed. If you want to prevent the <bevocal:listen> element from being selected for execution after the outbound call terminates, you can set the input variable explicitly in an event handler.

With Listen Grammars

If a <bevocal:listen> element includes any child grammars, the application listens to the user, suspending execution until recognition occurs or the outbound call terminates.

Without a Listen Grammar

If a <bevocal:listen> element has no child grammars, the VoiceXML application suspends execution until an event is thrown indicating that the outbound call has terminated.

The application does not listen to the user; execution is suspended, so the application cannot play audio output to the user. Because the inbound communication channel is not used in this situation, the inbound call is inactive.

Interrupting a Dialed Call

While a dialed call is active, a <bevocal:whisper> tag can interrupt the call. The user is put on hold and the application is connected to the called third party. The application can then play audio output to the third party.

While the call is interrupted, the third party can hear the application, but cannot hear the user. The application ignores all speech and DTMF signals, whether from the user or from the called third party. For SIP calls, you can use the transferaudio attribute to play audio to the user. Otherwise, the user hears silence.

The user is reconnected to the third party when execution of the <bevocal:whisper> element terminates--whether execution terminates successfully or because an event it thrown.

VoIP and Outbound Calls

The BeVocal Platform is capable of placing outbound calls to both PSTN and SIP destinations. However, calls to SIP destinations must originate on a VoIP gateway.

Outbound calls are not currently supported in the BeVocal Café developement environment.

For more information, see the BeVocal Voice Over IP (VoIP) Support Quick Reference.


[Show Frames]   [FIRST] [PREVIOUS] [NEXT]
BeVocal, Inc. Café Home | Developer Agreement | Privacy Policy | Site Map | Terms & Conditions
Part No. 520-0001-02 | © 1999-2007, BeVocal, Inc. All rights reserved | 1.877.33.VOCAL