首页 > 解决方案 > FreeSWITCH 中的 Lua 脚本在 bypass_media = true 时立即退出桥接

问题描述

当我将“bypass_media”设置为 true 时,如何让脚本等待网桥终止后再继续?

这个片段 -

freeswitch.consoleLog("err","session before="..tostring(session:ready()).."\n")
session:execute("set","bypass_media=true")
session:execute("bridge","sofia/gateway/carrierb/12345678")
freeswitch.consoleLog("err","session after="..tostring(session:ready()).."\n")

从音频的角度来看,它可以完美地与 bridge_media 设置为 true 或 false 一起工作,并且wireshark 跟踪显示音频通过 (false) 或端到端 (true)。

但是如果将 bypass 设置为 true,则脚本会继续运行而不会暂停,并且会话不再准备就绪(session:ready() == false)。

通道似乎进入了休眠状态,但是在桥接完成后我有家务要做,而我根本做不到。

如果我在 XML 拨号计划中进行桥接,也会发生同样的情况,立即继续导致我的内务处理提前触发。

FreeSWITCH (版本 1.6.20 git 43a9feb 2018-05-07 18:56:11Z 64bit) Lua 5.2

编辑 1 - 我可以让“api_hangup_hook=lua housekeeping.lua”工作,但是我必须传递大量变量,它会启动一个新的进程/线程/无论如何,这似乎有点矫枉过正,除非这是唯一的方法。

标签: luascriptingfreeswitchdialplan

解决方案


我有一个解决方法,但如果有人有这个问题,我仍然希望得到答案(即如何阻止桥立即退出)。

如果我在桥之前设置这个:

session:execute("set","bypass_media=true")
session:execute("set","session_in_hangup_hook=true")
session:execute("set","api_hangup_hook=lua housekeeping.lua "..<vars>)

然后“housekeeping.lua”在桥实际终止时触发(这在脚本之后很长时间)。

在 housekeeping.lua 中,我可以这样做:

session:getVariable("billmsec")

似乎有正确的价值观,让我可以做家务。

我的问题是在会话中使用变量的不确定性,该会话似乎已经脱离了未来某个时间点触发的脚本。

无论如何,在我找出如何在原始脚本中保持控制之前,它必须这样做。


推荐阅读