日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

asterisk基础知识

發(fā)布時間:2023/12/13 综合教程 41 生活家
生活随笔 收集整理的這篇文章主要介紹了 asterisk基础知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

vim~/.bashrc

運行調(diào)試asterisk
1. 運行調(diào)試常用命令
./asterisk & 在后臺啟動asterisk
./asterisk –vvvc 啟動asterisk并盡量多的在控制臺顯示調(diào)試信息
./asterisk –r 連接asterisk控制臺
set verbose 9999 設(shè)置打印詳細(xì)信息

2.asterisk控制臺下常用命令CLI

sip reload 重新加載sip配置信息
sip set debug設(shè)置顯示更多的sip信息
sip set debug off關(guān)閉顯示更多的sip信息
sip show channels 顯示所有活動的SIP通道
sip show peers 顯示所有已定義的SIP peer


dialplan show 顯示撥號方案
dialplan reload重新加載撥打方案

stop gracefully 優(yōu)雅地停止asterisk
stop now 立即停止運行asterisk

module show 顯示所有已加載模塊
module loadcdr_radius.so加載模塊cdr_radius.so
module reload cdr_radius.so 重新加載模塊cdr_radius.so
module unload cdr_radius.so 卸載模塊cdr_radius.so

core show applications 顯示所有的應(yīng)用,比如Dial, Radius, Hangup,Answer等
core show channels 顯示所有的通話頻道
core show codecs 顯示所有支持的編解碼器
core show functions 顯示所有的功能函數(shù)
在asterisk源碼目錄下運行makemenuselect可以進(jìn)入模塊選擇頁面,在里面可以選擇和去除一些模塊。
看完這些目錄之后,對其大體的功能也可能會有點認(rèn)識,還是從啟動服務(wù)器還是聊起。啟動服務(wù)器方法很多,我們按照手冊中的描述選取一種
Asterisk –cvvvv具體參數(shù)含義請參考手冊

也可以通過運行 /usr/sbin/safe_asterisk 來運行。
我們下文的描述就會基于這個簡單的拓?fù)湔归_討論,這兒的tel都是sip電話,我們假定tel1號碼為808,tel2號碼為830,現(xiàn)在的簡單需求就是我808能夠打通830,實現(xiàn)雙向通話。開始配置前,先了解主要配置文件的作用。
/etc/asterisk/asterisk.conf  主要配置文件,
/etc/zaptel.conf  硬件接口的基本層.    修改這個配置文件要用modprobe裝載LinuxKernel使用模塊.
/etc/asterisk/zapata.conf  為硬件配置Asterisk的接口.
/etc/asterisk/extensions.conf  撥號方案.
/etc/asterisk/sip.conf  SIP協(xié)議配置文件
/etc/asterisk/iax.conf  呼入和呼出IAX通道
/etc/asterisk/extensions.conf  撥號方案配置文件
/etc/asterisk/moduprobe.conf  加載模塊配置文件


撥號方案語法
  
Asterisk的撥號方案在文件extensions.conf中定義(/etc/asterisk/extensions.con)
extensions.conf(四部分:context,extension,priorities,application)
context:用于對extensions組命名,把撥號方案的不同部分進(jìn)行分離,免得交織在一起.
表示方法是把名字放在[]的中間,名字只能用a~z,A~Z,0~9,以及連字號和下劃線組成(空格不在允許的字符里面,context中不要使用空格).如:[context1],[incoming],[default];所有放在context定義的之后的指令都是這個context一部分,直到下一個context定義的開始.
context的一個重要用途就是加強(qiáng)安全性.如果沒有仔細(xì)設(shè)計撥號方案,可能會造成別人盜用你的系統(tǒng)的不良后果.
extensions:extensions是asterisk要執(zhí)行的指令,由來電或通道上所撥數(shù)字來觸發(fā).可以定義電話分機(jī)  
extension的語法是單詞exten后面跟著一個由等號和大于號組成的箭頭,如:exten => extension的名字
一個完整的extension由三部分組成:

extensions的名字或號碼
priority(每個extension可以有多個步驟,步驟的編號稱作priority)

