我在Asterisk配置文件中有这个拨号计划:
[voicemenu-custom-1]
exten = s,1,NoOp(VM_Main)
exten = s,n,Answer()
exten = s,n,Goto(ringgroup,s,1)
exten = s,n,Dial(DAHDI/g1/009396464991)
exten = s,n,Hangup()
拨号计划中的一个非常简单的上下文,要求Asterisk Answer
,然后执行另一个名为ringgroup
的上下文(同时拨打所有电话),然后尝试拨打外部号码(009396464991
),然后挂断。
ringgroup
上下文的代码是:
[ringgroup]
exten = s,1,NoOp(RG1)
exten = s,n,Dial(SIP/1001&SIP/1002&SIP/1003&SIP/1004,30,${DIALOPTIONS})
exten = s,n,Hangup()
但我得到的是Asterisk应答入站呼叫,然后转到ringgroup
上下文,但是当执行行s,n,Dial(DAHDI/g1/009396464991)
时,遇到拨号错误并赢了'执行Dial
申请。
这里有什么问题?
答案 0 :(得分:2)
根据您描述的行为,我建议您将“Goto”更改为“GoSub”,并将“ringgroup”中的“HangUp”替换为“Return”。这将产生你正在寻找的效果。
“Goto”永远不会从您发送的上下文中回来。这是一张单程票。 GoSub,只要呼叫保持活动状态(即没有挂断),就会在耗尽新环境后自动返回到已发送的上下文。
顺便说一句,GoSubs被认为是比现在使用宏更好的做事方式,所以习惯它们是个好主意。
答案 1 :(得分:1)
您可以跳回voicemenu-custom-1
上下文,因为您在Groupdial之后HangUp
(已经由arheops指出)。
你可以跳转到标签,即。 voicemenu-custom-1
的“FwdOutbound”,Goto(context,extension,label)
。
[voicemenu-custom-1]
exten = s,1,NoOp(VM_Main)
exten = s,n,Answer()
exten = s,n,Goto(ringgroup,s,1)
; Label
exten = s,n(FwdOutbound),Dial(DAHDI/g1/009396464991)
exten = s,n,Hangup()
Ringgroup中的 Goto
,而不是Hangup
:
[ringgroup]
exten = s,1,NoOp(RG1)
exten = s,n,Dial(SIP/1001&SIP/1002&SIP/1003&SIP/1004,30,${DIALOPTIONS})
exten = s,n,Goto(voicemenu-custom-1,s,FwdOutbound)
exten = s,n,Hangup()
答案 2 :(得分:0)
使用
asterisk -r
core set verbose 10
看看到底发生了什么。
在你的计划中,我可以看到你正在使用Goto(ringgroups,s,1),但是上下文是ringroup,而不是ringroup。