IVR
HBSpy: 这里我们综合了IVR, mod_dptools: IVR Menu
About
互动式语音应答(IVR)是一种自动化的电话系统,可以与来话交互以收集信息或按策略路由。
Language
FreeSWITCH IVRs可以用FreeSWITCH支持的任何语言编写,包括JavaScript, Python, Perl, Lua和XML macro格式
Sample IVRs
demo-ivr.xml
源码中自带了一个用XML实现的示例IVR。IVR菜单加载自conf/autoload_configs/ivr.conf.xml
Dialplan调用IVR菜单的入口如下
1 2 3 4 5
| <extension name="ivr_demo"> <condition field="destination_number" expression="5000"> <action application="ivr" data="demo_ivr"/> </condition> </extension>
|
IVR Macro文件位于conf/lang/en/demo/demo-ivr.xml
IVR Menu功能可以使你简单的用XML描述IVR菜单o
菜单定义在配置文件autoload_configs/ivr.conf.xml中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <configuration name="ivr.conf" description="IVR menus"> <menus> <menu name="demo_ivr" greet-long="phrase:demo_ivr_main_menu" greet-short="phrase:demo_ivr_main_menu_short" invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav" exit-sound="voicemail/vm-goodbye.wav" timeout ="10000" inter-digit-timeout="2000" max-failures="3" digit-len="4"> <entry action="menu-exec-app" digits="1" param="bridge sofia/$${domain}/888@conference.freeswitch.org"/> <entry action="menu-exec-app" digits="2" param="transfer 9996 XML default"/> <entry action="menu-exec-app" digits="3" param="transfer 9999 XML default"/> <entry action="menu-sub" digits="4" param="demo_ivr_submenu"/> <entry action="menu-exec-app" digits="5" param="transfer 1234*256 enum"/> <entry action="menu-exec-app" digits="/^(10[01][0-9])$/" param="transfer $1 XML default"/> <entry action="menu-top" digits="9"/> </menu> <menu name="demo_ivr_submenu" greet-long="phrase:demo_ivr_sub_menu" greet-short="phrase:demo_ivr_sub_menu_short" invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav" exit-sound="voicemail/vm-goodbye.wav" timeout="15000" max-failures="3"> <entry action="menu-top" digits="*"/> </menu> </menus> </configuration>
|
IVR Menu支持使用phrase macro。在phrase后写phrase macro的macro名字即可。务必保证tts-engine, tts-voice和phrase-lang被正确设置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <menu name="main" greet-long="phrase:mainmenu_phrase_macro" greet-short="phrase:short_mainmenu_phrase_macro" invalid-sound="phrase:invalid_entry_macro" exit-sound="phrase:goodbye_macro" timeout ="10000" max-failures="3" tts-engine="cepstral" tts-voice="david" phrase_lang="en"> <entry action="menu-exit" digits="*"/> <entry action="menu-sub" digits="2" param="menu2"/> <entry action="menu-say-phrase" digits="4" param="enteraccount"/> <entry action="menu-back" digits="5"/> <entry action="menu-exec-app" digits="7" param="transfer 888 XML default"/> <entry action="menu-sub" digits="8" param="menu8"/> </menu>
|
有时需要在来话进入IVR应用之前添加如下内容,以保证之不在early media阶段被接听
1
| <action application="answer"/>
|
Options
菜单选项
- name - IVR菜单名称
- greet-long - 当菜单首次播放时的内容,可以是个文件或者"say:文本"或者"phrase:phrase_marco名"
- greet-short - 当菜单循环时播放的短一些的内容,可以是文件,say,phrase
- invalid-sound - 无菜单入口或入口非法时播放的内容,
- exit-sound - 菜单退出时播放的内容,可以是文件,say,phrase
- inter-digit-timeout - 等待用户进行选择的毫秒数
- timeout - 在confirm-macro播放后等待用户按确认键的毫秒数
- confirm-macro -
- confirm-key - 按个键告诉IVR digit-entry输完了。默认为#
- confirm-attempts -
- max-failures - 在IVR结束之前的最大digit-entry失败次数
- max-timeouts - 在IVR结束之前的最大超时次数
- exec-on-max-failures - max-failures时执行的FreeSWITCH dialplan应用
- exec-on-max-timeouts - max-timeouts时执行的FreeSWITCH dialplan应用
- tts-engine - TTS引擎名
- tts-voice - TTS播音员名
- digit-len - 在匹配菜单入口前等待的最长位数
每个菜单支持通过按键绑定一系列动作
- menu-exit - 退出IVR菜单
- menu-sub - 进入IVR子菜单
- menu-exec-app - 执行一个FreeSWITCH dialplan应用
- menu-play-sound - 播放声音文件或speak
1 2
| <entry action="menu-play-sound" digits="3" param="say: You pressed 3"/> <entry action="menu-play-sound" digits="6" param="voicemail/vm-goodbye.wav"/>
|
- menu-back - 回到上一级菜单
- menu-top - 回到顶级菜单
- menu-exec-api目前一直没实现