[英]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.