11 GotoIf整数比较



我不能得到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)

在您提供的verbose中,求值返回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

如果以下优先级失败(例如:a拨打),呼叫将继续到下一个,以此类推,所以你最终会遇到拥塞。

我希望这对你有帮助。

编辑:

我在我的服务器上做了一个例子,它正在运行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, dialplan将继续,它将播放demo-恭喜文件,然后挂断

下面是一个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,调用跳转到最大的标签,跳过播放。

我想问题出在引号里,试一试让我知道

相关内容

  • 没有找到相关文章

最新更新