freeswitch笔记:ivr介绍

IVR系统默认的配置文件为conf/autoload_configs/ivr.conf.xml,它装入conf/ivr_menus/目录下所有的XML
文件。系统有一个示例的IVR配置,叫demo_ivr,也就是我们刚才拨5000听到的那个。
真正的菜单配置信息放到一对“<menus></menus>”标签中,每一对“<menu></menu>”标签就描述一个菜
单。每个菜单应该有一个唯一的名字(name),以便在拨号计划(Dialplan)中引用(作为ivr App的参数)。在
前面的章节中已经讲过,被装入的XML文件最外层一般都有一对“<include>”标签,以保证XML文档的完整性。为
了实现目标菜单,我们创建一个XML配置文件conf/ivr_menus/welcome.xml,内容如下:
<include>
 <menus>
 <menu name="welcome"
 greet-long="welcome.wav"
 greet-short="welcom_short.wav"
 invalid-sound="ivr/ivr-that_was_an_invalid_entry.wav"
 exit-sound="voicemail/vm-goodbye.wav"
 timeout="15000"
 max-failures="3"
 max-timeouts="3"
 inter-digit-timeout="2000"
 digit-len="4">
 <entry action="menu-exec-app" digits="0" param="transfer 1000 XML default"/>
 <entry action="menu-exec-app" digits="/^(10[01][0-9])$/"
 param="transfer $1 XML default"/>
 </menu>
 </menus>
</include>
在上述配置中,首先,我们指定菜单的名字(name)是welcome,其他各项的含义如下:
·greet-long:指定最开始的欢迎音,即最开始播放的“您好,欢迎致电某某公司,请直拨分机号,查号请
拨0”的语音,该语音文件默认的位置应该是在/usr/local/freeswitch/sounds目录下。应该事先把声音文件录好(可
以使用Windows系统自带的“录音机”或其他录音软件实现,后面我们还会讲到其他录音的方法),在本例子
中,我们都使用相对路径,当然也可以使用绝对路径,如/root/ivr/welcome.wav)。另外,PSTN交换机都是使用
PCM编码的,如果与PSTN对接的话,将声音文件存储为单声道、8000Hz的格式,能获得较好的音质并占用较少
的系统资源。当然,对于其他采样率的声音文件,FreeSWITCH也能自动转换,只是在Log中会有相关的采样率不
匹配的警告,初学者可以暂时不必理会。
·greet-short:该项指定一个简短的提示音。如果用户长时间没有按键,则应重新提示拨号,但重新提示应
该简短,比如直接说“请直拨分机号,查号请拨0”,而不用再把公司的欢迎广告再重复播放一遍。所以,可以把
这么一个声音文件录制到welcome_short.wav中。
·invalid-sound:如果用户按错了键,则会使用该提示。如果使用“make sounds-install”命令安装了声音文
件,则该文件应该是默认存在的。只是它是英文的,如果需要中文的提示,可以自己录一个,并修改这里的路径
使其指向自己录制的声音文件。
·exit-sound:该项指定最后菜单退出时(一般是超时没有按键)的声音,默认会提示“Good Bye”。
·timeout:指定超时时间(毫秒),即多长时间没有收到按键就超时,播放其他提示音。
·max-failures:为容忍用户按键错误的次数。如果用户的按键与下面配置的正则表达式不匹配(即没有找
到相关的菜单项),就认为是错误的。
·max-timeouts:即最大超时次数。
·inter-digit-timeout:为两次按键的最大间隔(毫秒)。如用户拨分机号1001时,假设拨了10,等3秒,
然后再按01,这时系统实际收到的号码为10(后面的01超时后没有收到),则会播放invalid-sound指定的声音文件
以提示错误。
·digit-len:说明菜单项的长度,即最大收号位数。在本例中,用户分机号长度为4位,因此我们使用4。
该菜单中有两个菜单项(Entry),第一个是在用户按0(digits="0")时,通过menu-exec-app执行一个
App。在此处它执行transfer,将来话转到default Dialplan中进行路由,并会最终转到分机1000。
如果来电用户知道被叫的分机号,则可以直接拨分机号,而不用经过人工转接,以节约时间。在本例中,第
二个菜单项中的digits正则表达式“/^(10[01][0-9])$/”会匹配用户输入的1000~1019之间的分机,也是转到
default Dialplan中进行路由,并最终转到对应的分机上。
如果来电用户按其他按键,则由于找不到匹配的菜单项进而提示错误(invalid-sound指定的声音),并提示
用户重新输入。
以上菜单设定好后,需要在控制台中执行reloadxml(或按F6键)使配置生效。
配置完成后就可以在控制台上进行如下测试(呼叫1001,接听后进入ivr菜单):
freeswitch> originate user/1001 &ivr(welcome)
测试成功后,就可以配置Dialplan把用户来话转接到菜单,在Dialplan中加入一个extension(注意,需要加
到正确的Dialplan Context中,如果不确定,则应该加到哪个Context中,在default和public中都加上会比较保
险。实际上,如果这里出了问题,应该回去看第6章):
<extension name="incoming_call">
 <condition field="destination_number" expression="^1234$">
 <action application="answer" data=""/>
 <action application="sleep" data="1000"/>
 <action application="ivr" data="welcome"/>
 </condition>
</extension>
其中,正则表达式“^1234$”匹配1234,即如果用户拨打1234时,就会在Dialplan中路由到这里。其中有三
个action,分别指定接下来要执行的动作。首先,执行answer对来话进行应答(必须先应答才能向对方播放声
音);然后使用sleep暂停一秒,以防止由于声音通路没建立好(有时候,特别是当主叫与被叫之间的链路比较复
杂时,声音链路的建立需要一个过程)而丢失声音;最后,执行ivr,它的参数就是我们刚刚建立的菜单项的名字
welcome。
接下来呼叫1234进行测试,就可以听到我们刚才配置的IVR菜单了。注意,在实际应用中,为了能接受外部来
的呼叫,可能要把这里的1234改成实际的DID(Direct Inbound Dial)号码。

猜你喜欢

转载自blog.csdn.net/irizhao/article/details/88647375