Asterisk 撥號計畫之匹配規則和優先順序詳解

2021-08-19 17:33:12 字數 1561 閱讀 5747

1. asterisk撥號計畫簡介

自己查資料

2. asterisk配置

先新增sip分機 801,用軟**註冊分機後,修改801分機的context=test-inc ,因為我們下面要**asterisk 基於類似正規表示式的匹配以及include=>包含指令的優先順序。在asterisk撥號計畫配置檔案extensions.conf 中加入如下撥號規則

[test-inc]

include => inc1

include => inc2

include => inc3

exten => _.,1,noop(==00==)

[inc1]

exten => _33xx,1,noop(==11==)

[inc2]

exten => _22.,1,noop(==22==)

[inc3]

exten => 3333,1,noop(==3333==)

2)容器類context(也就是有include=>包含子context的上下文),比如上面的[test-inc]中的明確給出的撥號計畫語句,總是比它用 include=> 指令包含的子

context中的優先順序要高,即使子context裡面的正則匹配比它的父context還要詳細和明確,只要撥號的分機extension能夠匹配父context中的分機正規表示式分機,那麼撥號計畫的流程絕對不會執行到子context。 例如上面的例子中,父context 有乙個 exten => _.,1,noop(==00==) 這樣的_.的全部匹配的分機正規表示式,那麼所有sip分機配置中凡是設定了context=test-inc 的分機撥號後都只能執行noop(==00==)。因為_.是萬能匹配的,所有的分機都可以在父context [test-inc]中找到匹配,所以子context中的撥號規則永遠也不會執行。

測試:請用801撥打3333測試,你會發現 asterisk cli> 輸出的是執行noop(==00==) ,而不是 noop(==3333==) ,請自行測試。

另外:如果父context中匹配不了分機撥打的extension,那麼asterisk才會考慮去匹配子context中的規則。

3)某個父context中的include=> 中的優先順序是 從上到下而遞減的。 舉例來說: [test-inc] 中匹配優先順序inc1 > inc2 > inc3 。具體體現在某個撥號規則,在父context中沒有匹配,那麼aterisk將會查詢include=>子context 中的撥號規則去尋求匹配,但是是有優先順序順序的。比如某個來電的分機匹配了 inc1中的extension規則,即使在 inc2,inc3中有更加明確的正規表示式匹配,結果也不會去匹配inc2或者inc3中的規則的。

請注釋掉上面的「exten => _.,1,noop(==00==)」 ,然後過載撥號規則,再撥打3333 ,你將會發現執行的是[inc1]中的 「noop(==11==)」 而非「[inc3]」中的 「noop(==3333==)」 。請自行測試。

4. 明白了上述幾點,也就會明白為什麼freepbx生成的撥號規則總會乙個 include => ***x-custom 放在每個context的第一行,而且freepbx會有調整出局路由優先順序的概念了

Asterisk 動態撥號方案配置說明

asterisk 動態sip 賬號及撥號方案配置,所謂 動態 是指這些配置是放在資料庫中,而不用存在檔案中,好處是方便使用者通過 web直接管理 asterisk 的配置,而且配置的生效無需重新 載入asterisk 基本配置過程如下 1.在 etc asterisk res odbc.conf 中...

用lua給Asterisk寫撥號方案

環境 作業系統 centos 6.0 asterisk版本 1.8.7.1 lua版本 5.1.4 步驟 1 安裝lua開發包 yum install lua devel 2 確認已經選擇pbx lua模組 configure make menuselect 確認 pbx modules pbx l...

Asterisk呼叫中心之web後台(四)

主要實現以下功能 1 使用者可以在web後台增減選單的子選單數量和各個選單的結構 包括按鍵以及對應的動作和語音檔案 2 web部分可以啟動和關閉asterisk系統。3 web部分增加新使用者以及設定呼叫使用者的組別。碰到的問題一 php網頁顯示亂碼 問題描述 在顯示網頁的時候,總是設定utf 8或...