2016/02/03

Asterisk : The Cookbook 食譜 028 - 撥號計劃的互動 3 Pattern Matching

Q028: 撥號計劃裡面常常見到一些怪符號,可以說明它們是什麼嗎?

除了前面提到的變數外,還會見到一些符號,通稱為樣式比對(否則就是錯誤輸入了)。

樣式比對通常需要很大的篇幅,這邊直接從範例來介紹:
exten => _NXX,1,Playback(silence/1&auth-thankyou)


  • _ 開頭告訴 Asterisk 這段字串是樣式比對
  • N 表示 2...9。就像前面的提到的 same => n ... 這段說的 n
  • X 表示 0..9
  • Z 表示 1..9
    接下來說明「list」符號 []. 如果您對 Shell, Perl. 甚至 C, Java 等有了解的話,可以視為 array.....意思就是 [] 括住的『其中之一』.舉例來說
  • [123] 就代表 1, 2, 3 其中之一都符合樣式
  • [1-9] 則代表 1..9 這九個數字都符合樣式
  • [15-7] 則代表 1, 5, 6, 7 這四個數字符合樣式
  • . 沒錯,就是一個點 '.' 代表萬用字元,包括英文字也都符合樣式,有些語言的樣式比對用的是 ?
  • ! 是的,驚嘆號 '!' 代表零個以上。有些語言的樣式比對用的是 *
如果您的樣式有英文,又想用到 NXZ 怎麼辦呢?可以考慮底下的方法
_[N]extNXZ 這樣的話,會比對到 Next999 這種字串。

另外,在北美19個國家中,共用一個 NANP 電話號碼表示法如下:
1-NPA-NXX-XXXX, 第一碼的 1 是給北美國家使用的。

說到這邊不得不提到另一項跟變數+樣式比對相關的問題:
如何在引用時引用『現在的分機號碼』?例如:
exten => _XXX,1,Answer()
  same => n,SayDigits(??????)

是的,這個問題能夠解決的話就能夠做出更彈性的設定。

答案是...${EXTEN} 代表目前的分機號

exten => _XXX,1,Answer()
  same => n,SayDigits(${EXTEN})

對於變數處理,知道 shell script 的人應該知道一種表示法,這邊先說一下,Asterisk 變數表達字串時,最前面的字元所處的索引值是 0, 跟 C 語言的陣列一樣。先來看看實例,如果 ${EXTEN} 值為 123456789 的話.....

${EXTEN:2} 其值為 3456789 表示索引值第 2 以後,所以傳回值是從 3 開始
${EXTEN:3:4} 其值為 4567 表示從索引值 3 開始,長度4個
${EXTEN:-4:2} 其值為 67,表示從後面數來第4個,長度 2個。這邊要知道的是從頭數是 0, 倒數則從 1 開始。
${EXTEN:1:-3} 其值為 23456,表示從索引值 1 開始,去掉後面3個

如果能了解上面幾項的話,應該會發現還算是夠強大了吧?

最後補充在這邊的是,include,沒錯,相當於把另一個 Context 載入到此的意思,語法如下:
include => Context

例如以這幾篇食譜來說,可以自訂一個 Context 如下:
[Custom]
include => TestMenu

還有一個類似的用法是載入檔案,用法如下:
#include "......" <-- c="" p="">


0 意見: