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>
