我不能得到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,调用跳转到最大的标签,跳过播放。
我想问题出在引号里,试一试让我知道