拨号方案执行顺序

时间:2011-12-29 11:58:34

标签: asterisk telephony

我的星号拨号方案中有以下背景信息。

[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,我会回到起始调用上下文并在AGI应用程序中做一些魔术(第4行)。

问题在于,即使我输入900,电话也会被挂断。而不是从第3行到最后一行。所以它以某种方式跳过第4行。如果我在标记为重定向(第3行)之前移动900扩展名(第4行),则可以正常工作。

我认为星号会自动增加' n '优先级,并且可以按照上面列出的顺序运行。我错了吗?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

拨号方案必须是连续的。 Ext 1000永远不会被击中 - 因此星号会落到h exten。

答案 2 :(得分:0)

是的,拨号方案必须是连续的,一旦你启动“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
相关问题