操作系统 :CentOS 7.6_x64
FreeSWITCH版本 :1.10.9
日常开发中,会遇到需要在已存在的session上执行特定拨号方案的情况,今天整理下这方面的内容,我将从以下几个方面进行描述:
-
实验环境准备
-
基于transfer实现
-
基于execute_extension实现
-
基于transfer和execute_extension实现的区别
-
基于execute_extension实现的改进
-
提供示例代码及运行效果视频
一、实验环境准备
FreeSWITCH测试机:192.168.137.32
分机:1000
拨号方案(default.xml中添加):
extension name="conf_test">
condition field="destination_number" expression="^7001$">
action application="conference" data="test1@default"/>
action application="hangup"/>
condition>
extension>
二、基于transfer实现
1、使用uuid_transfer转接到特定dialplan
uuid_transfer是一个api命令,可以将指定session转接到特定dialplan,命令格式如下:
uuid_transfer uuid&服务器托管网gt; [-bleg|-both] dest-exten> [dialplan>] [context>]
完整信息可参考wiki:
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_commands_1966741/#uuid_transfer
呼叫分机命令:
originate user/1000 &echo
使用示例如下:
uuid_transfer c7a95b91-3fbe-4c0c-8f5a-ff4933279558 7001 xml default
运行效果如下:
可以在会议室里面看到1000这个分机:
演示视频可从如下渠道获取:
关注微信公众号(聊聊博文,文末可扫码)后回复 2024021101 获取。
2、使用transfer转接到特定dialplan
transfer是一个app,可以在xml中使用,也可以在lua脚本中使用,这里演示下如何在lua脚本中使用实现转接特定拨号方案功能。
命令格式如下:
transfer destination_number> [dialplan> [context>]]
完整信息可参考wiki:
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod-dptools/6586616/
在lua脚本中的使用示例如下(transTest1.lua):
local extInfo = "7001 xml default" session:execute("transfer",extInfo)
添加拨号方案:
extension name="testTrans">
condition field="destination_number" expression="^333$">
action application="lua" data="transTest1.lua"/>
condition>
extension>
使用分机1000拨打333即可验证,运行效果如下:
演示视频可从如下渠道获取:
三、基于execute_extension实现
execute_extension是个app,可以在xml中使用,也可以在lua脚本中使用,这里演示下如何在lua脚本中实现执行特定拨号方案的功能。
app的命令格式如下:
action application="execute_extension" data="extension [dialplan] [context]"/>
完整信息可参考wiki:
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod-dptools/6586595/
在lua脚本中的使用示例如下(transTest2.lua):
local extInfo = "7001 xml default"
session:execute("execute_extension",extInfo)
添加拨号方案:
extension name="testTrans">
condition field="destination_number" expression="^555$">
action application="lua" data="transTest2.lua"/>
condition>
extension>
使用分机1000拨打555即可验证,运行效果如下:
四、基于transfer和execute_extension的区别
这里记录下在实际使用过程中,发现的transfer和execute_extension的区别。
需要说明下,在前面提供的例子里面体现不出来transfer和execute_extension的区别,在故障恢复的场景中可以体现:
1)执行transfer时会影响故障恢复,crash前是A dialplan,recover后是B dialplan;
2)转dialplan时,使用 execute_extension 这个app则不会影响故障恢复,crash前是A dialplan,recover后还是A dialplan;
1、准备拨号方案及lua脚本
A dialplan的内容:
extension name="dp_testA1">
condition field="destination_number" expression="^7771$">
action application="answer"/>
action application="lua" data="apply_extension_test1.lua" />
action application="sleep" data="60000"/>
action application="hangup" />
condition>
extension>
extension name="dp_testA2">
condition field="destination_number" expression="^7772$">
action application="answer"/>
action application="lua" data="apply_extension_test2.lua" />
action application="sleep" data="60000"/>
action application="hangup" />
condition>
extension>
B dialplan的内容:
extension name="dp_testB">
condition field="destination_number" expression="^8001$">
action application="playback" data="local_stream://moh"/>
action application="hangup"/>
condition>
extension>
apply_extension_test1.lua的内容:
apply_extension_test2.lua的内容:
完整代码及相关文件可从如下渠道获取:
2、配置fs的故障恢复
1)开启fs启动时恢复
文件:vars.xml
添加的内容:
X-PRE-PROCESS cmd="set" data="api_on_startup=fsctl recover"/>
2) 开启profile相关开关
文件:internal.xml external.xml
添加内容:
param name="track-calls" value="true"/>
3、使用transfer进行呼叫测试
1)使用originate发起呼叫
命令如下:
originate user/1000 7771 xml default
2)根据语音提示进行按键;
3)执行crash操作
fsctl crash
4) 启动fs进行故障恢复;
5) 观察恢复效果。
恢复后执行的是8001这个dialplan的内容。
4、使用execute_extension进行呼叫测试
1)使用originate发起呼叫
命令如下:
originate user/1000 7772 xml default
2)根据语音提示进行按键;
3)执行crash操作
fsctl crash
4) 启动fs进行故障恢复;
5) 观察恢复效果。
恢复后执行的是7772这个dialplan的内容。
五、基于execute_extension实现的改进
如果故障恢复后需要走原来的拨号方案,则execute_extension是更好的选择,可以结合故障恢复的标志进行改进。
这里进行简单的示例,捕获该session是故障恢复的呼叫,代码如下(apply_extension_test22.lua):
配套的拨号方案如下:
extension name="dp_testA3">
condition field="destination_number" expression="^7773$">
action application="answer"/>
action application="lua" data="apply_extension_test22.lua" />
action application="sleep" data="60000"/>
action application="hangup" />
condition>
extension>
配套呼叫命令如下:
originate user/1000 7773 xml default
运行效果如下:
六、资源下载
本文涉及资源可从如下渠道获取:
好,就这么多了,别忘了点赞哈!
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
概念是学习的基础。在学习JS中的文件操作之前,先把文件相关的各种概念搞清楚,很有好处。 1. 二进制: 计算机硬件仅能处理和存储二进制数据,所以不管是你正在写的代码,还是你硬盘里的小姐姐,都是以二进制的形式存储于电脑的内存和硬盘里的。 2. 编码规则: 二进制…