|
Home Resources Products
Developers |
Main • WritingIVR
Writing an IVRIn Yate an IVR is an application started when an incoming call is routed to that application. This application gets the opportunity of inspecting events generated by the caller and giving commands to Yate - all these by handling or generating messages. From Yate's point of view the IVR (the application behind it) is just a channel. An IVR application must at least:
Since all these are complex it is better to use libraries that can handle at least part of the job. Usually an IVR is implemented using a script run under the control of the the external module and a library that converts incoming and outgoing messages in objects the programming language can handle. Currently the options are PHP (via libyate.php) or Python (via libyate.py or YAYPM) The application should install handlers for messages like "chan.dtmf" and "chan.notify" and act as a state machine, processing incoming events, changing the state and attaching voice sources and/or consumers via the "chan.attach" message. The caller can be transferred to another channel (which can be another IVR) by masquerading a "call.execute" message. The current application is terminated as soon as the target channel is connected. (disconnected ???) An application can also disconnect the caller by simply exiting. Note that the current application is also terminated if the user hangs up. The script gets a chance of cleaning up just after its stdin/stdout get closed. In case of libyate.php this is converted to an "EOF" event. Nothing prevents an IVR from implementing other functionality. A route to a given called number can be obtained by emitting a "call.route" message and looking at the answer. An IVR can even act as a short lived routing module, for example to implement a meeting room. |
3 May 2010: 8 March 2010: 6-7 February 2010: 2 Nov 2009: 6 Aug 2008: 4 Aug 2008: 10 Jul 2008: Feb 2008: 21 Jan 2008: 3 September: 14 August: 16 April: 25 September: 25 September: 11 July 2006: 10 July 2006: June 1st 2006: |