FreeSWITCH呼叫中心坐席通话后B侧前60秒无法接收DTMF按键问题
问题原因
该异常是FreeSWITCH callcenter模块的默认DTMF监听优先级逻辑导致的:callcenter模块默认会在坐席(B侧)接通后的前cc_agent_cancel_timeout(默认值60秒)时间内,监听坐席侧的DTMF按键,用于支持坐席按默认取消键(默认是#)主动挂断当前接入的队列呼叫。该逻辑的DTMF处理优先级高于提前绑定的bind_meta_app规则,因此前60秒内的所有DTMF事件都会被callcenter模块优先消费,不会传递到bind_meta_app触发转移逻辑。60秒后该监听逻辑自动超时退出,DTMF事件就会正常流转到配置的规则。
修复方案
有两种可行方案,可根据实际需求选择:
方案1:调整callcenter取消监听参数(操作最简便)
直接修改队列拨号计划,关闭坐席取消按键监听,或者缩短监听超时时间:
完全关闭取消按键监听
<extension name="Queue90"> <condition field="destination_number" expression="^90$"> <action application="set" data="cc_agent_cancel_key="/> <action application="bind_meta_app" data="7 ab s execute_extension::att_xfer XML features"/> <action application="callcenter" data="90"/> </condition> </extension>
保留取消功能,缩短监听超时
如果需要保留坐席按取消键挂断的功能,可将超时时间调整为更小的值(比如10秒):
<extension name="Queue90"> <condition field="destination_number" expression="^90$"> <action application="set" data="cc_agent_cancel_timeout=10"/> <action application="bind_meta_app" data="7 ab s execute_extension::att_xfer XML features"/> <action application="callcenter" data="90"/> </condition> </extension>
方案2:将bind_meta_app绑定到坐席接通回调
如果不想修改callcenter的默认监听逻辑,可将绑定操作放到坐席接通后的执行钩子中,确保B腿创建完成后再绑定规则:
- 先修改队列拨号计划,添加坐席接通后的执行参数:
<extension name="Queue90"> <condition field="destination_number" expression="^90$"> <action application="set" data="cc_agent_execute_on_answer=bind_meta_7"/> <action application="callcenter" data="90"/> </condition> </extension>
- 在
features上下文的拨号计划中添加对应的绑定扩展:
<extension name="bind_meta_7"> <condition> <action application="bind_meta_app" data="7 ab s execute_extension::att_xfer XML features"/> </condition> </extension>
内容的提问来源于stack exchange,提问作者progcxw
相关产品推荐
相关产品推荐

