簡體   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