asterisk撥號方案的配置

來源:互聯網
上載者:User

一直在看<Asterisk,電話未來之路CHN2>這個電子文檔,卻越看越糊途。於是在N+X次的Baidu後找到這個文檔:

[separator]

===================================================

 http://skytony.spaces.live.com/blog/cns!3ADCAF7D549E5C1E!209.entry

 

設定檔 “extensions.conf” 包含了Asterisk的撥號方案(dial  plan)。它的所有操作的控制和執行流程的主要方案。它控制呼入和呼出是如何被處理和路由。這裡是你配置串連行為的地方。 "extensions.conf"的內容以“節”的形式組織。它可以靜態設定和定義,作為上下文被執行。設定節有general 和 globals 兩種形式,由系統管理員完全定義。一種特殊類型的“contexts”是 macros,由使用者自訂,命名首碼是“macro-”,這是可重用的模式,如同程式設計語言裡的“過程”。extensions.conf中每一節都由 []中的節名開始。這使得extensions.conf具有和windows世界裡傳統的ini檔案非常相似的結構。  Asterisk v1.2中的新東西: 預設情況下,有一個新的選項“autofallthrough”被設定成了“yes”. 這個設定改變了以前的規則使得遇忙,阻塞,掛起的呼叫被立即終止。如果你正在為IVR寫一個extension.你必須使用“WaitExten”應用程式。 [general]   extentions.conf檔案的頂部,配置幾個設定。[globals]  接著,在[globals]節中,你可以定義全域變數/常量,以及他們的初始值。 Contexts 和 Extensions     在[general]和[globals]之後,extentions.conf檔案的剩餘部分就是dialplan的定義了。dialplan是由contexts的集合組成的。每個context是由extensions的集合組成。 Extension 模式     當你在context中定義extension時,你不僅使用文字數字,字母,還要匹配extension模式。  Context包括的內容   一個extension context可以嵌套另一個,參考一下下面的範例: Context "default":
         Extension       Description
         101             Mark Spencer
         102             Wil Meadows
         0               Operator 

Context "local":
         Extension       Description
        _9NXXXXXX        Local calls
        include => "default" 

Context "longdistance":
         Extension       Description
         _91NXXNXXXXXX   Long distance calls
         include => "local" 這裡我們定義三種 extension第一種content: default 允許撥打三個電話extension: Mark, Wil, and the Operator. 第二種content: local      一個擴充模式:允許撥打7位元字型大小碼(本地呼叫),同時也包括                                   “default” context,這樣也允許使用者撥打 Mark,Wil,或者是操作員。 第三種content: longdistance 一種允許撥打長途呼叫的擴充模式。它同時也包括上述的兩種模式                       (default 和 local) 使用擴充context,你可以謹慎的控制哪些人使用計費服務(內線,市話,長途) 如果一個撥叫號碼匹配多個模式,你可以參閱一下“擴充模式的排序”  當Asterisk從一個通道上收到一個呼入串連,Asterisk從context定義中查詢通道命令。context根據使用者撥打的 extension定義了不同的命令集。例如,如果使用者撥打的是“123”,context可以提供提供一套命令集來指導如何去做。如果使用者撥“9”, context可以提供另一套命令集來指導做什麼,同時context可以提供一套命令集來控制使用者撥打的任何以“555”開頭的號碼。 某些類型的友好串連,比如來自外線的呼入,使用者沒有撥打extension,在這種情況下,... 比方說,舉個例子,你有一個通道“Zap/1”,它串連到你辦公室中的一個電話手持功能。假如在Zap通道的的設定檔 (zapata.conf)中,你為Zap通道1定義了context=john.這樣當你使用那個手持功能撥打一個號碼時,Asterisk在 extension.conf中尋找名為“john”的context,找出它所應該做的(工作)。在extensions.conf中定義一個名為john的context,應該以下面的樣子開始: [john] 每一個context,你需要定義一個或者多個extensions,Asterisk根據不同的號碼撥叫用來比較。每個extension,通過命令集列表告訴了Asterisk應該做什麼。   Extensions extension 有兩種類型: literal 和 pattern literal extension 可以是一個號碼,就像123。它也可以包括出現在傳統電話中的標準的符號*和#,因此,12#89*是一個有效extension.某些電話撥號盤有一些特殊的標著 A,B,C 或者 D 的 DTMF鍵。extension也可以使用這些字母來定義。實際上,extension的名字可以包含任何字母和數字以及某些標點符號。          extension名字是大小寫敏感的?是的。有時是大小寫敏感的,有時不是。當使用者使用他們的VoIP電話撥打名為"OFFICE"的  extension 時,Asterisk不會執行名為“Office”的extension中定義的命令。另一方面,extension的名字不是大小寫敏感的,因此你不能在一個content中定義僅僅是大小寫不同的extension.因此你不能為“OFFICE”extension定義一套程式集,同時為"office"extension也定義一套程式集。 預定義的Extension名稱。Asterisk為特定的目標指定了一些extension名稱。

  • i:Invalid
  • s:Start
  • h:Hangup
  • t:Timeout
  • T:AbsoluteTimeout
  • o:Operator

