FreePBX 2.10 sneak peak: IVR's

As in any pbx, IVR’s have always been an integral component of FreePBX. For the better and for the extremely annoying, companies have been filtering inbound calls with IVR’s for just about forever. While we can’t change people’s mentality (on both sides of the call) we CAN attempt to provide the best posible experience for those fortunate enough to be using FreePBX.

In FreePBX 2.10, we have rebuilt and rewritten almost every single line of code in IVR’s. In addition, there are many framework changes in place to provide a more comfortable experience over all. Here are some quick stats from the svn log so far:

[root@server admin]# svn diff -r12198:head|diffstat
assets/js/jquery.hotkeys.js | 99 +
assets/js/script.legacy.js | 20
bootstrap.php | 45
common/mainstyle.css | 5
functions.inc.php | 140 ±
helpers/Email.php | 2062 ++++++++++++++++++++++++++++++
helpers/form_helper.php | 1056 +++++++++++++++
helpers/freepbx_helpers.php | 7
i18n/amp.pot | 68
libraries/ampuser.class.php | 78 -
libraries/bootstrap-utility.functions.php | 76 -
libraries/components.class.php | 62
libraries/featurecodes.class.php | 84 -
libraries/featurecodes.functions.php | 84 +
libraries/legacy.functions.php | 60
libraries/utility.functions.php | 162 ++
libraries/view.functions.php | 1
17 files changed, 3793 insertions(+), 316 deletions(-)

While those aren’t all IVR related, all these changes are designed to provide you with better FreePBX experience. Pretty nice! Thats for the stats, now for the IVR changes. The first thing you will notice is a cleaner welcome screen. We’ve removed the clutter when you first hit the IVR page, most people didn’t read it or know what to do with out it, anyway:

Just one simple button and your in! On the IVR edit page, there have always been some quirks that bothered me. Here is the old page:

[center][/center]

Why did every IVR start off with the name “Unnamed”. I mean, isnt that like an an oxymoron?! What is the i-dest/t-dest thingy? When are the “Messages” played? And did you ever try to add entires to an IVR and see the WHOLE PAGE REFRESH?! And wait until you see the code that generated all this…

[center][/center]

Here are the changes we’ve made:
[list]
[]We’ve streamlined the user experience to be more inline with other FreePBX modules (take Directory for example, notice it has a similar “feel”).
[
]Unlike in the old module your IVR doesn’t get saved even before you make you create it (hence IVR’s were always named). This also allows the gui to load faster.
[]We’ve added a description fields, where you can save an explanation and/or notes about this IVR.
[
]We’ve added finer control over invalid and timeout destinations. Now you can set a recording to be played when the i or t extensions are hit (i.e. when the user presses something invalid or if the the user enters nothing) before the IVR loops back to the beginning, in addition to the recording to be played right before transferring the call to the actual destination. Or you can disable the i or t destinations completely.
[]You can add entires with a simple click - no page refresh! Add as many as you need, and delete them intuitively.
[
]We’ve moved part of the Direct Dial setting out of the IVR module and in to the Directory module (where it belongs)
[]We now hook in to Queues and delete the IVR Break Out Menu if you delete the IVR
[
]When looking at the IVR page, you can collapse any individual section to allow you to focus on another with less clutter in the way
[]We’ve included new sound files that more accurately reflect the message you want to present to your users. Obviously, you can override them with your own should you chose to do so.
[
]We have plenty of under the hood changes, not the least of which include using the fancy new HTML5 Webforms validation instead of the old clunky javascript errors

[]An extremely clean code base using a (poor-mans version of) MVC design to make bugfixes and future additions as paneless as posible.
[
]A leaner dialplan for quicker call execution when posible.
[*]HOOKS!!! There are already some interesting 3rd party modules in the works that can easily hook in to IVR to bring some very nice and demanded additions. You can create your own modules as well and have them hook in to IVR to extend the module.
[/list]

So, where is the new module? Its in the 2.10 branch, currently in development. While we don’t recommend it yet for production, feel free to download it to a test/development server and take it for a spin. Otherwise, just keep tight and wait for the official release of 2.10 - the new module will be included by default and your old IVRs will all be migrated over automatically.

On a final note, I wanted to point out this work was generously sponsored by my wonderful company and driving force behind FreePBX: Schmooze Com. Inc.. From a turnkey premise PBX to a carrier-grade white label hosted solution, Schmooze is the leading innovator in the market. Visit or call today. Thank you!

Is there a way to display the internal IVR name “ivr-2, ivr-16, etc.” in the GUI such that it’s easier to identify *_additional.conf and logging to specific IVRs?

yup - its in the url. Can you spot it?

Also, if you DONT name your ivr, by default its name will be IVR: <ID>

Great work moshe, I’m sure that many people will benefit from it tremendously, as they will from the great work you are also doing to rewrite the Backup Module as we speak!

On a 2.10 but separate note, I’ll have an update soon on the work going on with call recordings and 2.10 to vastly improve that part of the system also!

I’ve searched and searched the site, but I can’t find where to download the 2.10 IVR module.

Any help would be appreciated.

I would love to see a disconnect between the announcement and the IVR options, similar to the disconnect between the time groups and time conditions. I’ve come across a couple implementations where either several announcements are strung together or simply different announcements are played for different DID’s or time groups and having to regenerate all the options for each announcement is a bit tedious.

Due to the way IVR’s work - in that they listen to DTMF while the recording is being played - it would not be posible to use the announcement module for IVR’s. On the other hand, you can chain together recordings from the recordings module.

I hadn’t thought of chaining multiple recordings together through the system recordings module, that might help with part of the problem. I just envisioned having a way of creating a group of options for an IVR and saving it as it’s own entity, then applying that to several IVR’s with their own individual recordings. That way I don’t have to keep regenerating the same IVR options for the different recordings we have.