You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeSWITCH回滚策略振铃组单一声铃音播放问题求助

解决FreeSWITCH Rollover振铃组铃音重复重置问题

针对你在v1.10.8版本中遇到的rollover振铃组每次桥接分机时铃音重置的问题,核心原因是每次转接新分机时,FreeSWITCH会重新触发回铃音逻辑,transfer_ringback无法覆盖这一行为。以下是几种可行的解决思路:

方案一:主叫侧独立持续播放铃音

放弃依赖系统自带的回铃音变量,直接在preAnswer后给主叫播放自定义铃音,同时后台异步处理振铃组的rollover逻辑,避免桥接操作打断铃音。

主叫侧脚本代码

-- 提前应答主叫,屏蔽运营商默认铃音
session:preAnswer();

-- 启动后台任务处理振铃组的分机桥接逻辑
session:execute("bgapi", "lua run ring_group_rollover.lua " .. session:getUuid());

-- 循环播放自定义铃音,直到呼叫被桥接或挂断
while session:ready() do
    session:play("sound://" .. ring_group_ringback); -- 替换为你的铃音路径
end

后台振铃组处理脚本(ring_group_rollover.lua)

local main_uuid = argv[1]
local extensions = {"1001", "1002", "1003"} -- 替换为你的分机列表
local ring_timeout = 12 -- 每个分机振铃超时时间(秒)

for _, ext in ipairs(extensions) do
    local bridge_uuid = api:executeString("create_uuid")
    -- 禁用分机侧的回铃音,避免干扰主叫侧播放
    api:executeString("uuid_setvar " .. bridge_uuid .. " ringback ''")
    api:executeString("uuid_setvar " .. bridge_uuid .. " transfer_ringback ''")
    
    -- 发起桥接并设置超时
    local bridge_result = api:executeString("bridge " .. bridge_uuid .. " user/" .. ext .. " timeout " .. ring_timeout)
    
    -- 检查桥接是否成功,成功则停止主叫侧铃音并退出循环
    if string.find(bridge_result, "SUCCESS") then
        api:executeString("uuid_kill " .. main_uuid .. " PLAY")
        break
    end
end

-- 所有分机未接听时挂断主叫
api:executeString("uuid_hangup " .. main_uuid)

方案二:利用保持状态播放铃音

通过将主叫置于保持状态并播放铃音,后台处理振铃组呼叫,接通后取消保持并完成桥接:

session:preAnswer();
-- 保持主叫并播放自定义铃音
session:execute("hold", "local_stream://" .. ring_group_ringback);

-- 后台处理振铃组逻辑(同方案一的ring_group_rollover.lua逻辑)
-- 当检测到分机接通时,执行以下操作取消保持并桥接:
-- api:executeString("uuid_hold " .. main_uuid .. " off")
-- api:executeString("bridge " .. main_uuid .. " user/" .. answered_ext)

关于uuid_displace无法播放的排查点

如果坚持使用uuid_displace,先确认以下几点:

  • 确保铃音文件路径正确,且FreeSWITCH进程有权限访问该文件
  • 确认mod_displace模块已加载(在fs_cli中执行module_exists mod_displace)
  • 正确调用方式:api:executeString("uuid_displace " .. session:getUuid() .. " start sound://" .. ring_group_ringback),必须在session:preAnswer()之后执行

内容的提问来源于stack exchange,提问作者QViet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 13:52:56