詳細資料: Asterisk standard extensions

定義Extension

不同於傳統的PBX,extension是和電話,介面,菜單等聯絡在一起的。在Asterisk中,一個extension是定義成命令執行列表的。就像Dial和GotoIf命令,具有基於不同的條件轉到某個地方的能力。

 

當一個extension被撥叫,標為優先順序1的命令被執行,緊接著是2,等等。

這將一直持續到:

  • 呼叫被掛起。
  • 命令傳回碼-1(表示失敗)
  • 下一個更高優先順序的命令不存在。(注意:Asterisk不會跳過丟失的優先順序別)
  • 呼叫被路由到一個新的extension

 

extension.conf 檔案中的句法,一個extension執行的每一步是下面這個格式的:

 

exten = extension,priority,Command(parameters)

 

這裡等號也可以用一個箭頭來修飾,就是“=〉”,一種在很多例子中經常可以被看到的格式。

 好了,假如一個“context”,名為“john”。在每一個context中,你可以定義一個或多個 extension.每一個extension中,你定義一組命令集。你如何定義這些extension和命令?你需要一個文字編輯器來編輯 extensions.conf檔案。當然,也可以使用某些不錯的工具:GUI tool.

 

extension中的執行步驟和命令列組件是下面的樣子:

  • extension  是extension的標籤,可以是字串常量或者是動態模式-匹配許多可能的電話號碼。
  • priority 通常是正數(特例參見注意)。它是一個extension中的每個命令列的排序號碼。第一個可執行命令的priority值為“1”。因此當Asterisk將一個呼叫轉入一個extension時,它將首先尋找priority值為1的命令。如果沒有優先值為1的行,那麼這個extension將不會匹配這個撥入的號碼。當執行完優先值為1的命令之後,Asterisk將把priority的值增加到2,除非命令本身決定下一個要執行的優先值。如果extension中沒有定義下一個priority,Asterisk將完成對這個 extension的處理,即使是存在一個比丟失的命令的優先順序更高的命令。

注意:特殊情況下,字串也會被用於指定優先順序(參見 Asterisk standard extensions)。

  • command 是命令的名稱(也被稱為“應用程式”)。詳見 Asterisk Commands List.
  • parameters 依賴於命令。某些命令沒有參數,在這種情況下省略參數。

範例

   exten=>123,1,Answer

   exten=>123,2,Playback(tt-weasels)

   exten=>123,3,Voicemail(44)

   exten=>123,4,Hangup

這是單個名為“123”的extension的定義。但一個呼叫被安排到 extension 123,Asterisk將自己回答這個呼叫,播放一個名為“tt-weasels”的音效檔,提示使用者是否留下語音信箱,然後掛斷電話。

應該注意的是,Asterisk沒有關注這幾行代碼在extensions.conf檔案中的順序。你可以以不同的順序混合這幾行代碼,就像下面的例子,它與之前的例子沒有什麼不同,因為Asterisk使用priority來標示每一行的執行順序。

 

   exten=>123,4,Hangup

   exten=>123,1,Answer

   exten=>123,3,Voicemail(44)

   exten=>123,2,Playback(tt-weasels)

  
