This IVR demo dial plan demonstrates how you can make a simple and functional speech enabled IVR for your company.
You will need the LumenVox Speech Engine for Asterisk installed in order to run this voice application.

IVR speech application is developed using Visual Dialplan for Asterisk and pre-configured to be used with Elastix PBX.
The output of the Visual Dialplan is standard Asterisk extensions.conf code and grammar files, automatically deployed and loaded to the Asterisk server. However, you will need to manually place the sound files used in this demo in the /var/lib/asterisk/sounds/ folder.

The first step is to have installed and running three pieces of software:

1. Elastix PBX

Download the Elastix PBX ISO package and follow on screen instructions to install it.
We recommend installation on virtual machine rather than dedicating complete PC for this test.
Besides Asterisk GUI, the ISO will install Linux OS, MySQL database, Asterisk core PBX etc.

2. Visual Dialplan

Visual Dialplan is intuitive and easy to use tool for the dial plan development.

Download Visual Dialplan here: Visual Dialplan download

3. LumenVox automated speech recognizer

The LumenVox automated speech recognizer is a software solution that converts spoken audio into text, providing users with a more efficient means of input. A Speech recognizer compares spoken input to a list of phrases to be recognized, called a grammar. The grammar is used to constrain the search, enabling the recognizer to return the text that represents the best match. This text is then used to drive the next steps of your speech-enabled application.
More details about this software and download options can be found at LumenVox web site.


Contexts description

vdp-inbound/vdp-outbound context
The entry point for this dial plan is the vdp-inbound context.
This context (vdp-inbound) is the default entry point for all incoming calls for Free PBX, so we decided to use the default context to start our IVR dial plan.
The only purpose of this context is to accept calls coming to DID (extension) 6789 and to forward those calls to the IVR-mainmenu context.
In case you want to handle outgoing calls with the same IVR dial plan, like we decided to do in this demo, you should use vdp-outbound context with the same dial plan logic like vdp-inbound context.
In other words, if you dial 6789 from your phone registered at Free PBX or you dial your Free PBX number and DID 6789, your call will go to IVR-mainmenu context.


IVR-mainmenu context
In this context the caller hears the main IVR menu and needs to choose one of the following options:
0) Company representative,
1) Company latest news ,
2) Customer support,
3) Sales department

or to enter three digits number to dial the company extension (_XXX dial plan pattern).

The choice can be done by typing the number on the phone keypad or by simply saying the option.

If caller picks option 0 (say ‘Company representative’ or type in 0), dial-plan passes the call directly to the company representative.
If caller choose option 1 (say ‘Company latest news’), dial-plan plays the latest company news.
If caller picks option 2 (say ‘Customer support’), dial-plan passes the call to the CustomerSupport context.
If caller choose option 3 (say ‘Sales department’), dial-plan passes the call to the SalesDepartment context.

In case the caller entered three digits number, or said three digits, the dial plan will dial the three digits company extension and the phone on that extension will ring. If nobody answers or the line is busy, the voice mail application will be called and the caller will leave the voicemail.

In case of choosing invalid option, for example if caller enters 4, the dial plan will go back to the beginning of this context and the caller will be presented with IVR options again.

CustomerSupport context
In this context the caller hears the support IVR menu and needs to choose one of the following IVR options:
1) Standard product user (goes to standard product users queue),
2) Professional product user (goes to professional product users queue)
3) Go back to the main IVR menu (IVR-mainmenu context)

In this case, exceptions such as timeout and invalid extension are also handled.


SalesDepartment context
In this context the caller is presented with the sales IVR menu and needs to choose one of the following options:
1) Individual licensing (goes to sales queue for individual users),
2) Enterprise licensing (goes to sales queue for enterprise users)
3) Go back to the main IVR menu (IVR-mainmenu context)


ASR grammars

#ABNF 1.0;
language en-US;
mode voice;
tag-format <semantics/1.0.2006>;
root $mainmenu;

$news = (News) {out=”1″};
$support =(Customer [Support]) {out=”2″};
$sales =(Sales [Department]) {out=”3″};
$agent = (Operator [Company] [Representative]) {out=”0″};

$mainmenu = ($news | $support | $sales | $agent ) {out = rules.latest()};

#ABNF 1.0;
language en-US;
mode voice;
tag-format <semantics/1.0.2006>;
root $support;

$standard= (Standard [product]) {out=”1″};
$proffessional = (Professional [Product]) {out=”2″};
$mainmenu = (Main menu [back]) {out=”3″};

$support = ($standard | $proffessional | $mainmenu ) {out = rules.latest()};

#ABNF 1.0 UTF-8;

language en-US;

mode voice;

tag-format <lumenvox/1.0>;

root $Digits;

$Digit = (ONE:”1″        |
TWO:”2″        |
THREE:”3″      |
FOUR:”4″       |
FIVE:”5″       |
SIX:”6″        |
SEVEN:”7″      |
EIGHT:”8″      |
NINE:”9″       |
(ZERO | O | OH):”0″ );

$Digits = {$=”} ($Digit {$+=$$})<3>; //Limit return string to exactly 3 digits