應(yīng)用(或者命令),針對呼叫完成一些動作
這三個部分用英文逗號分開,如:

exten => name,priority,application()

priorities:每個extension都可以有幾個步驟,稱作priorities。如:

exten=>50001,1,Answer()  #編號為1的priority,執(zhí)行接聽電話
exten=>50001,2,Hangup()  #編號為2的priority,然后掛電話

必須確保priority從1開始并且連續(xù)的編號
application:動作,比如:播放聲音,接受音頻撥號輸入或者掛斷電話等.
Application
Answer(),Playback()和Hangup()應(yīng)用
Answer()應(yīng)用于接聽正在響鈴?fù)ǖ?它不需要任何參數(shù).
Playback()應(yīng)用在通道上播放事先錄制好的語音文件.指定一個文件名(不帶擴(kuò)展名),可以使用絕對路徑與相對路徑.
  Hangup()應(yīng)用在于掛斷一個正在活動的通道.
Background(),Goto()應(yīng)用
  Background()它也播放事先錄制好的語音文件,但它等待按鍵,然后執(zhí)行對應(yīng)extension.
    防止Background()后超出按鍵范圍,使用i來解決問題.
    防止Background長時間沒有選擇,使用t來決解問題.
  Goto()應(yīng)用使得在撥號方案的不同部分有序的轉(zhuǎn)移非常容易.
    Goto()應(yīng)用有三個參量分別是context,extension,和priority.即Goto(context,extension,priority)
Dial()應(yīng)用
  Dial()有4個參量,
    第一個是:呼叫的被叫地(傳輸技術(shù)/遠(yuǎn)地資源)如:SIP/50000或Zap/1.可以同時撥打多個通道如:

exten => 601,1,Dial(Zap/1&SIP/50000&IAX/60000)

    第二個是:超時,單位"秒".給定超時參量Dial會一直對被叫地進(jìn)行呼叫,直到超時后才放棄,如果沒有給定,將直到接聽或主叫掛機(jī),如果呼叫在超時前接聽,通道就被橋接,撥號完成
  補(bǔ)充:如果超時后被叫地沒有應(yīng)答,則會繼續(xù)Dial()的extension下一個priority.如果被叫地通道忙,Dial()將轉(zhuǎn)到priority n+101(n是Dial()被調(diào)用的priority),如果存在的話,將能夠處理被叫地忙的方式接叫未接電話.
    第三個是:可選擇參量,它會可以影響到Dial()的行為,如:

exten => 601,1,Dial(SIP/50000,30,Ttwr)

  其中T表示允許主叫用戶按"#"轉(zhuǎn)接呼叫;t表示允許被叫用戶按"#"轉(zhuǎn)接呼叫;r表示為被叫用戶產(chǎn)生振鈴聲;w用戶按"*"鍵開始錄音.
    最后一個是:URL參量.如:

exten => 601,1,Dial()
exten => 602,1,Dial(Zap/1/5732381)

任何參量都可以為空如:

exten => 601,1,Dial(SIP/60000,,T)

exten => 601,1,Dial(SIP/60000)

綜合上面舉個例子:

