knowledge/docs/freeswitch/FreeSWITCH对接百度MRCP.md

171 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Freeswitch通过mod_unimrcp与百度mrcp-server对接lua版
---
## 参考链接
[https://freeswitch.org/confluence/display/FREESWITCH/mod_unimrcp]
[https://ptorch.com/news/206.html]
[https://ptorch.com/news/207.html]
## 安装并加载mod_unimrcp模块
```bash
# 在freeswitch源码目录不是安装目录
make mod_unimrcp-install
# 在freeswitch安装目录中编译modules.conf.xml文件
cd /usr/local/freeswitch
vim conf/autoload_configs/modules.conf.xml
```
```xml
<!-- 添加如下配置 -->
<load module="mod_unimrcp"/>
```
## 设置profile文件和conf文件
```bash
vim /usr/local/freeswitch/conf/mrcp_profiles/unimrcpserver-mrcp-v2.xml
```
输入以下内容:
```xml
<include>
<!-- UniMRCP Server MRCPv2 -->
<!-- 后面我们使用该配置文件,均使用 name 作为唯一标识,而不是文件名 -->
<profile name="unimrcpserver-mrcp2" version="2">
<!-- MRCP 服务器地址和SIP端口号 -->
<param name="server-ip" value="192.168.16.4"/>
<!-- mrcp服务器的sip-port -->
<param name="server-port" value="15060"/>
<param name="resource-location" value=""/>
<!-- FreeSWITCH IP、端口以及 SIP 传输方式 -->
<param name="client-ip" value="192.168.16.4" />
<!-- freeswitch的sip-port -->
<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"/-->
<!-- 也是freeswitch的ip和rtp端口范围不是mrcp里配置的rtp范围 -->
<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>
```
编辑`unimrcp.conf.xml`文件改`default-tts-profile`和`default-asr-profile`
```bash
vim /usr/local/freeswitch/conf/autoload_configs/unimrcp.conf.xml
```
```xml
<!-- 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"/>
```
## 设置dialplan
```bash
vim /usr/local/freeswitch/conf/dialplan/default.xml
```
添加一个extension
```xml
<extension name="unimrcp">
<condition field="destination_number" expression="^5001$">
<action application="answer"/>
<!-- 对应scripts/baidu.lua文件 -->
<action application="lua" data="baidu.lua"/>
</condition>
</extension>
```
在`/usr/local/freeswitch/scripts`目录下创建`baidu.lua`文件:
```bash
touch /usr/local/freeswitch/scripts/baidu.lua
vim /usr/local/freeswitch/scripts/baidu.lua
```
文件内容如下:
```lua
session:answer()
--freeswitch.consoleLog("INFO", "Called extension is '".. argv[1]"'\n")
welcome = "/usr/local/freeswitch/sounds/en/us/callie/ivr/8000/ivr-welcome_to_freeswitch.wav"
--
grammar = "baidu"
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()
```
> 以上脚本实现当分机用户拨打5001时freeswitch会自动播放一段录音并接收用户发出的声音同时把声音传给mrcp服务器并接收返回结果
在`/usr/local/freeswitch/grammar`目录新增`hello.gram`语法文件内容为百度mrcp程序句中的语法文件内容
```xml
<?xml version="1.0"?>
<grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en-US" version="1.0" mode="voice" root="digit">
<rule id="digit">
<one-of>
<item>one</item>
<item>two</item>
<item>three</item>
</one-of>
</rule>
</grammar>
```
## 让配置生效并测试
```bash
fs_cli
reloadxml
```
## 防火墙
在freeswitch服务器和mrcp服务器都不需要额外开放端口。