如何允许在Asterisk中的上下文中随时跳过或转到



我正试图在我的pbx中创建一个启用警报功能,到目前为止,我已经有了这个上下文,它可以工作。我想允许在倒计时(播放音(期间的任何时候按下一个数字或#,跳到"警报现在已启用"时刻(或者可能是另一个扩展,无论哪种方式都有效(。

我面临的问题是Read或WaitExten只在定义的时间内工作,但我想继续拨号计划,并允许在频道中随时按下按钮。

exten => s,1,NoOp(enable alarm)
same => n,Set(DB(alarm/status)=Enabled)
same => n,Wait(1)
same => n,Answer()
same => n,Playback(customsounds/arming-in-45-seconds)
same => n,Playtones(825/150,0/1550)
same => n,Wait(10)
same => n,Playtones(825/150,0/1000)
same => n,Wait(10)
same => n,Playtones(825/150,0/510)
same => n,Wait(10)
same => n,Playtones(825/150,0/100)
same => n,Wait(5)
same => n,Playtones(825/1500)
same => n,Wait(3)
same => n,StopPlaytones()
same => n,Playback(customsounds/the-alarm-is-now-armed)
same => n,NoOp(do shell exec here)
same => n,HangUp()
exten => 1,1,NoOp(skipped countdown)
same => n,Playback(customsounds/the-alarm-is-now-armed)
same => n,NoOp(do shell exec here)
same => n,HangUp()

您可以使用Asteriks-Read((拨号计划应用程序而不是Wait((来构建上下文。Read((应用程序确实提供了一个超时参数,您可以将其设置为特定值。如果用户在读取((过程中按下#,读取将被中断,您可以继续。否则,读取将在经过超时后中止。要在后台播放音调,您可以使用Read((应用程序的filename参数,该参数可用于在等待DTMF输入时在后台播放一些音频文件。

在这种情况下,解决方案可能如下所示:

exten => s,1,NoOp(enable alarm)
same => n,Set(DB(alarm/status)=Enabled)
same => n,Wait(1)
same => n,Answer()
same => n,Playback(customsounds/arming-in-45-seconds)
same => n,Read(get,customsounds/waitingsound,,,,45)
same => n,Playback(customsounds/the-alarm-is-now-armed)
same => n,NoOp(do shell exec here)
same => n,HangUp()

也许语法不是100%正确,但在您的情况下应该是这样。您可以在此处阅读有关read((应用程序的更多信息:http://the-asterisk-book.com/1.6/applikationen-read.html

或者在这里:https://www.voip-info.org/asterisk-cmd-read/

最新更新