我无法让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)
......似乎没什么用。每种变化要么变成“拥塞”,要么不变,但无论junky的价值如何,它都会这样做。
这里有一个我们在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中执行此操作的正确语法是什么?
答案 0 :(得分:2)
您提供的示例在左括号前缺少美元符号($)。在操作数之间添加空格也是一种很好的做法(旧版本的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,拨号方案将继续,它将播放文件demo-congrats然后挂断
以下是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,因此呼叫将转到跳过播放的拥塞标签。
我认为问题出现在引号中,尝试并让我知道。