文章目录
一、用FreeSwitch 实现ivr
ivr:交互式语音响应
1.1配置文件位置(作用:/usr/local/freeswitch/conf/ivr_menus下的所有ivr装入)
/usr/local/freesiwtch/conf/autoload_configs/ivr.conf.xml
配置文件是XML格式,菜单放到 中,而每一个即是一个菜单。并且,每个menu应该有一个唯一的名字(name),以便在拨号计划(dialplan)中引用。
1.2实操: 在/usr/local/freeswitch/conf/ivr_menus下新建welcome
<include>
<menus>
<menu name="welcome"
greet-long="custom/welcome.wav"
greet-short="custom/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>
1.2.1 内容说明
我们指定菜单的名字是welcome,greet-long即为最开始播放的语音--“您好,欢迎致电XX公司,请直拨分机号,查号请拨0”,
该语音文件默认的位置应该是/usr/local/freeswitch/sounds/,所以,您应该事先把声音文件录好,放到custom/welcome.wav(当然,你也可以使用其它路径,如/home/your_name/ivr/welcome.wav)。并且,由于PSTN交换机都是使用PCM编码,所以,welcome.wav文件的格式应为单声道,8000HZ。
如果用户长时间没有按键,刚应重新提示拨号,但重新提示应该简短,如“请直拨分机号,查号请拨0”。所以,可以录制这么一个声音文件放到custom/welcome_short.wav。
1.2.2 关键词说明
invalid-sound:如果用户按错了键,则会使用该提示。如果你安装时指定了make sounds-install,则该文件应该用默认存在的,只是它是英文的,如果你需要中文的提示,可以自己录一个放到custom中。
exit-sound:不说也知道,最后菜单退出时(一般时超时),会提示Good Bye。
timeout指定超时时间;
max-failures容忍用户按键错误的次数。
max-timeouts即最大超时次数。
inter-digit-timeout为两次按键的最大间隔(毫秒),如用户拨分机号1001时,如果拨了10,等2秒,然后再按01,这时系统收到的号码为10,则会提示错误 invalid-sound。
digit-len说明菜单项的长度,在本例中,用户分机号为4位。
menu-exec-app:该menu中有两个选项,第一个是在用户按0时, menu-exec-app执行一个命令(参见mod_command)在此处它执行transfer,将来话转到分机1000。如果来电用户知道分机号,则可以直接拨分机号,而不用经过前台转接,节约时间。在该例中,正则表达式"/^(10[01][0-9])$/" 会匹配用户输入1000-1019之间的分机。
1.3 以上菜单设定好后,需要在控制台中执行 reloadxml (或按F6)才可以配置生效。
1.4测试
FS> originate user/1001 &ivr(welcome)
或者
<action application="ivr" data="welcome"/>
外部呼入:进来这样,如果有外部呼叫进来,就可以听到语音菜单了。
<extension name="incoming_call">
<condition field="destination_number" expression="^你的DID号码$">
<action application="answer" data=""/>
<action application="sleep" data="1000"/>
<action application="ivr" data="welcome"/>
</condition>
</extension>