2013-10-17 36 views
0

我是Asterisk的初學者,但已將我的PBX連接到PSTN。我遇到的問題是,我有這個規則如果沒有其他匹配規則,請等待額外的數字

exten => _*X.*,1,Log(DEBUG, Calling through provider one to ${EXTEN:1:-1})  
    same => n,Dial(SIP/${EXTEN:1:-1}@oneProvider,60) 

沒有其他擴展名以*開頭。我想要達到的目的是在按下第二個鍵後立即撥出(並且沒有任何用戶可以按下去有效的分機),現在它等待幾秒鐘並撥號。我也試過添加!在延期結束時,但沒有任何變化。

我錯過了什麼嗎?這是可行的嗎?

謝謝!

回答

1

此任務在當前星號中不可行。 在您的撥號方案中,它無法與beacuase *匹配(點)。

除了像這樣的撥號方案(非常難看一個beacuase它會去撥號方案爲每一個新的數字)

[originalcontext] 
exten => *,1,Goto(collect_number,s,1) 

[collect_number] 
exten => s,1,WaitExten(); wait for single digit 

exten => *,1,Set(stars=${stars}*);save stars 
exten => *,2,GotoIF($[ "${stars}" == "**" ]?dial,1); if 2 star already,go dial. 

exten =>_X,1,Set(digits=${digits}${EXTEN});save digits 

exten => _.,3,WaitExten(); wait enother input; 
exten => _.,4,Goto(dial,1); go dial if no new digits 


exten => dial,1,Dial(SIP/${digits}@oneProvider,60) 

正確的解決方案 - 使用讀應用程序,並要求用戶使用#號結束數,而不是*。

您也可以嘗試撥號方案是這樣的:

exten => _*X*!,1,Goto(dial,${EXTEN:1:-1},1) 
    exten => _*XXX*!,1,Goto(dial,${EXTEN:1:-1},1) 
    exten => _*XXXX*!,1,Goto(dial,${EXTEN:1:-1},1) 
    exten => _*XXXXX*!,1,Goto(dial,${EXTEN:1:-1},1) 
    exten => _*XXXXXX*!,1,Goto(dial,${EXTEN:1:-1},1) 
    exten => _*XXXXXXX*!,1,Goto(dial,${EXTEN:1:-1},1) 
    exten => _*XXXXXXXX*!,1,Goto(dial,${EXTEN:1:-1},1); continue upto max number length 

    [dial] 
    exten =>_.,1,Dial(SIP/${EXTEN}@oneProvider,,); 

但我不能完全肯定,將工作。如果工作,會減少負載(但更多的線)

+0

謝謝!最重要的是,你幫助我理解了爲什麼它不起作用......我想。在正則表達式中工作(這意味着任何數量的前一個符號),而在Asterisk中,它實際上意味着任何次數的任何次數。 – g3rv4

+0

Nop。它比正則表達式簡單得多。這是patern匹配,檢查這個http://www.voip-info.org/wiki/view/Asterisk+Dialplan+Patterns – arheops

+0

我讀了那頁像千次...但我已經有偏見:)謝謝! – g3rv4

相關問題