Example
Calling Card Application: Caller calls an 800 number and after some interaction with an IVR system places and outbound call to a friend.
<ccxml xmlns="http://www.w3.org/2002/09/ccxml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2002/09/ccxml http://www.w3.org/TR/ccxml/ccxml.xsd" version="1.0"> <!-- Create our ccxml level vars --> <var name="in_callid" expr="''" /> <var name="out_callid" expr="''" /> <!-- Set our initial state --> <assign name="currentstate" expr="'initial'" /> <eventhandler statevariable="currentstate"> <!-- Deal with the incoming call --> <transition state="initial" event="connection.ALERTING" name="evt"> <assign name="in_callid" expr="evt.callid" /> <accept callid="in_callid" /> </transition> <transition state="initial" event="connection.CONNECTED" name="evt"> <assign name="currentstate" expr="'in_vxml_session'" /> <!-- VoiceXML dialog is started on a separate thread - see pin.vxml --> <dialogstart callid="in_callid" src="'pin.vxml'" /> </transition> <!-- happens when pin.vxml VoiceXML dialog thread exits --> <transition state="in_vxml_session" event="dialog.exit" name="evt"> <createcall dest="evt.values.telnum" name="out_callid" /> <assign name="currentstate" expr="'calling'" /> </transition> <transition state="calling" event="connection.FAILED" name="evt"> <!-- tell the caller there was a error --> <dialogstart callid="in_callid" src="'error.vxml'" /> <assign name="currentstate" expr="'oub_failed'" /> </transition> <!-- happens when called party picks up the phone --> <transition state="calling" event="connection.CONNECTED" name="evt"> <assign name="out_callid" expr="evt.callid" /> <!-- tell the callee he is receiving a call --> <dialogstart callid="out_callid" src="'callee.vxml'" /> <assign name="currentstate" expr="'outb_ready_to_join'" /> </transition> <transition state="oub_failed" event="dialog.exit" name="evt"> <exit /> </transition> <!-- happens when callee's vxml dialog (callee.vxml exits) --> <transition state="outb_ready_to_join" event="dialog.exit" name="evt"> <join id1="in_callid" id2="out_callid" /> <assign name="currentstate" expr="'wtg_for_joined'" /> </transition> <transition state="wtg_for_joined" event="ccxml.joined" name="evt"> <assign name="currentstate" expr="'active'" /> </transition> <!-- Lets clean up the call --> <transition state="active" event="connection.DISCONNECT" name="evt"> <if cond="evt.callid == in_callid"> <disconnect callid="out_callid"/> <exit /> </if> <assign name="currentstate" expr="'in_vxml_session'" /> <!-- start VoiceXML dialog again to see if caller wants to make another call --> <dialogstart callid="in_callid" src="'pin.vxml'" /> </transition> <!-- Catch disconnects in unexpected states --> <transition event="connection.DISCONNECT"> <exit /> </transition> </eventhandler> </ccxml>