Asterisk 相關(guān)知識與應(yīng)用_第1頁
Asterisk 相關(guān)知識與應(yīng)用_第2頁
Asterisk 相關(guān)知識與應(yīng)用_第3頁
Asterisk 相關(guān)知識與應(yīng)用_第4頁
Asterisk 相關(guān)知識與應(yīng)用_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Asterisk 相關(guān)知識與應(yīng)用相關(guān)知識與應(yīng)用相關(guān)內(nèi)容 1. 1.什么是什么是asteriskasterisk 2.Asterisk 2.Asterisk 安裝與啟動安裝與啟動 3.Asterisk 3.Asterisk 結(jié)構(gòu)結(jié)構(gòu) 4. 4. 什么是什么是D Dialplanialplan 5. 5. AGI AGI 原理原理 6. Asterisk 6. Asterisk相關(guān)配置文件相關(guān)配置文件 7. 7.配置配置AsteriskAsterisk作為作為SIP ProxySIP Proxy 并進行呼叫通話并進行呼叫通話 8. 8.配置配置Voice Mail Voice Mail 9 . 9

2、 .配制簡單配制簡單IVRIVR 10 .10 .一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當(dāng)前天氣情況腳本,實現(xiàn)語音報告當(dāng)前天氣情況. .什么是什么是asteriskasterisk Asterisk Asterisk 是一個開放源代碼的軟件VoIP PBX系統(tǒng),它是一個運行在Linux環(huán)境下的純軟件實施方案。AsteriskAsterisk是一種功能非常齊全的應(yīng)用程序,提供了許多電信功能,能夠把你的x86機器變成你自己的交換機,還能夠當(dāng)作一臺企業(yè)級的商用交換機。AsteriskAsterisk讓人激動的事情是它在小企業(yè)預(yù)算可承受的范圍內(nèi)提供了商業(yè)交換機的功能和可伸縮性。你可

3、以使用一臺老式的奔騰3計算機,讓你的機構(gòu)看起來就同世界上的大企業(yè)一樣。 Asterisk 能夠支持線路和協(xié)議,Asterisk Asterisk 能夠支持傳統(tǒng)的線路,包括能夠支持傳統(tǒng)的線路,包括: TDM (Time Division Multiplexing) T1/ E1 PRI/ PRA & RBS (Robbed Bit Signal)modes Analog phone lines/ phones (POTS) ISDN (Integrated Services Digital Network) Both BRI (Basic Rate)and PRI (Primary Ra

4、te)Asterisk Asterisk 支持的協(xié)議包括:支持的協(xié)議包括: Session Initiation Protocol (SIP) H. 323 (ITU standard, contributed support) Inter- Asterisk eXchange (IAX) Media Gateway Control Protocol (MGCP) Asterisk能做什么? 附有目錄的語音郵件服務(wù) 電話會議、互動語音回應(yīng)和電話排序 通路呼叫 呼叫方ID服務(wù) ADSI 與硬件VOIP 比較 Asterisk具有硬件VOIP 的常用功能。 Asterisk能夠支持多媒體,具有可編

5、程功能。 Asterisk需要的帶寬,一般為:32KB/ 線路。也就是說每支持一條線路,只需要增32KB 的帶寬,但是需要網(wǎng)絡(luò)質(zhì)量良好。 Asterisk可支持成千的客戶端(需要板卡與帶寬支持)1從官方網(wǎng)站下載 asterisk-1.2.26.tar包,拷備到LINUX 下的用戶目錄.2 用tar xzvf asterisk-1.2.26.tar 解壓到當(dāng)目錄.3 進入 asterisk 目錄 執(zhí)行如下命令 #./configure #make#make install 進行安裝#make samples安裝默認的配置文件 4 啟動asteriskasterisk -vvvvvvvvvvvvv

6、vvc執(zhí)行后會出現(xiàn)很多提示,注意如果里面有紅色的error字樣說明有問題。如果執(zhí)行成功,最后會屏幕停在: asterisk ready *cliasterisk asterisk 安裝與啟動安裝與啟動Asterisk Asterisk 結(jié)構(gòu)結(jié)構(gòu)Asterisk結(jié)構(gòu)結(jié)構(gòu): 主要有PBX的核心、 channel驅(qū)動(SIP,ZAP,IAX2等)、Dialplan核心、數(shù)字信號處理(dsp)、相關(guān)協(xié)(SIP,MGCP,H.323,IAX2,rtp等)實現(xiàn)、各種音視頻編解碼實現(xiàn)、asterisk的數(shù)據(jù)庫管理接口等相關(guān)模塊共同構(gòu)成一個Asterisk整體 應(yīng)用框架分組交換網(wǎng)電路交換網(wǎng)DSP相相關(guān)關(guān)通通

