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

下載本文檔

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

文檔簡介

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

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

3、以使用一臺老式的奔騰3計算機,讓你的機構看起來就同世界上的大企業(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能做什么? 附有目錄的語音郵件服務 電話會議、互動語音回應和電話排序 通路呼叫 呼叫方ID服務 ADSI 與硬件VOIP 比較 Asterisk具有硬件VOIP 的常用功能。 Asterisk能夠支持多媒體,具有可編

5、程功能。 Asterisk需要的帶寬,一般為:32KB/ 線路。也就是說每支持一條線路,只需要增32KB 的帶寬,但是需要網(wǎng)絡質量良好。 Asterisk可支持成千的客戶端(需要板卡與帶寬支持)1從官方網(wǎng)站下載 asterisk-1.2.26.tar包,拷備到LINUX 下的用戶目錄.2 用tar xzvf asterisk-1.2.26.tar 解壓到當目錄.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 結構結構Asterisk結構結構: 主要有PBX的核心、 channel驅動(SIP,ZAP,IAX2等)、Dialplan核心、數(shù)字信號處理(dsp)、相關協(xié)(SIP,MGCP,H.323,IAX2,rtp等)實現(xiàn)、各種音視頻編解碼實現(xiàn)、asterisk的數(shù)據(jù)庫管理接口等相關模塊共同構成一個Asterisk整體 應用框架分組交換網(wǎng)電路交換網(wǎng)DSP相相關關通通

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

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

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

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

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

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

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

14、n將不會匹配這個撥入的號碼。當執(zhí)行完優(yōu)先值為1的命令之后,Asterisk將把priority的值增加到2,除非命令本身決定下一個要執(zhí)行的優(yōu)先值。如果extension中沒有定義下一個priority,Asterisk將完成對這個 extension的處理。DialPlan (DialPlan (撥號方案撥號方案) )ApplicationsApplications: 應用是指在當前的通道上執(zhí)行一系列特定動作,如播放語音,接受呼入,撥打電話,掛機等動作。 具體應用有: 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 很有價值的一功能,當來電者使用不同的通信方式時,它可以進行轉換并進行呼叫連接,如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目錄下 當腳本執(zhí)行時,Asterisk會向腳本發(fā)送

23、各種的信息,可以在做其他事情之前通過標準輸入獲取這些信息,每項數(shù)據(jù)都是一行,發(fā)送完畢Asterisk會發(fā)送一個空行,表示結束。如果需要這些數(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 獲取相關信息,并保存到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確認結束按鍵,或者超時時間結束 my $result = ; 當在錄音時,用戶按了DTMF 鍵“1”“2

26、”“3”:4“ 或是時間到了3秒,則結束錄音。AsteriskAsterisk相關配置文件相關配置文件 Asterisk相關配制文件有很多,這里主要介紹三種要用到配制文件分別是 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是我預設的兩個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服務器IP地址。電話號碼分別為1498和1499。這時我們應該看到這兩個phone可以注冊到astersik上面了。相互呼叫應該可以成功。配置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 成功后進行呼叫對方,對方不接則轉到語音郵箱留言配制簡單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)語音報告當前天氣情況腳本,實現(xiàn)語音報告當前天氣情況. . 腳本名為:agi-weather.agi,內(nèi)容如下:#!/usr/local/bin/php -q$value) fwrite(STDERR,- $key = $valuen);fflush(STDERR);一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當前天氣情況腳本,實現(xiàn)語音報告當前天氣情況. .#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)語音報告當前天氣情況腳本,實現(xiàn)語音報告當前天氣情況. .#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)語音報告當前天氣情況腳本,實現(xiàn)語音報告當前天氣情況. .#grab wind speedif (preg_match(/(0-9.+)/i,$weatherPage,$matches)$currentWindSpeed = $matches1;一個基一個基PHPPHP的的AGIAGI腳本,實現(xiàn)語音報告當前天氣情況腳本,實現(xiàn)語音報告當前天氣情況. .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)語音報告當前天氣情況腳本,實現(xiàn)語音報告當前天氣情況# 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)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論