2016-10-21 29 views
0

我有一個Asterisk服務器(主要是)工作撥號計劃運行。星號 - 如何處理多位輸入

我有這樣的場景:

在一個點上的主叫方聽到「輸入任意號碼」。 然後他在手機上輸入一個號碼。

如果他輸入0,我想跳到撥號方案中的'Context0'。 如果他輸入1到10000之間的數字,我想跳轉到'Context1'。 如果輸入的數字高於10000,我想跳轉到'Context2'。

處理這一情況的背景是這樣的:

[Context] 
exten => 100,1,Background(/var/lib/asterisk/sounds/sound) 

exten => 0,1,Goto(Context0,100,1) 
exten => _Z,1,Goto(Context1,100,1) 
exten => _ZX,1,Goto(Context1,100,1) 
exten => _ZXX,1,Goto(Context1,100,1) 
exten => _ZXXX,1,Goto(Context1,100,1) 
exten => 10000,1,Goto(Context1,100,1) 

exten => i,1,Goto(Context2,100,1) 

這工作,如果我只輸入5位數字。如果我輸入f.e. 123456然後在12345之後它進入'我的擴展',進入Context2並在這個上下文中應用最後一個數字(在這個例子中是6)。

所以我的問題是,如果輸入大於10000,並且它跳到Context2更大,我該如何進行撥號規劃檢查?

我希望你明白我的問題,我的英語不太好.. :)

非常感謝和問候

回答

0

可以使用Read功能,做任何你想要的檢查:

[Context] 
exten => 100,1,Read(mynumber,/var/lib/asterisk/sounds/sound,10,skip,1,5) 
same => n,GotoIf($[${mynumber} = 0]?Context0,100,1) 
same => n,GotoIf($[${mynumber} <= 10000]?Context1,100,1:Context2,100,1) 

上面的代碼沒有經過測試,可能需要一些調整。

+0

但是,如果我嘗試使用Read,它總是會掛斷。在日誌中我總是看到: [Oct 24 11:34:57]警告[1356] [C-00000000] pbx.c:沒有應用程序'Read'用於擴展(Context,s,1) 我也嘗試了這樣簡單的事情:[鏈接](https://wiki.asterisk.org/wiki/display/AST/The+Read+Application)但它給了我同樣的錯誤... 我必須配置我可以使用應用程序「讀取」? – simplex

+0

@simplex確保'app_read.so'已加載。如果您的星號未配置爲自動加載,您可以使用'module load app_read.so'命令手動加載並重新運行測試。 –

0

完成後,您可能只需設置數字間超時或按井號(#)。超時可以使用設置:

Set(TIMEOUT(digit)=5) 

或者對舊版本(1.2 <):

DigitTimeout(5) 

應該在撥號方案的背景 CMD前開始出現問題。

0

123456無效,因爲您的模式不允許使用6位數字。 (你的模式不允許5位數字,除了10000以外)。

我建議你重新考慮你在做什麼以及爲什麼。

你真的是指'任何數字?'如果我嘗試輸入100,000位數字會怎麼樣?

是否可以將「輸入任意數字」更改爲「輸入最多x個數字後跟井號鍵?」

然後,您可以使用'read()'應用程序和幾個'gotoif()s'將調用者路由到不同的上下文。

也許如果你解釋了你正在努力完成的任務,可以提出一個更好的方法。