7、道道驅(qū)驅(qū)動動PBX 核心模塊fxo,fxs ,sip,iax 通道Sip、Iax Signaling撥號方案模塊 I/O管管理理模模塊塊語音信箱處理模塊語音轉(zhuǎn)換/播音模塊進行呼叫數(shù)據(jù)庫管理接口模塊Sip、h.323,iax,mgcp,rtp等協(xié)議實現(xiàn)模塊媒體編解碼模塊(c 729, h263, pcm等)PSTN模擬接口卡(TDM400p)Asterisk Asterisk 結(jié)構(gòu)結(jié)構(gòu) 我們看SIP呼入時Asterisk處理的情景:通道概念通道概念:通道是指通過asterisk建立起來的一路通話。這類通話都包含一個incoming連接和一個outbound連接。每個電話都是通過一種通道驅(qū)動程序建

8、立起來的,比如SIP,ZAP,IAX2等,每一類的通道驅(qū)動,都擁有自己私有的通道數(shù)據(jù)結(jié)構(gòu)。Sip呼入Asterisk 核心創(chuàng)建一個PBX通道開啟一個PBX線程執(zhí)行撥號方案(dialplan)SIP通道驅(qū)動感知應(yīng)答這個呼叫并且播放媒體數(shù)據(jù)或者讀取媒體數(shù)據(jù),比如IVR業(yè)務(wù)asterisk通過dial應(yīng)用(dial application)創(chuàng)建一個對外呼叫,比如呼叫固定電話或移動電話至少執(zhí)行左邊其中之一Asterisk Asterisk 結(jié)構(gòu)結(jié)構(gòu)LINUX LINUX 上安裝上安裝A Asterisk sterisk 后相關(guān)目錄結(jié)構(gòu)如下后相關(guān)目錄結(jié)構(gòu)如下: : /etc/asterisk/Aster

9、isk主目錄,包含其它關(guān)于Asterisk的相關(guān)配置文件。 zaptel.conf這個配置文件放在/etc,因為其它軟件也可以使用Zaptel這個硬件及其驅(qū)動,所以不是放在/etc/asterisk里 /usr/lib/asterisk/modules/這個目錄包含所有可以加載Asterisk模塊(應(yīng)用程序編輯器格式和有用 通道),在Asterisk啟運時會加載這些模塊(可以編輯modules.conf)./var/lib/asterisk比較重要的是astdb文件與agi-bin目錄;astdb包含Asterisk當(dāng)?shù)財?shù) 據(jù)庫信息. sounds/所有聲音提示的文件在里面 mohmp3/如果

10、配置了音樂保持,應(yīng)用程序會在這個目錄下查找mp3 keys/使用公鑰和私鑰系統(tǒng)認證與一個由RSA數(shù)字簽名形成的一對等連接.公鑰和私鑰的擴展名分別為.pub和.keyAsterisk Asterisk 結(jié)構(gòu)結(jié)構(gòu) firmware/這個目錄含了很多Asterisk相兼容的設(shè)備固件,它只有iax/這個子目錄,其中有Digium的IAXy的二進制固件鏡像. images/只有在較多的支持并且利用圖解式的圖像設(shè)備被發(fā)布,這個目錄將會與相應(yīng)的目錄有更大的關(guān)聯(lián). agi-bin/agi-bin包含所有腳本,可以通過許多已經(jīng)建立的AGI應(yīng)用程序與Asterisk連接./var/spool/asterisk m

11、eetme/ outgoing/ gcall/ tmp/ voicemail/ 語音留言后的音頻數(shù)據(jù)以郵箱號為子目錄存儲DialPlan (DialPlan (撥號方案撥號方案) ) DialPlan: DialPlan是Asterisk 系統(tǒng)的真正核心,它定義了Asterisk 怎樣處理呼入和呼出的呼叫。DialPlan 的構(gòu)成: 主要有四個部分分別是 contexts 、 extensions、 priorities、applications。Contexts : Contexts : 撥號方案(DialPlan)進入部分我我們稱為Contexts,每個Contexts有一些extensi

12、ons(擴展)構(gòu)成,來實現(xiàn)一系列相關(guān)服務(wù)。 舉一個例子如下: default 在extensions.conf 配制文件中, default上下文是撥號方案默認的進入部分Extensions: Extensions: Extensions 定義了一系列撥號方案的具體步驟,每一個步驟包含一些applications(應(yīng)用).DialPlan (DialPlan (撥號方案撥號方案) )Extensions 語法用關(guān)鍵字 exten ,緊跟在后面有一個 = 符號,如下: Exten = 一個完整的extension 有三部分組成: a extension 名子,可有數(shù)字組成. b 優(yōu)先級 即每一個

