Asterisk拨号计划问题:播放随机语音文件后立即挂断通话
解决Asterisk分机随机播放单个语音后挂断的问题
你的拨号计划会连续播放多个语音文件,原因是Asterisk会按优先级顺序自动执行后续步骤——当跳转到某个Playback优先级后,会继续执行下一个优先级的Playback,直到遇到Hangup。要实现播放单个随机语音后立即挂断,需要让每个语音播放流程独立结束,修改方案如下:
修改后的拨号计划(推荐标签式写法,可读性更高)
exten => 123.,7,Goto(sound-${RAND(1,5)}) exten => 123.,n(sound-1),Playback(/var/lib/asterisk/sounds/customer_Menu1) exten => 123.,n,Hangup() exten => 123.,n(sound-2),Playback(/var/lib/asterisk/sounds/customer_Menu2) exten => 123.,n,Hangup() exten => 123.,n(sound-3),Playback(/var/lib/asterisk/sounds/customer_Menu3) exten => 123.,n,Hangup() exten => 123.,n(sound-4),Playback(/var/lib/asterisk/sounds/customer_Menu4) exten => 123.,n,Hangup() exten => 123.,n(sound-5),Playback(/var/lib/asterisk/sounds/customer_Menu5) exten => 123.,n,Hangup()
方案说明
- 用
Goto(sound-${RAND(1,5)})随机跳转到带标签的语音分支,每个标签对应一个独立的播放+挂断流程 - 每个语音播放完成后,立即执行
Hangup()终止通话,避免触发后续优先级的操作
另一种基于原优先级的修改方式
如果你想保留原有的优先级结构,可调整为:
exten => 123.,7,Goto(${RAND(8,16)}) exten => 123.,8,Playback(/var/lib/asterisk/sounds/customer_Menu1) exten => 123.,9,Hangup() exten => 123.,10,Playback(/var/lib/asterisk/sounds/customer_Menu2) exten => 123.,11,Hangup() exten => 123.,12,Playback(/var/lib/asterisk/sounds/customer_Menu3) exten => 123.,13,Hangup() exten => 123.,14,Playback(/var/lib/asterisk/sounds/customer_Menu4) exten => 123.,15,Hangup() exten => 123.,16,Playback(/var/lib/asterisk/sounds/customer_Menu5) exten => 123.,17,Hangup()
- 将
Goto的随机范围改为8,16(对应每个语音的起始优先级) - 每个
Playback优先级后紧跟Hangup(),确保播放完成后立即终止通话
内容的提问来源于stack exchange,提问作者Stef
相关产品推荐
相关产品推荐

