CCXML – or Call Control XML – is the W3C standard markup language for controlling how phone calls are placed, answered, transferred, conferenced, and more. This language has been designed to work with VoiceXML and be telephony platform independent. VoiceXML is a dialog oriented XML language but it can execute some call control functions like the <transfer> tag. CCXML has been defined to provide an extended call control management to VoiceXML. This approach has some limits , you need to parse two different XML pages and manage both different scripts at the same time, that is a complex situation for developers. Of course, the current CCXML 1.0 definition use a reduced number of tags, coding any call controlled application is limited by the CCXML syntax itself.
When I6NET starts implementing VXI* VoiceXML browser without CCXML, we discover quickly this situation wasn’t so bad having an Asterisk PBX as main Telephony Call Control System. Define a call control system as CCXML interpreter require a finite state machine catching events, that is really complex and not easy to code over any Asterisk or PBX with multiple applications and modules making signaling events at the same time. But most Asterisk’s developers knows well, its a key factor to use many internal or extended functions, modules and variables… for an open source software, and you must always keep configuring this platform for your own needs. Because Call Control features are executed by the Asterisk itself, it’s mandatory to use CC as close as possible to the PBX kernel.
Conclusion, VXI* is able to get/post any Asterisk’s Call Control and other variables VAR$ during a vxml call session, it manages variables like session_id, caller_id, called_id,…etc. The Asterisk PBX’s dialplan includes a powerful language where anyone can use any internal function FUN$ or application, of course VXI* can use these functions too, like this:
VoiceXML script calling the Asterisk’s SayNumber() application:
<?xml version="1.0" encoding="iso-8859-1"?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml" xml:lang="en">
<form>
<block>
<prompt>
<audio src="application:SayNumber(123)"/>
</prompt>
</block>
</form>
</vxml>
VoiceXML script using Asterisk’s variables:
<?xml version="1.0" ?>
<vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
<form id="demo-transfer">
<block>
<prompt>
Transfer test.
</prompt>
</block>
<transfer name="getvar" bridge="true" dest="tel:get(URL)" />
<block>
<prompt>
End of Transfer test <value expr="getvar$.value" />.
</prompt>
</block>
</form>
</vxml>
This way of coding is very powerful method for all Asterisk’s developers, because they don’t have to rebuild or develop specific scripts for CCXML to do something that the PBX already does. I6NET has chosen to works on a standard VoiceXML browser evolutive and well designed for Asterisk. This advanced open source PBX has much more performance or evolution capacity than most traditional IVR’s telephony interfaces; Asterisk can manage complex conferences, transcode a call, get information of call, send the call to a queue… etc
Some VXI* addons and features are:
- HTTP Outbound call AGI – VoiceXML
- Get or Set Asterisk’s call control variables
- Call any Asterisk’s call control function (or any function, dialplan enabled)