13、步驟執(zhí)行的先后順序. C 應(yīng)用,即在呼叫中執(zhí)行的一具體動作. 舉一個簡單例子: Exten = 123, 1 ,Answer() DialPlan (DialPlan (撥號方案撥號方案) )Priorities: Priorities: 每一個extension 有許多步驟,我們稱為優(yōu)先級。每個優(yōu)先級有一系列數(shù)字組成,開始為1。 例如: Exten =123, 1, Answer() Exten =123, 2, Hangup() 注意點注意點:當(dāng)Asterisk將一個呼叫轉(zhuǎn)入一個extension時,它將首先尋找priority值為1的命令。如果沒有優(yōu)先值為1的行,那么這個extensio

14、n將不會匹配這個撥入的號碼。當(dāng)執(zhí)行完優(yōu)先值為1的命令之后,Asterisk將把priority的值增加到2,除非命令本身決定下一個要執(zhí)行的優(yōu)先值。如果extension中沒有定義下一個priority,Asterisk將完成對這個 extension的處理。DialPlan (DialPlan (撥號方案撥號方案) )ApplicationsApplications: 應(yīng)用是指在當(dāng)前的通道上執(zhí)行一系列特定動作,如播放語音,接受呼入,撥打電話,掛機等動作。 具體應(yīng)用有: Answer() 指接受通道上一次呼入 Playback() 播放一個音頻文件。 HangUP() 掛機動作 例如: defa

15、ult exten =123,1,Answer() exten =123,n,Playback(hello-world) exten =123,n,Hangup() background() 播放一個音頻文件,但按下了電話鍵盤上的數(shù)字鍵后會中斷語音, 主要做交互式動作(IVR)撥號方案,通常用作創(chuàng)建語音菜單.DialPlan (DialPlan (撥號方案撥號方案) ) waitExten() 一般和 background()一起使用,等待呼叫者按下DTMF 數(shù)字鍵. 如下: default exten = 123,1,Answer() exten = 123,n,Background(mai

16、n-menu) exten = 123,n,WaitExten() exten = 2,1,Playback(digits/2) exten = 3,1,Playback(digits/3) exten = 4,1,Playback(digits/4)DialPlan (DialPlan (撥號方案撥號方案) ) goto goto 功能是發(fā)送呼叫到撥號方案中的其它context部分. 語法: goto(context,extension,priority) default exten = 123,1,Answer() exten = 123,n,Background(main-menu) e

17、xten = 1,1,Playback(digits/1) exten = 1,n,Goto(default,123,1) exten = 2,1,Playback(digits/2) exten = 2,n,Goto(default,123,1)DialPlan (DialPlan (撥號方案撥號方案) )處理錯誤輸入和超時的一個例子處理錯誤輸入和超時的一個例子: : default exten = 123,1,Answer() exten = 123,n,Background(enter-ext-of-person) exten = 123,n,WaitExten() exten = 1,

18、1,Playback(digits/1) exten = 1,n,Goto(default,123,1) exten = 2,1,Playback(digits/2) exten = 2,n,Goto(default 123,1) exten = 3,1,Playback(digits/3) exten = 3,n,Goto(default,123,1) exten = i,1,Playback(pbx-invalid) exten = i,n,Goto(default,123,1) exten = t,1,Playback(vm-goodbye) exten = t,n,Hangup()Di

19、alPlan (DialPlan (撥號方案撥號方案) )dialdial : 它是Asterisk 很有價值的一功能,當(dāng)來電者使用不同的通信方式時,它可以進行轉(zhuǎn)換并進行呼叫連接,如SIP電話到PSTN呼叫語法: Dial(technology/user:passwordremote_host:port/remote_extension) 例如: default exten = 123,1,Answer() exten = 123,n,Background(enter-ext-of-person) exten = 123,n,WaitExten() exten = 1,1,Dial(Zap/1

20、,10) exten = 1,n,Playback(vm-nobodyavail) exten = 1,n,Hangup() exten = 2,1,Dial(SIP/Jane,10) exten = 2,n,Playback(vm-nobodyavail) exten = 2,n,Hangup() exten = i,1,Playback(pbx-invalid) exten = i,n,Goto(default,123,1) exten = t,1,Playback(vm-goodbye) exten = t,n,Hangup()AGI AGI 原理原理 AGI AGI 即Asterisk

