前面我们已经搭建好了百度Mrcp Server
服务器,接下来我们将Freeswitch
与unimrcp server
两者连接起来,配置百度unimrcp server
的文章大家去这里看一下:搭建百度Mrcp Server与Freeswitch的mod_unimrcp对接实现智能客服
一、配置freeswitch的mod_unimrcp模块:
1、安装mod_unimrcp模块
- cd /项目源码地址/frerswitch
- vim modules.conf
- # 取消掉asr_tts/mod_unimrcp的注释
- asr_tts/mod_unimrcp
- # 安装mod_unimrcp模块
- make mod_unimrcp-install
- # 编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,添加或者去掉注释mod_unimrcp,让模块启动默认加载
- vim /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
- <load module="mod_unimrcp"/>
2、设置profile文件与conf文件;
在mrcp_profiles
目录下新建unimrcpserver-mrcp-v2.xml
配置文件:
vim /usr/local/freeswitch/conf/mrcp_profiles/unimrcpserver-mrcp-v2.xml
然后输入以下内容:
- <include>
- <!-- UniMRCP Server MRCPv2 -->
- <!-- 后面我们使用该配置文件,均使用 name 作为唯一标识,而不是文件名 -->
- <profile name="unimrcpserver-mrcp2" version="2">
- <!-- MRCP 服务器地址和SIP端口号 -->
- <param name="server-ip" value="192.168.16.4"/>
- <param name="server-port" value="8060"/>
- <param name="resource-location" value=""/>
- <!-- FreeSWITCH IP、端口以及 SIP 传输方式 -->
- <param name="client-ip" value="192.168.16.4" />
- <param name="client-port" value="5069"/>
- <param name="sip-transport" value="udp"/>
- <param name="speechsynth" value="speechsynthesizer"/>
- <param name="speechrecog" value="speechrecognizer"/>
- <!--param name="rtp-ext-ip" value="auto"/-->
- <param name="rtp-ip" value="192.168.16.4"/>
- <param name="rtp-port-min" value="4000"/>
- <param name="rtp-port-max" value="5000"/>
- <param name="codecs" value="PCMU PCMA L16/96/8000"/>
- <!-- Add any default MRCP params for SPEAK requests here -->
- <synthparams>
- </synthparams>
- <!-- Add any default MRCP params for RECOGNIZE requests here -->
- <recogparams>
- <!--param name="start-input-timers" value="false"/-->
- </recogparams>
- </profile>
- </include>
注意,server-ip
为你上一篇文章你部署的搭建百度Mrcp Server与Freeswitch的mod_unimrcp对接实现智能客服的IP
地址,你可以使用ifconfig
查看内网IP地址。
接下来修改unimrcp
默认使用的ASR
驱动,可以使用vim /usr/local/freeswitch/conf/autoload_configs/unimrcp.conf.xml
编辑修改default-tts-profile
和default-asr-profile
为我们新创建的unimrcpserver-mrcp2
:
- <!-- UniMRCP profile to use for TTS -->
- <param name="default-tts-profile" value="unimrcpserver-mrcp2"/>
- <!-- UniMRCP profile to use for ASR -->
- <param name="default-asr-profile" value="unimrcpserver-mrcp2"/>
三、设置拨号计划
在/usr/local/freeswitch/conf/dialplan/default.xml
文件中创建拨号计划:
- <extension name="unimrcp">
- <condition field="destination_number" expression="^5001$">
- <action application="answer"/>
- <action application="lua" data="baidu.lua"/>
- </condition>
- </extension>
在/usr/local/freeswitch/scripts
目录下新增baidu.lua
脚本:
注意
其实楼主使用的是python
编写的脚本,实现了tts
和asr
无缝链接,并且支持了一个简单的对话交流,还没有分享出来,先占位;希望大家给星哦!
- session:answer()
- --freeswitch.consoleLog("INFO", "Called extension is '".. argv[1]"'\n")
- welcome = "ivr/ivr-welcome_to_freeswitch.wav"
- --
- grammar = "hello"
- no_input_timeout = 80000
- recognition_timeout = 80000
- --
- tryagain = 1
- while (tryagain == 1) do
- --
- session:execute("play_and_detect_speech",welcome .. "detect:unimrcp {start-input-timers=false,no-input-timeout=" .. no_input_timeout .. ",recognition-timeout=" .. recognition_timeout .. "}" .. grammar)
- xml = session:getVariable('detect_speech_result')
- --
- if (xml == nil) then
- freeswitch.consoleLog("CRIT","Result is 'nil'\n")
- tryagain = 0
- else
- freeswitch.consoleLog("CRIT","Result is '" .. xml .. "'\n")
- tryagain = 0
- end
- end
- --
- -- put logic to forward call here
- --
- session:sleep(250)
- session:hangup()
我们需要在/usr/local/freeswitch/grammar
目录新增hello.gram
语法文件,可以为空语法文件须满足语音识别语法规范1.0标准(简称 SRGS1.0),该语法文件ASR
引擎在进行识别时可以使用。
- <?xml version="1.0" encoding="utf-8" ?>
- <grammar version="1.0" xml:lang="zh-cn" root="Menu" tag-format="semantics/1.0" xmlns=http://www.w3.org/2001/06/grammar xmlns:sapi="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions">
- </grammar>
接下来用我们的软电话注册freeswitch
,然后拨打5001
即可看到如下识别结果:
四、如何拨打外网交流
使用如下代码即可,你可以通过ESL
链接:
- originate user/1005 &lua(baidu.lua)
- # 拨打远程,需要转码和忽略前期声音
- originate {ignore_early_media=true,absolute_codec_string=PCMA}sofia/gateway/sip线路/电话 &lua(baidu.lua)