在FreeSWITCH和会话管理器之间转移呼叫
我们有一个Avaya会话管理器和一个FreeSWITCH作为与之连接的功能服务器。
- 来自 Avaya CM World 的呼叫通过 Avaya 会话管理器路由到 FreeSWITCH。
- 在FreeSWITCH中,我们进行一些处理(替换来电显示(和
- 将其发送回会话管理器
FreeSWITCH处理调用如下
来自SM 1.2.3.4的呼叫
- 拨号计划调用 Lua 脚本** 可能会19131913
- 这个Lua脚本执行处理(数据库查找,等等...
- 最后它调用
session:transfer("tosm" .. dnis, "XML", "AS5850")
;转接呼叫 - 与 TOSM19131913 匹配的拨号计划执行回 SM 1.2.3.4 的桥接
<extension name="AVAYA SM">
<condition field="destination_number" expression="^tosm(d*)$">
<action application="bridge" data="sofia/AS5850/0*$1@1.2.3.4"/>
</condition>
</extension>
这工作相对正常,但问题是只要调用存在,FS 仍然使用两个通道保留呼叫。这会消耗会话管理器上的两个通道,这很昂贵。
在FreeSWITCH命令行上可以删除通道,以便调用完全离开FS。执行此操作的命令是uuid_simplify。
我尝试使用 lua 脚本执行该命令
my_fs_api = freeswitch.API()
my_exec_result = my_fs_api:executeString("sofia status")
my_exec_result = my_fs_api:executeString("uuid_simplify " .. my_ssession_uuid)
freeswitch.consoleLog("notice","nn[1c] result " .. my_exec_result .. "nn")
但它不起作用。
我试图从会话传输中删除session:tranfer
并在拨号计划上使用偏转。这也行不通。
有什么想法吗?
你只是使用了错误的工具。如果您只需要修改 SIP 标头(例如呼叫方 ID(,则可以轻松地使用 Kamailio 并将其配置为无状态处理,这样它就不需要知道正在进行的会话。
我可以在一月份帮助一些咨询(目前今年剩余时间已满(
您需要使用 FreeSWITCH 的命令 deflect 来执行 SIP REFERENCE 来完成呼叫转移,呼叫将离开 FreeSWITCH。