21、 gateway interface 它為外部程序提供了標準的接口來控制Asterisk 的dialplan。 撥號方案中,可以采用各種語言很方便的通過AGI接口寫腳本。腳本和Asterisk之間通過標準的輸入輸出進行交互 標準的輸入輸出人別為: STDIN : 標準輸入,外部腳本程序通過標準的輸入,從 Asterisk接收信息。 STDOUT : 標準輸出, 外部腳本程序通過標準的輸出,發(fā) 送命令到Asterisk。 STDERR : 標準錯誤輸出,外部腳本程序通過標準錯誤輸出調(diào)式信息到Asterisk 控制臺。 一般常用編寫AGI腳本的語言有Perl , python, php 等。AGI

22、 AGI 原理原理AGIAGI腳本執(zhí)行語法:腳本執(zhí)行語法: exten = extension-number,priority, agi, script-name 或exten = extension-number,priority, agi(script-name) 如: exten = 123,1,Answer() exten = 123,2,AGI(agi-test.agi) 執(zhí)行腳本時,分別要滿足下面條件: a , 腳本必須可執(zhí)行,chmod +x script-name b. 腳本放到/var/lib/asterisk/agi-bin目錄下 當(dāng)腳本執(zhí)行時,Asterisk會向腳本發(fā)送

23、各種的信息,可以在做其他事情之前通過標準輸入獲取這些信息,每項數(shù)據(jù)都是一行,發(fā)送完畢Asterisk會發(fā)送一個空行,表示結(jié)束。如果需要這些數(shù)據(jù),就先保存起來,否則不用處理它 內(nèi)容如下: agi_request: agi-test.agi agi_channel: Zap/1-1 agi_language: en agi_type: Zap agi_callerid: agi_context: default agi_extension: 3 agi_priority: 1AGI AGI 原理原理 我們可以看下一個Perl 寫的agi-test.agi部分代碼 #!/usr/bin/perl u

24、se strict; $|=1; # Setup some variables my %AGI; my $tests = 0; my $fail = 0; my $pass = 0; while() 這段代碼是從ASTERISK 獲取相關(guān)信息,并保存到AGI數(shù)組中chomp;last unless length($_);if (/agi_(w+):s+(.*)$/) $AGI$1 = $2; print STDERR AGI Environment Dump:n; foreach my $i (sort keys %AGI) 這段代碼是把上面獲取的信息打印到控制臺上。 print STDERR

25、 - $i = $AGI$in; AGI AGI 原理原理 print STDERR 1. Testing sendfile.; print STREAM FILE hello-world n; /這段代碼是向 asterisk 發(fā)送播放“hello-world”音頻 my $result = ; print STDERR 6. Testing record.; print RECORD FILE testagi gsm 1234 3000n;/錄制通道內(nèi)的聲音,生成文件,直到接收到DTMF確認結(jié)束按鍵,或者超時時間結(jié)束 my $result = ; 當(dāng)在錄音時,用戶按了DTMF 鍵“1”“2

26、”“3”:4“ 或是時間到了3秒,則結(jié)束錄音。AsteriskAsterisk相關(guān)配置文件相關(guān)配置文件 Asterisk相關(guān)配制文件有很多,這里主要介紹三種要用到配制文件分別是 Sip.conf 配置sip帳號信息文件 Extension.conf 撥號方案配制文件 Voicemail.conf 語音郵箱配制文件配置配置AsteriskAsterisk作為作為SIP ProxySIP Proxy1 . 配置Asterisk作為SIP Proxy, 并讓X-Lite注冊上去, 確保能打通電話就要用到 Sip.conf , Extension.conf 文件。 配制分別如下: 在 sip.conf

27、文件中分別添加如下內(nèi)容,其中1498和1499是我預(yù)設(shè)的兩個sip號碼 1498type=friendusername=1498host=dynamiccanreinvite=yesdtmfmode=rfc2833 1499type=friendusername=1499host=dynamiccanreinvite=yesdtmfmode=rfc2833配置配置AsteriskAsterisk作為作為SIP ProxySIP Proxy2.在 extensions.conf的default段修改成如下: defaultexten = 1498,1,dial(sip/1498,10)exten

28、 = 1499,1, dial(sip/1499,10)exten = _1xxx,2,hangup 啟動asteriskasterisk -vvvvvvvvvvvvvvvc測試通話: 分別兩臺機器上分別啟動一個softphone,配置domain和sip proxy地址為安裝asterisk服務(wù)器IP地址。電話號碼分別為1498和1499。這時我們應(yīng)該看到這兩個phone可以注冊到astersik上面了。相互呼叫應(yīng)該可以成功。配置Voice Mail 1. 配置Voice Mail 要用到Voicemail.conf 配制文件。 首先在Voicemail.conf中創(chuàng)建郵箱: 語法為:mai