[test]
exten => s,1,Answer()
exten => s,2,Background(enter-ext-of-person)
exten => 601,1,Dial(Zap/1,30,Ttrw)
exten => 601,2,Playback(vm-nobodyavail)
exten => 601,3,Hangup()
exten => 601,102,Playback(tt-allbusy)
exten => 601,103,Hangup()
exten => 602,1,Dial(SIP/50000,30,Ttrw)
exten => 602,2,Playback(vm-nobodyavail)
exten => 602,3,Hangup()
exten => 602,102,Playback(tt-allbusy)
exten => 602,103,Hangup( )
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(test,s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup()

Extension,不能多于80個字符,也不能少于1個字符(601/602)
------2007-01-05-修改
變量
在撥號方案中使用變量可以減少打字、增加清晰度,也有助于在撥號方案中加入邏輯.
這里的變量有全局變量,通道變量和環(huán)境變量.
全局變量:
  全局變量應(yīng)該在extensions.conf文件的開始利用[globals]這個context定義或利用 SetGlobalVar()應(yīng)用.如:

[globals]
80000=Zap/1

[internal]
exten => 123,1,SetGlobalVar(80000=Zap/1)

通道變量
  通道變量與特定的呼叫相關(guān)的變量,通道變量只能在當(dāng)前呼叫存在其間定義,并只能用于參與該呼叫的通道.通道變量使用 Set()應(yīng)用來設(shè)置.如:

exten => 601,1,Set(80000=Zap/1)

環(huán)境變量
  環(huán)境變量是一種在 Asterisk 中訪問操作系統(tǒng)環(huán)境變量的方法.這些變量以${ENV(var)}形式引用,其中的 var 是所要引用的操作系統(tǒng)環(huán)境變量.
  綜合上面舉例:

[globals]
PSTN=Zap/1
TEST=SIP/80000
[test]
exten => s,1,Answer()
exten => s,2,Background(enter-ext-of-person)
exten => 101,1,Dial(${PSTN},10)
exten => 101,2,Playback(vm-nobodyavail)
exten => 101,3,Hangup()
exten => 101,102,Playback(tt-allbusy)
exten => 101,103,Hangup()
exten => 102,1,Dial(${TEST},10)
exten => 102,2,Playback(vm-nobodyavail)
exten => 102,3,Hangup()
exten => 102,102,Playback(tt-allbusy)
exten => 102,103,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(incoming,s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup()
[default]
exten => 101,1,Dial(${PSTN},,r)
exten => 102,1,Dial(${TEST},,r)

模式匹配
模式匹配
  使用模式及匹配是用不同的字母和符號來代表可能要匹配的數(shù)字.模式總是用一個下劃線 (_) 開始,它告訴Asterisk 要做模式匹配,這不是一個 extension 名字.(這意味著不能使用下劃線作為 extension 名字的開始字符.)
模式匹配語法
  在下劃線之后,可以使用一個或者多個下面列出來的字符:

X:匹配 0-9 的任何數(shù)字;
Z:匹配 1-9 的任何數(shù)字;
N:匹配 2-9 的任何數(shù)字;
.(句號)通配符,匹配一個或多個字符;
[15-7]:匹配1,5,6,7;

  使用${EXTEN}通道變量:Asterisk會把通道變量${EXTEN}設(shè)置為所撥的數(shù)字.通過sayDigits()檢測撥到號碼內(nèi)容如:

exten => _9XXXXXXX,1,SayDigits(${EXTEN})
;SayDigits()應(yīng)用會把所撥的8位extension讀出來
exten => _9XXXXXXX,1,SayDigits(${EXTEN:1})
;只讀出來后7位數(shù),其中"1"表示不撥前面1位數(shù)
exten => _9XXXXXXX,1,SayDigits(${EXTEN:-1})
;只讀出來最后1位,其中"1"表示只撥出最后1位數(shù)

去話撥號(PSTN)
舉例:按"9"后撥打外線,去電時,去除"9";加放"ignorepat => 9"是為了使按完"9"后還可以聽到撥號音;加入"Congestion()"應(yīng)用是掛機(jī)或忙的時候播放快忙音(擁擠聲音).

---本地去話撥號---
[outbound-local]
ignorepat => 9
exten => _9NXXXXXX,1,Dial(Zap/1/${EXTEN:1})
exten => _9NXXXXXX,2,Congestion()
exten => _9NXXXXXX,102,Congestion()
---再加入緊急電話撥號---
exten => 9119,1,Dial(Zap/1/119)
exten => 119,1,Dial(Zap/1/119)
exten => 9110,1,Dial(Zap/1/110)
exten => 110,1,Dial(Zap/1/110)
---長途電話撥號---
[outbound-long]
exten => _90NXXNXXXXXX,1,Dial(Zap/1/${EXTEN:1})
exten => _90NXXNXXXXXX,2,Congestion()
exten => _90NXXNXXXXXX,102,Congestion()

Includes
Asterisk通過Includes實現(xiàn)在一個context中使用另一個context.格式:includes =>context

[internal]
include => outbound-local
include => outbound-long
exten => _80XXX,1,Dial(SIP/${EXTEN},30,r)
exten => _80XXX,2,Playback(vm-nobodyavail)
exten => _80XXX,3,Hangup()
exten => _80XXX,102,Playback(tt-allbusy)
exten => _80XXX,103,Hangup()

表達(dá)式和可變操作
表達(dá)式
  表達(dá)式是變量,運算符和數(shù)值的聯(lián)合,當(dāng)你把它們組合到一起就會得到一個表達(dá)式結(jié)果.在Asterisk 中,表達(dá)式總是以$符合作為開始,以方括號“[]”來擴(kuò)住表達(dá)式.如:

$[expression]
$[${COUNT} + 1]
$[${COUNT} / 2]
;引用變量,必須把這個變量名用花括號"{}"括起來,而且在前面加上美元符號"$" 標(biāo)示出來

運算符
  布爾型運算符
  expr1 | expr2("|"或運算):如果expr1的值是真值,那么運算符將賦expr1的值,否則將賦expr2的值.
  expr1& expr2("&"與運算):如果兩個表達(dá)式的值都為true,運算符將賦值為expr1,否則賦值為0.
  expr1{=,>,>=,<,<=,|=}expr2:如果自變量都是整數(shù),這些運算符將得到一個整數(shù)的比較結(jié)果;否則,它們將得到字符串的結(jié)果.如果給定的關(guān)系是正確地,這個結(jié)果是1,否則就是0.
  數(shù)學(xué)運算符
  expr1{+, -}expr2:運算符能得到整數(shù)自變量的加法或者減法地結(jié)果.
  expr1{*,/,%}expr2:運算符能分別得到整數(shù)自變量的乘法,除法或是余數(shù)的結(jié)果.
  正則表達(dá)式運算符
  expr1:expr2:運算符匹配 expr2到expr1,這里的expr2必須是一個正則表達(dá)式.
  ***Asterisk 的分析程序非常簡單,因此在你輸入時,在運算符和其他數(shù)值之間至少需要一個空格.
撥號方案函數(shù)
  撥號方案函數(shù)可以使你增加更多的功能到你的表達(dá)式中.
語法
  基本語法:FUNCTION_NAME(argument).如果要引用函數(shù)的值,和引用變量的值一樣,用美元符號“ $” 加上花括號“{}” 括起函數(shù)表達(dá)式.如:

${FUNCTION_NAME(argument)}

函數(shù)也可以嵌套封裝其他的函數(shù),如:

${FUNCTION_NAME(${FUNCTION_NAME(argument)})}

撥號方案函數(shù)
  函數(shù)常常用來連接set()應(yīng)用,來取得或者賦值一個變量的值.舉個例子,計算一下一個字符串的長度,并讀出這個長度;

exten=>123,1,set(TEST=example)      ;賦值example變量給TEST
exten=>123,2,saynumber(${LEN(${TEST})})  ;計算出變量TEST長度,并讀出長度數(shù)
結(jié)果是:7

  如果我們要設(shè)置一個動態(tài)通道的超時,應(yīng)該用TIMEOUT()函數(shù).這個函數(shù)可以接受以下三個中的一個做為自變量,分別是absolute,digit和response.他們對應(yīng)的應(yīng)用是AbsoluteTimeout(),DigitTimeout()和ResponseTimeout().用 timeout()函數(shù),設(shè)置數(shù)字的超時,我們可以set()函數(shù), 如:

exten=>s,1,set(TIMEOUT(digit)=30)

  ***這個函數(shù)中沒有${}.它和給一個自變量賦值一樣,我們就賦值給一個函數(shù),是不使用${}封裝的.





很多東西都是初學(xué)時遇到的問題,當(dāng)時記錄在印象筆記。

現(xiàn)在粘貼復(fù)制過來,如有侵權(quán),私信我,盡快刪除

總結(jié)

以上是生活随笔為你收集整理的asterisk基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。