拨号计划执行顺序



在我的星号拨号计划中有以下上下文:

[start-call]
exten => _X.,1,AGI(agi://localhost:4000)
exten => _X.,n,GotoIf($["${AGISTATUS}" = "FAILURE"]?redirect)
exten => _X.,1000(redirect),Hangup(31)    
exten => 900,n,Goto(start-call,${EXTEN},1)
exten => h,n,Hangup

我有一个AGI应用程序,它连接呼叫并收集DTMF输入,并使用set extension AGI命令(第1行)将该号码设置为扩展。只有在没有DTMF输入时,我才将AGISTATUS设置为FAILURE。如果没有输入,则超时并挂起(第3行)。但是如果输入900,则返回到start-call上下文并在AGI应用程序中执行一些魔术(第4行)。

问题是,现在即使我输入900,电话也会被挂断。不是第三行,而是最后一行。所以它跳过了第4行。如果我将900扩展名(第4行)移动到标记为的扩展名(第3行)之前,则可以正常工作。

我认为asterisk会自动增加'n'的优先级,并且希望它按照上面列出的顺序工作。我错了吗?

n自动迭代-它在上一个优先级上加1。这也是为什么必须在第一行初始化优先级为1的递增器。

当你把优先级1000放在中间某处时(这是完全有效的),下一行n将在此基础上加1,导致优先级1001 -正如其他人已经解释的那样,它永远不会被击中。

你的拨号计划可以读如下:

[start-call]
exten => _X.,1,AGI(agi://localhost:4000)
exten => _X.,2,GotoIf($["${AGISTATUS}" = "FAILURE"]?redirect)
exten => _X.,1000(redirect),Hangup(31)    
exten => 900,1001,Something()                                          ; not 3!
exten => h,1,Hangup

要解决这个问题,您必须按照其他人的解释重新排序您的扩展名,或者使用+操作符来确定优先级:

[start-call]
exten => _X.,1,AGI(agi://localhost:4000)                               ; 1
exten => _X.,n,GotoIf($["${AGISTATUS}" = "FAILURE"]?redirect)          ; 2
exten => _X.,n+1000(redirect),Hangup(31)                               ; 1002
exten => 900,n,Something()                                             ; 3
exten => h,1,Hangup

顺便说一下,您还可以使用文本标签作为扩展,这将使您的拨号计划更具可读性:

[start-call]
exten => _X.,1,AGI(agi://localhost:4000)                               ; 1
exten => _X.,n,GotoIf($["${AGISTATUS}" = "FAILURE"]?agi_failure,1)     ; 2
exten => 900,n,Something()                                             ; 3
exten => agi_failure,1,DoSomething()
exten => agi_failure,n,DoEvenMore()
exten => h,1,Hangup

拨号计划必须连续。Ext 1000从未被击中-因此星号会被传递到h扩展。

是的,拨号计划必须是连续的,一旦你开始"n"系列,你需要坚持下去。我假设扩展900是DTMF输入的一个示例——这个新扩展必须始终以优先级为1开始。"h"扩展也必须以1

的优先级开始
[start-call]
exten => _X.,1,AGI(agi://localhost:4000)
exten => _X.,n,GotoIf($["${AGISTATUS}" = "FAILURE"]?redirect)
exten => _X.,n,**if input received do something here**
exten => _X.,n(redirect),Hangup(31)    
exten => 900,1,Goto(start-call,${EXTEN},1)
exten => h,1,Hangup

相关内容

  • 没有找到相关文章

最新更新