为什么“拨号”应用程序未在此星号拨号计划的上下文中执行?

时间:2013-04-07 07:38:41

标签: asterisk

我在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申请。

这里有什么问题?

3 个答案:

答案 0 :(得分:2)

根据您描述的行为,我建议您将“Goto”更改为“GoSub”,并将“ringgroup”中的“HangUp”替换为“Return”。这将产生你正在寻找的效果。

“Goto”永远不会从您发送的上下文中回来。这是一张单程票。 GoSub,只要呼叫保持活动状态(即没有挂断),就会在耗尽新环境后自动返回到已发送的上下文。

顺便说一句,GoSubs被认为是比现在使用宏更好的做事方式,所以习惯它们是个好主意。

进一步阅读:http://www.voip-info.org/wiki/view/Asterisk+cmd+Gosub

答案 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。