Asterisk的配置文件都在/etc/asterisk目錄下,重要的配置文件有:
- sip.conf sip電話基本配置
- extensions.conf 撥號規則
- voicemail.conf 配置語音信箱
- meetme.conf 會議室
- http.conf web界面相關
- manager.conf web界面相關
- cdr_mysql.conf 詳單數據庫
- res_mysql.conf mysql數據庫配置
- features.conf 自定義按鍵配置,同時還有一些系統默認的功能鍵
- modules.conf 定義了系統啟動時加載的模塊
- logger.conf 日志
-
sip--會話初始協議,通常用於voip電話,進行呼叫建立、呼叫結束以及呼叫進程中的協商。基本上,它幫助二個端點互相通話。sip不處理媒體;當呼叫建立之后,它通過實時傳輸協議在電話之間直接傳輸媒體。
SIP使用UDP5060端口進行通信,目前asterisk沒有TCP用於傳輸,但以后的版本可能會支持。我們所說的媒體是指端點之間傳輸的用於在另一端點重建你的聲音數據。同樣也指pbx音樂或聲音提示。
RTP用於在端點之間傳輸媒體。Asterisk中RTP使用大數字的無特權的端口(默認10000至20000)
SIP不是第一個,也不是唯一一個我們使用的VOIP協議(其它包括H.323,MGCP,IAX等),但是目前SIP似乎是硬件廠商最大的動力。SIP協議的優點是普遍的被接受和結構靈活,簡單。
下面是基本的sip.conf配置:
1 [10001] 2 type=friend; ;可以定義用戶(user)\端(peer)\朋友(friend) 3 secret=10001 ;鏈接服務器的密碼 4 host=dynamic; ; 動態主機地址,需要注冊到服務器 5 context=default; ;系統分組default 默認不分組暗指所有 6 username=10001; ;用戶名可以省略 7 mailbox=10001@default ;語音信箱 8 ;record_out=Always; ;去電錄音Adhoc需要時,Never從不,Always總是 9 ;record_in=Never ;來電錄音 10 ;callgroup ;呼叫分組,默認是"1" 11 ;pickupgroup ;帶接組 12 ;disallow ;不允許編碼 13 port=5060; ;通信端口號 14 qualify=yes; ;監視asterisk服務器與電話之間是否延時(默認2000可達;yes也可替換毫秒) 15 nat=yes; ;如果一個號碼在NAT設備后面,例如路由器或者防火牆,必須配置nat=yes,強迫asterisk忽略號碼的聯系信息,使用收到的包的地址信息 16 17 [10002] 18 type=friend; ;可以定義用戶(user)\端(peer)\朋友(friend) 19 secret=10002 ;鏈接服務器的密碼 20 host=dynamic; ; 動態主機地址,需要注冊到服務器 21 context=default; ;系統分組default 默認不分組暗指所有 22 username=10001; ;用戶名可以省略 23 mailbox=10001@default ;語音信箱 24 ;record_out=Always; ;去電錄音Adhoc需要時,Never從不,Always總是 25 ;record_in=Never ;來電錄音 26 ;callgroup ;呼叫分組,默認是"1" 27 ;pickupgroup ;帶接組 28 ;disallow ;不允許編碼 29 port=5060; ;通信端口號 30 qualify=yes; ;監視asterisk服務器與電話之間是否延時(默認2000可達;yes也可替換毫秒) 31 nat=yes; ;如果一個號碼在NAT設備后面,例如路由器或者防火牆,必須配置nat=yes,強迫asterisk忽略號碼的聯系信息,使用收到的包的地址信息 32 33 ;context=internal 定義了指令地點,用於控制電話的權限,以及如何處理此號碼的呼入呼叫。sip.conf中設置的context名稱和extensions.conf中的匹配。
詳細配置信息說明: http://www.cnblogs.com/yhyjy/archive/2012/07/25/2608417.html
-
extensions.conf的配置
1.Answer()應用用於接聽正在振鈴的通道
2.Playback()應用用於在通道上播放事先錄制好的語音文件。在使用Playback()應用時,系統不會理會來自用戶的輸入。若要使用Playback(),要指定一個文件名(不需要帶擴展名)作為參考。要特別說明的事,您也可以在文件名上包括完整的路徑。
3.Hangup()應用掛斷一個正在活動的通道。
4.Background()應用播放事先錄制好的語音文件當主叫方按下電話鍵的時候,會中斷語音的播放,轉到與所按數字對應的extension。Background()應用通常用於創建語音菜單。
5.Goto()應用它用於把呼叫發送到另一個context、extension以及priority
6.需要一個extension來處理主叫方沒有及時輸入的情況。如果主叫方在Background()完成語音文件播放后很久才按鍵,呼叫將被轉移到textension。需要一個用來處理非法輸入的extension,從而在主叫方按下一個無效輸入
7.Dial()應用把不同的主叫方鏈接到一起。Dial()需要4個參數。第1個是呼叫的被叫地,由呼叫所采用的技術、反斜線、遠地資源等組成。Dial()應用的第2個參量是超時,單位為秒。如果給定了超時參量,Dial()會一直對被叫地進行呼叫,直到有人接聽,或者主叫掛斷。Dial()應用的第3個參量是可選擇的字符串。它包含一個或多個能夠影響Dial()應用行為的字符。選項的列表太長,不能在這里逐一列出。最常用的一個是字母r。如果把字母作為第 3 個參量,在通知被叫通道有來電的這段時間內,主叫方會聽到振鈴聲音。Dial( )應用的最后一個參量是URL。如果被叫通道支持在呼叫的同時接受URL,那么所指定的 URL將被發送。這個參量很少使用。
1 [general] 2 exten => 10001,1,Dial(SIP/10001); 3 exten => 10002,1,Dial(SIP/10002);
-
簡單的例子說明:
(1) 應答,播放語音,掛掉
exten=>s,1,answer ; 接聽
exten=>s,2,Playback(hello-world);播放語音文件
exten=>s,3,hangup();掛斷
范例:
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文件中的順序。
語音信箱的使用和配置
在voicemail.conf中建立語音信箱
8001=>1234,8001,8001@device;
說明:箭頭左邊的8001是郵箱號碼,箭頭右邊1234是郵箱的密碼,8001是郵箱主人的名字,8001@device是郵箱所有者的Email地址
在extension.conf中添加語句
-
exten=>_X.,1,Dial(SIP/${EXTEN},r,10) ;呼叫連接當前的通道
exten=>_X.,2,Voicemail(u${EXTEN}@default) ;在十秒鍾內沒有接聽電話,不可用的信息能被播放
exten=>_X.,102,Voicemail(b${EXTEN}@default) ;它將我們的呼叫送往語音郵件,將聽到忙的消息
電話會議的配置
[rooms]
conf=>1001,1111,2222 聲明會議室號是1001,普通用戶進入密碼1111,管理員密碼2222
要使用web功能要配置http.conf,manager.conf
如要使用web功能,在這兩http.conf中設置:
enabled=yes
enablestatic=yes
在manager.conf中設置:
[general]
displaysystemname = yes
enabled = yes
webenabled = yes
port = 5038
[administrator] //添加asterisk
gui用戶
secret = 123456
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config
[astbillman] //添加astbill用戶
secret = ab87AstBtii3
deny=0.0.0.0/0.0.0.0
;permit=81.229.203.216/255.255.255.255
permit=127.0.0.1/255.255.255.255
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user
cdr_mysql.conf的配置
[global]
hostname=localhost;
dbname=asteriskcdrdb
table=cdr
password=password
user=asteriskcdruser
port=3306
sock=/var/lib/mysql/mysql.sock
userfield=1
在每次通話結束后,運行mysql,使用asteriskcdrdb數據庫就能看到cdr表下產生的話單
res_mysql.conf 配置
[general]
dbhost = localhost //astbill 數據庫
dbname = astbill
dbuser = astbilluser
dbpass = astbill419
dbport = 3306
dbsock = /var/lib/mysql/mysql.sock
logger.conf配置
[logfiles]
debug => debug
console => notice,warning,error
messages => notice,warning,error //都是設置要輸出的信息。
;保存在/var/log/asterisk下
-
可以參考的網址:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1255883
http://www.ladych.com/asterisk-%E5%BA%94%E7%94%A8-trixbox-%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE/
http://blog.csdn.net/hwz119/article/details/1761350
至於asterisk安裝可以參考
http://wiki.freepbx.org/display/HTGS/Installing+FreePBX+12+on+Ubuntu+Server+14.10
下面是一個完整的extension.conf配置例子
[default]
include => DID //包含DID context
include => featuremap //可以使用features.conf中定義的功能
include => parkedcalls //支持call park
exten => 1000,1,saydigits(${EXTEN})
exten =>
1000,2,Set(DYNAMIC_FEATURES=testfeature#musichold#record#unrecord)
exten => 1000,3,background(hello-world)
exten => 1000,4,waitexten(10,m)
exten => i,1,playback(pbx-invalid)
exten => i,2,goto(default,1000,1)
exten => t,1,playback(vm-goodbye)
exten => t,2,hangup()
exten => 1,1,goto(internal,s,1)
exten => _9.,1,goto(out-bound,s,1) //撥9呼外線,需另外寫out-bound context。
exten =>
500,1,voicemailmain() //收聽語音信箱內容
exten => 500,2,hangup()
exten =>
1234,1,meetme(,IpM) //撥500加入會議,會提示輸入會議號和密碼
exten => _5XXX,1,Dial(SIP/ServerA/${EXTEN:1},30,r) //撥5呼叫serverA下的用戶
exten => _5XXX,2,Answer()
exent => _5XXX,3,hangup()
[internal]
include => featuremap
include => parkedcalls
exten => s,1,Ringing
exten => s,n,wait,2
exten => s,n,background(enter-ext-of-person)
exten => s,n,waitexten(10,m)
exten => _1XX,1,wait(3)
exten =>
_1XX,2,Set(DYNAMIC_FEATURES=testfeature#musichold#record#unrecord)
exten => _1XX,3,Dial(SIP/${EXTEN},10,tTwW)
exten => _1XX,4,playback(vm-nobodyavail)
exten => _1XX,5,voicemail(u${EXTEN}@default) //超時5秒轉語音信箱
exten => _1XX,6,hangup()
exten => _1XX,104,playback(tt-busy)
exten => _1XX,105,voicemail(b${EXTEN}@default) //用戶忙轉語音信箱
