Asterisk 11 GotoIf整数比较

时间:2016-09-29 21:26:50

标签: comparison asterisk

我无法让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中执行此操作的正确语法是什么?

1 个答案:

答案 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,因此呼叫将转到跳过播放的拥塞标签。

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

相关问题