29、lbox = password,name,email,pager_email,options Mailbox:郵箱號碼 Password:郵箱密碼 Name: 用戶名 Email: email地址 其它選項可無 在Voicemail.conf 的default 段下添加如下內(nèi)容: 101 = 123,zhuyangao , 102 = 123,jane ,撥打電話時,如果無人接聽則調(diào)用語音郵箱留言,調(diào)用命令為:voicemail()打開extension.conf 配制文件,修改default如下: exten = 1499,1,dial(sip/1499,5) exten = 1498,1,

30、dial(sip/1498,5) exten=1499,2,Voicemail(101default) exten=1498,2,Voicemail(102default) exten = 1000,1, 1,VoiceMailMain() /撥打號碼1000,訪問語音郵箱 exten=_1xxx,3,hangup()保存配制文件后,重啟asterisk ,注冊softphone 成功后進行呼叫對方,對方不接則轉(zhuǎn)到語音郵箱留言配制簡單IVR 1.配制IVR ,主要修改entension.conf salesexten = s,1,Background(demo-thanks)exten = 0

31、,1,Goto,from-sip|100|1exten = 1,1,Goto,Menu|s|1Menuexten = s,1,Background(demo-congrats) exten = s ,n,WaitExten()exten = 1,1,Goto,sales|s|1exten = 2,1,Goto,options|s|1exten = i,1,Goto, from-sip|100|1 exten = t,1,hangup() from-sipexten = 100,1,Answerexten = 100,2,Goto,Menu|s|1 default exten = 999,1,G

32、oto,from-sip|100|1 用注冊成功的軟電話撥打999號碼,則進到IVR流程。一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當(dāng)前天氣情況腳本,實現(xiàn)語音報告當(dāng)前天氣情況. . 腳本名為:agi-weather.agi,內(nèi)容如下:#!/usr/local/bin/php -q$value) fwrite(STDERR,- $key = $valuen);fflush(STDERR);一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當(dāng)前天氣情況腳本,實現(xiàn)語音報告當(dāng)前天氣情況. .#retrieve this web page$weatherPage=file_get

33、_contentsfile_get_contents($weatherURL);fwrite(STDERR,$weatherPage n);fwrite(STDERR,test test test n);fflush(STDERR);#grab temperature in Fahrenheitif (preg_match(/(0-9+)/i,$weatherPage,$matches)$currentTemp=$matches1;一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當(dāng)前天氣情況腳本,實現(xiàn)語音報告當(dāng)前天氣情況. .#grab wind directionif (preg_

34、match(/North/i,$weatherPage)$currentWindDirection=northerly;elseif (preg_match(/South/i,$weatherPage)$currentWindDirection=southerly;elseif (preg_match(/East/i,$weatherPage)$currentWindDirection=easterly;elseif (preg_match(/Southeast/i,$weatherPage)$currentWindDirection=southeasterly; 。略一個基一個基PHPPHP

35、的的AGIAGI腳本,實現(xiàn)語音報告當(dāng)前天氣情況腳本,實現(xiàn)語音報告當(dāng)前天氣情況. .#grab wind speedif (preg_match(/(0-9.+)/i,$weatherPage,$matches)$currentWindSpeed = $matches1;一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當(dāng)前天氣情況腳本,實現(xiàn)語音報告當(dāng)前天氣情況. .function checkresult($res)trim($res);if (preg_match(/200/,$res) if (! preg_match(/result=(-?d+)/,$res,$matches)

36、fwrite(STDERR,FAIL ($res)n); fflush(STDERR); return 0; else fwrite(STDERR,PASS (.$matches1.)n); fflush(STDERR); return $matches1; else fwrite(STDERR,FAIL (unexpected result $res)n); fflush(STDERR); return -1;一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當(dāng)前天氣情況腳本,實現(xiàn)語音報告當(dāng)前天氣情況# tell the caller the current conditions i

37、f ($currentTemp)fwrite(STDOUT,STREAM FILE beep n);fflush(STDOUT);$result = trim(fgets(STDIN,4096);checkresult($result);fwrite(STDOUT,STREAM FILE is n);fflush(STDOUT);$result = trim(fgets(STDIN,4096);checkresult($result);fwrite(STDOUT,SAY NUMBER $currentTemp n);fflush(STDOUT);$result = trim(fgets(STDIN,4096);checkresult($result);fwri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論