撥號方案基礎

Application

Answer(),Playback()和Hangup()應用

    Answer()應用於接聽正在響鈴通道,它不需要任何參數.

    Playback()應用在通道上播放事先錄製好的語音文件.指定一個文件名(不帶擴展名),可以使用絕對路徑與相對路徑.

  Hangup()應用在於掛斷一個正在活動的通道.

Background(),Goto()應用

  Background()它也播放事先錄製好的語音文件,但它等待按鍵,然後執行對應extension.

    防止Background()後超出按鍵範圍,使用i來解決問題.

    防止Background長時間沒有選擇,使用t來決解問題.

  Goto()應用使得在撥號方案的不同部分有序的轉移非常容易.

    Goto()應用有三個參量分別是context,extension,和priority.即Goto(context,extension,priority)

Dial()應用

  Dial()有4個參量,

    第一個是:呼叫的被叫地(傳輸技術/遠地資源)如:SIP/50000或Zap/1.可以同時撥打多個通道如:

exten => 601,1,Dial(Zap/1&SIP/50000&IAX/60000)

    第二個是:超時,單位"秒".給定超時參量Dial會一直對被叫地進行呼叫,直到超時後才放棄,如果沒有給定,將直到接聽或主叫掛機,如果呼叫在超時前接聽,通道就被橋接,撥號完成

  補充:如果超時後被叫地沒有應答,則會繼續Dial()的extension下一個priority.如果被叫地通道忙,Dial()將轉到priority n+101(n是Dial()被調用的priority),如果存在的話,將能夠處理被叫地忙的方式接叫未接電話.

    第三個是:可選擇參量,它會可以影響到Dial()的行爲,如:

exten => 601,1,Dial(SIP/50000,30,Ttwr)

  其中T表示允許主叫用戶按"#"轉接呼叫;t表示允許被叫用戶按"#"轉接呼叫;r表示爲被叫用戶產生振鈴聲;w用戶按"*"鍵開始錄音.

    最後一個是:URL參量.如:

exten => 601,1,Dial(SIP/[email protected])

exten => 602,1,Dial(Zap/1/5732381)

任何參量都可以爲空如:

exten => 601,1,Dial(SIP/60000,,T)

exten => 601,1,Dial(SIP/60000)

綜合上面舉個例子:

