Home

Resources

Products

Developers

Main • WritingIVR

Writing an IVR

In 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:

  • install handlers for messages it wants to process
  • read the standard input and parse incoming messages
  • identify the messages it needs and process them
  • acknowledge all incoming messages
  • maintain the call state
  • keep the event loop running (reading and acknowledging messages - VERY IMPORTANT)

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:
Yate 3.0.0 alpha 3 released. Featuring the new Jabber server and wideband audio.
Download NOW

8 March 2010:
Yate 2.2 released. Mostly bug fixes. Dahdi compatible. Latest 2 release before 3.0.

6-7 February 2010:
Yate booth at FOSDEM 2010. Free CD with Freesentral available.

2 Nov 2009:
Yate 2.1 launched. Can replace a Cisco PGW2200 to control a Cisco AS54xx.

6 Aug 2008:
Yate and OpenSIPS (former OpenSER) join to build IP based clusters.

4 Aug 2008:
Yate 2 launched.

10 Jul 2008:
Yate presentation in Germany.

Feb 2008:
Yate 2.0.0 alpha 2 released. New routing module allows sending ENUM routed or forked calls to numbers of registered phones. More...

21 Jan 2008:
Yate 2 alpha released. Major changes, new ISDN, SS7 and MGCP stack. Added analogic and RBS support.

3 September:
Yate 1.3 released. Minor fixes and improvments mainly in client and SIP.

14 August:
Yate based ISDN passive recording system released by Trisys.

16 April:
Yate 1.2 released. Added Jingle and XML support, PBX improved.

25 September:
YateAdmin 1 released.

25 September:
Yate 1.1 released. Fallback routing from a database, fax support in Linux and bug fixes. Changelog and Download availables.

11 July 2006:
O'Reilly published an article about prototyping telephony applications with Yate and Python.

10 July 2006:
Yate 1 released. Includes YIAX, YSIP, YRTP and many new features.

June 1st 2006:
New Yate website launched


EditHistoryBacklinksRecent ChangesSearch