0

我正在尝试在我的 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()
4

1 回答 1

0

您可以使用 Asterisks Read() 拨号计划应用程序而不是 Wait() 来构建您的上下文。Read() 应用程序确实提供了一个超时参数,您可以将其设置为您的特定值。如果用户在 Read() 期间按 #,则读取将被中断,您可以继续。否则读取将在超时后中止。要在后台播放您的音调,您可以使用 Read() 应用程序的文件名参数,该参数可用于在等待 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/

于 2021-01-05T14:39:24.763 回答