[test]
exten => s,1,Answer()
exten => s,2,Background(enter-ext-of-person)
exten => 601,1,Dial(Zap/1,30,Ttrw)
exten => 601,2,Playback(vm-nobodyavail)
exten => 601,3,Hangup()
exten => 601,102,Playback(tt-allbusy)
exten => 601,103,Hangup()
exten => 602,1,Dial(SIP/50000,30,Ttrw)
exten => 602,2,Playback(vm-nobodyavail)
exten => 602,3,Hangup()
exten => 602,102,Playback(tt-allbusy)
exten => 602,103,Hangup( )
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(test,s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup()

Extension,不能多於80個字符,也不能少於1個字符(601/602) 

------2007-01-05-修改

 

變量 

在撥號方案中使用變量可以減少打字、增加清晰度,也有助於在撥號方案中加入邏輯.

這裏的變量有全局變量,通道變量和環境變量.

全局變量:

  全局變量應該在extensions.conf文件的開始利用[globals]這個context定義或利用 SetGlobalVar()應用.如:

[globals]

80000=Zap/1

[internal]

exten => 123,1,SetGlobalVar(80000=Zap/1)

通道變量

  通道變量與特定的呼叫相關的變量,通道變量只能在當前呼叫存在其間定義,並只能用於參與該呼叫的通道.通道變量使用 Set()應用來設置.如:

exten => 601,1,Set(80000=Zap/1)

環境變量

  環境變量是一種在 Asterisk 中訪問操作系統環境變量的方法.這些變量以${ENV(var)}形式引用,其中的 var 是所要引用的操作系統環境變量.

  綜合上面舉例:

[globals]

PSTN=Zap/1

TEST=SIP/80000

 

[test]

exten => s,1,Answer()

exten => s,2,Background(enter-ext-of-person)

exten => 101,1,Dial(${PSTN},10)

exten => 101,2,Playback(vm-nobodyavail)

exten => 101,3,Hangup()

exten => 101,102,Playback(tt-allbusy)

exten => 101,103,Hangup()

exten => 102,1,Dial(${TEST},10)

exten => 102,2,Playback(vm-nobodyavail)

exten => 102,3,Hangup()

exten => 102,102,Playback(tt-allbusy)

exten => 102,103,Hangup()

exten => i,1,Playback(pbx-invalid)

exten => i,2,Goto(incoming,s,1)

exten => t,1,Playback(vm-goodbye)

exten => t,2,Hangup()

 

[default]

exten => 101,1,Dial(${PSTN},,r)

exten => 102,1,Dial(${TEST},,r)

 

模式匹配

 

模式匹配

  使用模式及匹配是用不同的字母和符號來代表可能要匹配的數字.模式總是用一個下劃線 (_) 開始,它告訴Asterisk 要做模式匹配,這不是一個 extension 名字.(這意味着不能使用下劃線作爲 extension 名字的開始字符.)

模式匹配語法

  在下劃線之後,可以使用一個或者多個下面列出來的字符:

X:匹配 0-9 的任何數字;

Z:匹配 1-9 的任何數字;

N:匹配 2-9 的任何數字;

.(句號)通配符,匹配一個或多個字符;

[15-7]:匹配1,5,6,7; 

  使用${EXTEN}通道變量:Asterisk會把通道變量${EXTEN}設置爲所撥的數字.通過sayDigits()檢測撥到號碼內容如:

exten => _9XXXXXXX,1,SayDigits(${EXTEN})

;SayDigits()應用會把所撥的8位extension讀出來

 

exten => _9XXXXXXX,1,SayDigits(${EXTEN:1})

;只讀出來後7位數,其中"1"表示不撥前面1位數

 

exten => _9XXXXXXX,1,SayDigits(${EXTEN:-1})

;只讀出來最後1位,其中"1"表示只撥出最後1位數

 

去話撥號(PSTN)

舉例:按"9"後撥打外線,去電時,去除"9";加放"ignorepat => 9"是爲了使按完"9"後還可以聽到撥號音;加入"Congestion()"應用是掛機或忙的時候播放快忙音(擁擠聲音).

---本地去話撥號---

[outbound-local]

ignorepat => 9

exten => _9NXXXXXX,1,Dial(Zap/1/${EXTEN:1})

exten => _9NXXXXXX,2,Congestion()

exten => _9NXXXXXX,102,Congestion()

---再加入緊急電話撥號---

exten => 9119,1,Dial(Zap/1/119)

exten => 119,1,Dial(Zap/1/119)

exten => 9110,1,Dial(Zap/1/110)

exten => 110,1,Dial(Zap/1/110)

---長途電話撥號---

[outbound-long]

exten => _90NXXNXXXXXX,1,Dial(Zap/1/${EXTEN:1})

exten => _90NXXNXXXXXX,2,Congestion()

exten => _90NXXNXXXXXX,102,Congestion()

 

Includes

Asterisk通過Includes實現在一個context中使用另一個context.格式:includes => context

[internal]

include => outbound-local

include => outbound-long

exten => _80XXX,1,Dial(SIP/${EXTEN},30,r)

exten => _80XXX,2,Playback(vm-nobodyavail)

exten => _80XXX,3,Hangup()

exten => _80XXX,102,Playback(tt-allbusy)

exten => _80XXX,103,Hangup()

 

表達式和可變操作

表達式

  表達式是變量,運算符和數值的聯合,當你把它們組合到一起就會得到一個表達式結果.在Asterisk 中,表達式總是以$符合作爲開始,以方括號“[]”來擴住表達式.如:

$[expression]

$[${COUNT} + 1]

$[${COUNT} / 2]

;引用變量,必須把這個變量名用花括號"{}"括起來,而且在前面加上美元符號"$" 標示出來

運算符

  布爾型運算符

  expr1 | expr2("|"或運算):如果expr1的值是真值,那麼運算符將賦expr1的值,否則將賦expr2的值.

  expr1 & expr2("&"與運算):如果兩個表達式的值都爲true,運算符將賦值爲expr1,否則賦值爲0.

  expr1{=,>,>=,<,<=,|=}expr2:如果自變量都是整數,這些運算符將得到一個整數的比較結果;否則,它們將得到字符串的結果.如果給定的關係是正確地,這個結果是1,否則就是0.

  數學運算符

  expr1{+, -}expr2:運算符能得到整數自變量的加法或者減法地結果.

  expr1{*,/,%}expr2:運算符能分別得到整數自變量的乘法,除法或是餘數的結果.

  正則表達式運算符

  expr1:expr2:運算符匹配 expr2到expr1,這裏的expr2必須是一個正則表達式.

  ***Asterisk 的分析程序非常簡單,因此在你輸入時,在運算符和其他數值之間至少需要一個空格.

 

撥號方案函數

   撥號方案函數可以使你增加更多的功能到你的表達式中.

語法

   基本語法:FUNCTION_NAME(argument).如果要引用函數的值,和引用變量的值一樣,用美元符號“ $” 加上花括號“{}” 括起函數表達式.如:

${FUNCTION_NAME(argument)}

函數也可以嵌套封裝其他的函數,如:

${FUNCTION_NAME(${FUNCTION_NAME(argument)})}
撥號方案函數 

  函數常常用來連接set()應用,來取得或者賦值一個變量的值.舉個例子,計算一下一個字符串的長度,並讀出這個長度;

exten=>123,1,set(TEST=example)      ;賦值example變量給TEST

exten=>123,2,saynumber(${LEN(${TEST})})  ;計算出變量TEST長度,並讀出長度數

結果是:7

  如果我們要設置一個動態通道的超時,應該用TIMEOUT()函數.這個函數可以接受以下三個中的一個做爲自變量,分別是absolute,digit和response.他們對應的應用是AbsoluteTimeout(),DigitTimeout()和ResponseTimeout().用 timeout()函數,設置數字的超時,我們可以set()函數, 如:

exten=>s,1,set(TIMEOUT(digit)=30) 

  ***這個函數中沒有${}.它和給一個自變量賦值一樣,我們就賦值給一個函數,是不使用${}封裝的. 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章