<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi FreeSWITCH Enthusiastics/Gurus<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><u>Requirement <o:p></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>1. Customers can build a custom IVR using a UI.<o:p></o:p></p><p class=MsoNormal>2. Back end code persists the IVR details in a DB.<o:p></o:p></p><p class=MsoNormal>3. A URL will be exposed and will return the a XML file in the format as follows<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><menu name="CUSTOMER_ID_ivr"<o:p></o:p></p><p class=MsoNormal> greet-long="phrase:demo_ivr_main_menu"<o:p></o:p></p><p class=MsoNormal> greet-short="phrase:demo_ivr_main_menu_short"<o:p></o:p></p><p class=MsoNormal> invalid-sound="/mnt/callControlStorage/en/invalidSelection.wav"<o:p></o:p></p><p class=MsoNormal> exit-sound="/mnt/callControlStorage/en/tollFreeForwardingDotCom.wav"<o:p></o:p></p><p class=MsoNormal> tollFreeForwardingDotCom<o:p></o:p></p><p class=MsoNormal> timeout ="10000"<o:p></o:p></p><p class=MsoNormal> inter-digit-timeout="2000"<o:p></o:p></p><p class=MsoNormal> max-failures="3"<o:p></o:p></p><p class=MsoNormal> digit-len="4"><o:p></o:p></p><p class=MsoNormal> <entry action="menu-exec-app" digits="1" param="bridge sofia/$${domain}/888@conference.freeswitch.org"/><o:p></o:p></p><p class=MsoNormal> <entry action="menu-exec-app" digits="2" param="transfer 9996 XML default"/> <!-- FS echo --><o:p></o:p></p><p class=MsoNormal> <entry action="menu-exec-app" digits="3" param="transfer 9999 XML default"/> <!-- MOH --><o:p></o:p></p><p class=MsoNormal> <entry action="menu-sub" digits="4" param="3107767546_ivr_submenu"/> <!-- demo sub menu --><o:p></o:p></p><p class=MsoNormal> <entry action="menu-exec-app" digits="5" param="transfer 1234*256 enum"/> <!-- Screaming monkeys --><o:p></o:p></p><p class=MsoNormal> <entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML default"/> <!-- dial ext & x-fer --><o:p></o:p></p><p class=MsoNormal> <entry action="menu-top" digits="9"/> <!-- Repeat this menu --><o:p></o:p></p><p class=MsoNormal></menu><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>4. Load and start executing the IVR ‘CUSTOMER_ID_ivr’ from events socket on the fly via HTTP URI.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><u>Gave it a shot with current setup<o:p></o:p></u></p><p class=MsoNormal><u><o:p><span style='text-decoration:none'> </span></o:p></u></p><p class=MsoNormal>ivr.conf.xml<o:p></o:p></p><p class=MsoNormal><u><o:p><span style='text-decoration:none'> </span></o:p></u></p><p class=MsoNormal><configuration name="ivr.conf" description="IVR menus"><o:p></o:p></p><p class=MsoNormal> <menus><o:p></o:p></p><p class=MsoNormal> <X-PRE-PROCESS cmd="include" data="/mnt/<<Folder Name for the NETWORK DIRVE mapped>>/ivr_menus/*.xml"/><o:p></o:p></p><p class=MsoNormal> </menus><o:p></o:p></p><p class=MsoNormal></configuration><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>The ivr.conf.xml is auto loaded at startup of FreeSWITCH.<o:p></o:p></p><p class=MsoNormal>To load any new IVR menus , we need to call API command reloadxml which reloads the whole XML configs in autload_configs folder.<o:p></o:p></p><p class=MsoNormal>The reloadxml might take long time based on the number of XML files present in the folder "/mnt/<<Folder Name for the NETWORK DIRVE mapped>>/ivr_menus”<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><u>Good /Hope to have for the IVR menu</u><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>1. Load /Unload IVR menus on the fly using API command(s)<o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'> freeswitch@localhost> loadivr << URL to fetch the XML describing the IVR menu(s)>><o:p></o:p></p><p class=MsoNormal style='text-indent:.5in'>freeswitch@localhost> unloadivr <<IVR menu name>><o:p></o:p></p><p class=MsoNormal> <o:p></o:p></p><p class=MsoNormal>2. From the event socket<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>SendMsg <uuid><o:p></o:p></p><p class=MsoNormal>call-command: execute<o:p></o:p></p><p class=MsoNormal>execute-app-name: ivr<o:p></o:p></p><p class=MsoNormal>execute-app-arg: <<MAIN_MENU to start execution>>SPACE <<URL to fetch the XML describing the IVR menu(s)>><o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><u>Educated/Wild Guess<o:p></o:p></u></p><p class=MsoNormal><u><o:p><span style='text-decoration:none'> </span></o:p></u></p><p class=MsoNormal>We might be able to play IVR menu on the fly by combining the mod_xml_curl and dialplan tool - ivr.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><u><o:p><span style='text-decoration:none'> </span></o:p></u></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Please let us know how can we achieve the functionality , we are more interested in the second approach(Event Socket) under <u>Good /Hope to have for the IVR menu.<o:p></o:p></u></p><p class=MsoNormal><u><o:p><span style='text-decoration:none'> </span></o:p></u></p><p class=MsoNormal>Thanks<o:p></o:p></p><p class=MsoNormal>RaviRaj.<o:p></o:p></p></div></body></html>