定義extension時的其它選項包括被稱為“ex-girlfriend”邏輯的選項。這個邏輯將匹配extension,不管是來自外部還是內部,關鍵是看撥入人的呼叫ID(caller id).例如:

 

      exten=>123/100,1,Answer()

      exten=>123/100,2,Playback(tt-weasels)

      exten=>123/100,3,Voicemail(123)

      exten=>123/100,4,Hangup()

  

只有當呼入人的ID號為100時,這個extension才被匹配,並且執行接下來的選項。這個也可以通過模式比對來完成,如下所示:

     exten=>1234/_256NXXXXXX,1,Answer()

     and so on ...

 

只有以256開頭的Caller ID才會匹配“1234”這個模式。這在保持本地呼叫時是很有用的。

 

你甚至可以做這樣的事情:

     exten=>s,1,Answer

     exten=>s/9184238080,2,Set(CALLERID(name)=EVIL BASTARD)

     exten=>s,2,Set(CALLERID(name)=Good Person)

     exten=>s,3,Dial(SIP/goodperson)

 

定義context的文法關鍵字有: exten,include,ignorepat以及switch

     詳見:How Does Asterisk Handle "Match As You Go" Dialing?

 

這種extension的排序辦法存在的一個弊端是-如果你需要插入或刪除一個priority時,你必須手動重新全部編號。我正在搞這麼一個工具用來處理這件事情,感興趣的話,可以嘗試一下:give it a try

 

Asterisk1.2以後的版本有一個新的方法處理這件事情。第一個優先順序給它編號,接下來的優先順序給它命名成“n”. 深入的瞭解:Asterisk Priorities

 

變數和運算式

支援變數的結構 ${VARIABLENAME}

使用運算式的結構${EXPRESSION} ,這裡運算式可以是常用運算式,比較運算式,加法運算式等等。

標準變數見: Asterisk variables 。運算式的描述見: Asterisk readme.variables

 

extensions.conf 檔案中的全域變數和通道變數的更多資訊,見Using Variables in Asterisk Dialplans

1.2版本中的新的撥號功能,見:Using Functions in Asterisk Dialplans

 

載入

在設定發生了改變之後,如果想重新載入撥號方案,無需載入所有的Asterisk設定檔。可以使用extension載入命令:Asterisk CLI

 

一個大檔案還是幾個小檔案?

當在extension.conf檔案中使用 #include<filename> 聲明時,包含了其它的檔案。用這個辦法你可以啟動這樣一個系統:extensions.conf是主檔案,users.conf包含你的本機使用者,services.conf包含各種服務-例如會議系統。使用這個方法,撥號方案可能更容易維護。#include<filename>聲明不同於include<context>聲明。#include聲明在所有的設定檔中都可以使用。

 

轉到其它的Asterisk

 

文法:

[iaxprovider]

switch=>IAX2/user:[key]@server/context

 

指定轉到其它的伺服器。userkey 需要在被呼入的伺服器的iax.conf檔案中定義。

 

context是被轉入的伺服器的extensions.conf檔案中的context.

例子: Asterisk - dual servers

 

從外部控制 extensions.conf

 

             Asterisk extensions from mysql

             所有的 .conf 檔案都可以使用 #include 聲明包含另一個.conf 檔案。

使用範例:

 #include "my-extra-config-file"

[globals]

ALL= Zap/1&SIP/1000&SIP/1001

 

[default]

exten=>s,1,Answer

exten=>s,2,Playback(welcome-message)

exten=>s,3,Goto(context-in-include-file,s,1)          ;go to include 檔案中定義的 context

 

範例:

使用宏建立extension

[globals]

PHONE1=Zap/1

PHONE2=SIP/6002

 

[macro-oneline]

exten=>s,1,Dial(${ARG1},20,t)

exten=>s,2,Voicemail(u${MACRO_EXTEN})

exten=>s,3,Hangup

exten=>s,102,Voicemail(b${MACRO_EXTEN})

exten=>s,103,Hangup

 

[local]

exten=>6601,1,Macro(oneline,${PHONE1})

exten=>6602,1,Macro(oneline,${PHONE2}) 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.