Note: Dido was a good thought experiment, but it is now of mainly historical interest. It is no longer under active development. We now endorse Adhearsion as a better general-purpose open-source system for writing IVRs.
Download Dido (developer's snapshot)
Join the low-volume announce list or the developers' list.
Traditional IVRs are hard to program because they're proprietary; they don't let you use the programming languages you know, and therefore they have a high learning curve. This is likewise true of next-generation IVR platforms from Voxeo and TellMe, because VoiceXML and CCXML are "programming languages" unto themselves, and they are devilishly hard to use. Imagine an XML dialect as complex as SOAP, except that you have to write the XML by hand, or else use a clunky proprietary web GUI just to program the simplest of routines. Ugh.
There has to be a better way, and Dido is it. Dido uses a simple, easy-to-follow XML syntax to represent menu hierarchies, with embedded Perl for dynamically generated content. The syntax is reminiscent of Web templates, and the simile is appropriate: Dido is to traditional IVRs what mod_perl plus a template engine is to a static Web page.
In other words, anything you can do in Perl, you can do in Dido: write loops, use CPAN modules, call methods in your in-house modules, et cetera. Likewise, anything you can do in AGI, you can do in Dido: play audio, get Caller*ID, transfer to extensions. In fact, you can do some things more easily in Dido than in AGI, by using our higher-level API. To all this Dido adds a stupidly simple declarative syntax for writing menu hierarchies. This declarative syntax frees you from writing low-level code, and enables Dido to reorder menus on the fly.
Dido is 100% open-source (BSD-licensed). It uses Asterisk for VOIP (or POTS) transport and reading DTMF, and Festival for text-to-speech. Both Asterisk and Festival are open-source (GPL and BSD-like, respectively).