繁体   English   中英

星号11 GotoIf整数比较

[英]Asterisk 11 GotoIf Comparison of Integers

我无法获取GotoIf()来正确比较两个整数。

 exten => _X.,n,Set(junky=${RAND(0,1000)})
 exten => _X.,n,GotoIf(["${junky}"<"100"]?congest)
  ...
 exten => _X.,n(congest),Log(VERBOSE,"congested " ${EXTEN})
 exten => _X.,n,Congestion()

我尝试了无数种主题变化,例如:

 exten => _X.,n,GotoIf([${junky}<100]?congest)
 exten => _X.,n,GotoIf(${junky}<100?congest)
 exten => _X.,n,GotoIf($["${junky}"<"100"]?congest)

...似乎没有任何作用。 每个变体要么变为“拥塞”状态,要么变为“拥挤”状态,但是不管垃圾值如何,它都会这样做。

这里有一个在CLI中看到的示例:

-- Executing [26343434@ts-in:3] Set("SIP/xxx.xxx.xxx.xxx-00000431", "junky=150") in new stack
-- Executing [26343434@ts-in:4] GotoIf("SIP/xxx.xxx.xxx.xxx-00000431", "0?congest") in new stack

在Asterisk 11中执行此操作的正确语法是什么?

您提供的示例在左括号之前缺少美元符号($)。 在操作数之间添加空格也是一种好习惯(较旧版本的Asterisk如果不分开可能会在解析时遇到问题),它应如下所示:

exten => _X.,n,GotoIf($[ "${junky}" < "100" ]?congest)

在您提供的详细信息中,评估返回false,因此调用将继续到下一个优先级(您可以确定,因为GotoIf行中的问号之前为零):

-- Executing [26343434@ts-in:3] Set("SIP/xxx.xxx.xxx.xxx-00000431", "junky=150") in new stack
-- Executing [26343434@ts-in:4] GotoIf("SIP/xxx.xxx.xxx.xxx-00000431", "0?congest") in new stack

如果以下优先级失败(例如,拨号),则呼叫将继续进行下一个呼叫,依此类推,最终您将遇到拥塞。

我希望这可以帮助你。

编辑:

我在服务器上做了一个示例,它正在运行Asterisk 11.22,我删除了双引号,因为我们正在使用整数:

exten => 998,1,Set(junky=${RAND(0,1000)})
 same => n,GotoIf($[ ${junky} < 100 ]?congest)
 same => n,Playback(demo-congrats)
 same => n(congest),Hangup()

这是GotoIf返回false的示例:

-- Executing [998@from-internal:1] Set("SIP/1001-00009821", "junky=999") in new stack
-- Executing [998@from-internal:2] GotoIf("SIP/1001-00009821", "0?congest") in new stack
-- Executing [998@from-internal:3] Playback("SIP/1001-00009821", "demo-congrats") in new stack
-- <SIP/1001-00009821> Playing 'demo-congrats.ulaw' (language 'es')
-- Executing [998@from-internal:4] Hangup("SIP/1001-00009821", "") in new stack

由于返回false,因此拨号计划将继续,它将播放演示演示文件,然后挂断

这是GotoIf返回true的示例:

-- Executing [998@from-internal:1] Set("SIP/1001-00009834", "junky=1") in new stack
-- Executing [998@from-internal:2] GotoIf("SIP/1001-00009834", "1?congest") in new stack
-- Goto (from-internal,998,4)
-- Executing [998@from-internal:4] Hangup("SIP/1001-00009834", "") in new stack

由于评估返回true,因此呼叫将转到拥塞标签,从而跳过播放。

我认为问题出在引号中,请尝试并让我知道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM