Asterisk權(quán)威指南/第二章 Asterisk架構(gòu)

Asterisk和其他傳統(tǒng)的PBX完全不同漓柑,因為Asterisk的撥號計劃以同樣的方式處理所有的入局信道(incoming channels)夸赫。

傳統(tǒng)的PBX在邏輯上區(qū)分工作站信道(連接電話機)和電話局信道(連接到外部世界)碱茁。這意味著粒褒,你不可能無縫地在一個工作站端口配置一個外部網(wǎng)關(guān)幔荒。同樣朝抖,傳統(tǒng)PBX也很難實現(xiàn)對離站(off-site啥箭,不在座位上或外出辦事)資源的訪問,比如前臺如果外出辦事就什么事都做不了治宣,因為她哪怕能打電話回公司急侥,也是不能訪問內(nèi)部資源的。

Asterisk在內(nèi)部不區(qū)分工作站信道和電話局信道侮邀,而是一律統(tǒng)稱信道坏怪。有很多種信道類型(驅(qū)動不同),但Asterisk撥號計劃以不加區(qū)別(接口一致)的方式處理這些信道绊茧,也就是說铝宵,一個內(nèi)部用戶可能位于電話局端口,但撥號計劃可以把他當(dāng)成在工作站端口一樣。如果你沒有用過傳統(tǒng)PBX鹏秋,可能還體會不到Asterisk這種方式的強大和靈活尊蚁。下圖顯示了兩種架構(gòu)的區(qū)別。

目錄

1. 模塊
    1.1 應(yīng)用程序
    1.2 橋接模塊
    1.3 電話詳單記錄模塊
    1.4 信道事件日志模塊
    1.5 信道驅(qū)動
    1.6 編碼解碼器
    1.7 格式解釋器
    1.8 撥號計劃函數(shù)
    1.9 PBX模塊
    1.10 資源模塊
    1.11 附加模塊
    1.12 測試模塊
2. 文件結(jié)構(gòu)
    2.1 配置文件
    2.2 模塊
    2.3 資源庫
    2.4 spool
    2.5 日志
3. 撥號計劃
4. 硬件
5. Asterisk版本
    5.1 以前的版本方案
    5.2 現(xiàn)在的版本方案
6. 結(jié)束語

模塊

Asterisk是基于模塊構(gòu)建的侣夷。一個模塊提供特定的功能横朋,是一個可裝載的組件,比如信道驅(qū)動(chan_sip.so)百拓,或者一項可以連接到外部技術(shù)的資源(func_odbc.so)琴锭。Asterisk按照/etc/asterisk/modules.conf配置文件裝載模塊。后面我們會討論各個模塊的使用衙传。這里我們只會介紹模塊的概念决帖,以及模塊的各種類型。

運行一個不加載任何模塊的Asterisk也是有可能的蓖捶,盡管它什么都做不了地回。你只有理解了Asterisk模塊化的特點,才能充分理解Asterisk的架構(gòu)腺阳。

Note:你可以啟動一個沒有加載任何模塊的Asterisk落君,然后手工在控制臺一個個地添加;這種方法一般用于性能調(diào)優(yōu)亭引,可以保證僅加載所需要的模塊绎速。

Asterisk模塊類型包括:

- 應(yīng)用程序(即撥號計劃中的命令)
- 橋接模塊
- 呼叫詳單記錄模塊
- 信道事件日志模塊
- 信道驅(qū)動
- 編碼解碼器
- 格式解釋器
- 撥號計劃函數(shù)
- PBX模塊
- 資源模塊
- 附加模塊
- 測試模塊

接下來我們會列出分屬各個類型的所有模塊,他們的用途焙蚓,以及我們所認(rèn)為的受歡迎程度和重要程度(有一些很常用纹冤,但有一些不太有用,僅僅是為了兼容而保留)购公。這些模塊的細(xì)節(jié)會在本書中陸續(xù)介紹萌京,根據(jù)各自的情況,有些會被全面的討論宏浩,有些則根本不會涉及知残。
下面這些術(shù)語反映了我們對各個模塊的看法:
- 不重要

這個模塊是個老古董。如果你要使用它比庄,就不要指望能在社區(qū)中得到很好的支持求妹。

- 不可靠

新設(shè)計的或者試驗性的模塊,不要用于生產(chǎn)環(huán)境佳窑。

- 很有用

很時新制恍,有人維護(hù),受歡迎而且被推薦神凑。

- 可以用

能夠用净神,但用得不多,可能不完整。不推薦鹃唯。

- 不好說

新出現(xiàn)的模塊爱榕,時間短,完整性和受歡迎程度都不太好說俯渤。

- 已廢棄

已經(jīng)被更好的模塊取代了呆细。

- 有局限

有局限性,不能滿足要求八匠。

- 很重要

必須的。   

應(yīng)用程序

應(yīng)用程序用于撥號計劃中趴酣,能夠處理呼叫流程梨树。比如Dial()就是一個很重要的應(yīng)用程序,負(fù)責(zé)建立出局連接岖寞。

名稱 用途 評價
app_adsiprog 給兼容模擬電話加載模擬顯示服務(wù)接口(ADSI)腳本 不重要
app_alarmreceiver 支持接受警報設(shè)備的報告 不重要
app_amd 檢測電話答錄機 不穩(wěn)定
app_authenticate 比較雙音多頻(DTMF)輸入和一個給定的字符串(通常是密碼) 很有用
app_cdr 寫CDR記錄 很有用
app_celgenuserevent 為CEL產(chǎn)生用戶自定義事件 不好說
app_chanisavail 檢測信道的狀態(tài) 不穩(wěn)定
app_channelredirect 強制另一個信道進(jìn)入撥號計劃的另一個地方 很有用
app_chanspy 允許一個信道收聽另一個信道 很有用
app_confbridge 電話會議(新版) 不好說
app_controlplayback 播放提示抡四,并提供快進(jìn)和倒帶功能 很有用
app_dahdibarge 允許在DAHDI信道中插話(已廢棄,見app_chanspy) 已廢棄
app_dahdiras 在DAHDI信道上建立RAS服務(wù)器 不重要
app_db 訪問Asterisk內(nèi)置的伯克利數(shù)據(jù)庫(已廢棄仗谆,見func_db) 已廢棄
app_dial 把信道連接起來(例如指巡,打電話) 很重要
app_dictate 播放一段錄音,并提供開始/停止功能 很有用
app_directed_pickup 應(yīng)答另外一部分機上的呼叫 很有用
app_directory 給出voicemail.conf中的姓名列表 很有用
app_disa 提供撥號音并接受DTMF輸入 很有用
app_dumpchan 在Asterisk控制臺打印信道變量 很有用
app_echo 回放從信道中收到的語音 很有用
app_exec 包含Exec(),TryExec()和ExecIf()根據(jù)條件執(zhí)行應(yīng)用程序 很有用
app_externalivr 類似于AGI隶垮,但是異步的 很有用
app_fax 提供SendFax()和ReceiveFax() 很有用
app_festival “文本-轉(zhuǎn)-語音”引擎 可以用
app_flash 在信道上執(zhí)行一次瞬間掛機 很有用
app_followme 根據(jù)followme.conf文件執(zhí)行找到我/跟隨我功能 很有用
app_forkcdr 在當(dāng)前呼叫上開始一條新的CDR記錄 可以用
app_getcpeid 獲得ADSI CPE ID 不重要
app_ices 把音頻發(fā)送到一個icecast服務(wù)器 可以用
app_image 向可以支持的設(shè)備上傳輸圖像 有局限
app_ivrdemo 開發(fā)者的示例應(yīng)用程序 不重要
app_jack 使用JACK音頻連接工具包共享音頻 很有用
app_macro 觸發(fā)撥號計劃宏(已廢棄藻雪,見GoSub()) 已廢棄
app_meetme 多方會議 很有用
app_milliwatt 產(chǎn)生1004赫茲的音頻,以測試模擬電路 很有用
app_minivm 提供基本的函數(shù)狸吞,使得你可以構(gòu)造自己的語音信箱 可以用
app_mixmonitor 兩頭錄音勉耀,然后合并 很有用
app_morsecode 產(chǎn)生莫爾斯電碼 可以用
app_mp3 用mpg123播放mp3 不重要
app_nbscat 獲得NBS音頻 不重要
app_originate 允許發(fā)起一次呼叫 很有用
app_osplookup 執(zhí)行OSP查找 可以用
app_page 尋呼 很有用
app_parkandannounce 自動播報保持的電話 可以用
app_playback 播放音頻文件,不接受輸入 很有用
app_playtones 播放按鍵音 很有用
app_privacy 如果沒有收到CallerID蹋偏,就要求輸入用戶號碼 不重要
app_queue 提供自動呼叫分配 很有用
app_read 要求用戶輸入便斥,并把輸入存入變量 很有用
app_readexten 要求用戶輸入,并把當(dāng)前呼叫轉(zhuǎn)移到指定分機和上下文 可以用
app_readfile 把文件內(nèi)容存入一個信道變量(已廢棄威始,見func_env中的FILE()) 已廢棄
app_record 把收到的音頻存入文件 很有用
app_rpt 使用聲卡 有局限
app_sayunixtime 已指定的格式播放時間 很有用
app_senddtmf 向呼叫者傳輸DTMF音頻 很有用
app_sendtext 向兼容的信道發(fā)送文本 不重要
app_setcallerid 在信道上設(shè)置CallerID(已廢棄枢纠,見func_callerid) 已廢棄
app_skel 開發(fā)者的示例應(yīng)用程序 很有用
app_sms 在支持的地區(qū)發(fā)送SMS消息 有局限
app_softhangup 請求關(guān)閉信道 很有用
app_speech_utils 語音識別 很有用
app_stack 提供GoSub()等堆棧相關(guān)的操作 很重要
app_system 執(zhí)行操作系統(tǒng)命令 很有用
app_talkdetect 類似于app_background,但允許收到音頻后中斷播放 很有用
app_test C/S測試應(yīng)用程序 可以用
app_transfer 在當(dāng)前信道上執(zhí)行轉(zhuǎn)移 很有用
app_url 向被呼叫信道傳遞URI 有局限
app_userevent 在AMI中產(chǎn)生一個定制事件 很有用
app_verbose 在CLI中產(chǎn)生一個定制時間 很有用
app_voicemail 提供語音信箱功能 很重要
app_waitforring (TODO:不明白) 不重要
app_waitforsilence 包括WaitForSilent()和WaitForNoise()黎棠;監(jiān)聽入局信道晋渺,有超時限制 很有用
app_waituntil 等待一個指定的Linux時間(從1970第一秒開始的計數(shù)值)到來 很有用
app_while 包括While(),EndWhile()等葫掉,用于循環(huán) 很有用
app_zapateller 播放特殊音調(diào)些举,以阻止電話推銷者 可以用

橋接模塊

橋接模塊是Asterisk 1.8的新功能;他們以新的方式執(zhí)行信道之間的橋接俭厚。他們每一個都提供不同的特性户魏,用于不同的橋接需求。這些模塊只用于app_confbridge。

名稱 用途 評價
bridge_builtin_features 當(dāng)使用內(nèi)置用戶特性(在features.conf中定義)時叼丑,執(zhí)行橋接 不好說
bridge_multiplexed 執(zhí)行復(fù)雜的多路轉(zhuǎn)發(fā)关翎,用于大型會議室 不好說
bridge_simple 執(zhí)行簡單的“信道-到-信道”橋接 不好說
bridge_softmix 執(zhí)行簡單的多路轉(zhuǎn)發(fā),用于大型會議室(TODO:不明白和bridge_multiplexed的區(qū)別) 不好說

電話詳單記錄模塊

CDR模塊是為了讓各種形式的話單記錄更方便鸠信。你可以把CDR存入文件纵寝、數(shù)據(jù)庫、RADIUS星立、或syslog爽茴。

注:CDR不是為了計費而設(shè)計的。計費功能應(yīng)該使用CEL绰垂。

名稱 用途 評價
cdr_adaptive_odbc 通過ODBC寫CDR室奏,允許添加自定義字段 很有用
cdr_csv 把CDR寫入CSV文件 可以用
cdr_custom 和cdr_csv一樣,但允許添加自定義字段 很有用
cdr_manager 把CDR輸出到AMI接口 很有用
cdr_odbc 通過ODBC寫CDR 可以用
cdr_pgsql 把CDR寫到PostgreSQL 很有用
cdr_radius 把CDR寫到RADIUS 可以用
cdr_sqlite 把CDR寫到sqlite2數(shù)據(jù)庫(已廢棄劲装,見cdr_sqlite3_custom) 已廢棄
cdr_sqlite3_custom 把CDR寫到sqlite3數(shù)據(jù)庫胧沫,允許添加自定義字段 很有用
cdr_syslog 把CDR寫到syslog 很有用
cdr_tds 把CDR寫到Microsoft SQL或Sybase數(shù)據(jù)庫,需要老版tds 可以用

Web接口中會有一些和CDR相關(guān)的報告功能占业。

信道事件日志模塊

信道事件日志可以完整記錄所有的呼叫活動绒怨。這也意味著你需要更小心地規(guī)劃擬撥號計劃,畢竟它不可能自動開始工作谦疾。Asterisk的CEL模塊如下:

名稱 用途 評價
cel_custom 寫到磁盤文件 很有用
cel_manager 寫到AMI 很有用
cel_odbc 寫到ODBC 很有用
cel_pgsql 寫到PostgreSQL 很有用
cel_radius 寫到RADIUS 可以用
cel_sqlite3_custom 寫到sqlite3 很有用
cel_tds 寫到Microsoft SQL或Sybase南蹂,需要老版tds 可以用

信道驅(qū)動

沒有信道驅(qū)動,Asterisk就不可能建立呼叫餐蔬。每種協(xié)議或信道類型都有自己特定的信道驅(qū)動碎紊。信道模塊可以看做是通往Asterisk內(nèi)核的網(wǎng)管。Asterisk的信道驅(qū)動如下:

名稱 用途 評價
chan_agent 為Queue()提供坐席信道 很有用
chan_alsa 提供到高級Linux聲音架構(gòu)(ALSA)的連接 很有用
chan_bridge 僅供ConfBridge()內(nèi)部使用 很重要
chan_console 提供到portaudio的連接 不好說
chan_dahdi 提供到DAHDI接口卡的連接 很有用
chan_gtalk 提供到Google Talk的連接 可以用
chan_h323 提供H.323連接(已廢棄樊诺,見chan_ooh323) 已廢棄
chan_iax2 提供IAX2連接 很有用
chan_jingle 提供jingle連接 可以用
chan_local 把一部分撥號計劃當(dāng)成信道 很有用
chan_mgcp 提供媒體網(wǎng)管控制協(xié)議(MGCP)連接 可以用
chan_misdn 連接到支持mISDN的ISDN卡 有局限
chan_multicast_rtp 連接到RTP多播流 很有用
chan_nbs 網(wǎng)絡(luò)廣播聲音(NBS)連接 不重要
chan_oss 開放聲音系統(tǒng)驅(qū)動 很有用
chan_phone LInux電話接口驅(qū)動仗考,相當(dāng)老 不重要
chan_sip 回話啟動協(xié)議 很重要
chan_skinny 思科瘦客戶端控制協(xié)議(SCCP) 可以用
chan_unistim 北電Unistim協(xié)議 可以用
chan_usbradio CM108 USB無線電接口卡 可以用
chan_vpb Voicetronix信道 不重要

編碼解碼器

編碼解碼器允許Asterisk轉(zhuǎn)換不同呼叫之間的音頻格式。如果一個呼叫來自PRI電路(使用G.711編碼)词爬,需要連接到一個SIP壓縮信道(使用G.729秃嗜,SIP支持的編碼之一),那么相應(yīng)的編碼解碼器就會執(zhí)行所需的轉(zhuǎn)換顿膨。

注:如果編碼解碼需要復(fù)雜的算法锅锨,大量的轉(zhuǎn)碼工作會對CPU造成負(fù)擔(dān)。有些像Sangoma和Digium廠商的卡會提供硬件解碼編碼恋沃。

名稱 用途 評價
codec_adpcm 自適應(yīng)差分脈碼調(diào)制解調(diào) 不重要
codec_alaw 全世界PSTN(除了美國必搞、加拿大)采用脈沖編碼調(diào)制的A-law算法 很重要
codec_a_mu A-law到Mu-law的轉(zhuǎn)換 很有用
codec_dahdi 使用Digium硬件解碼(需要Digium轉(zhuǎn)碼卡) 很重要
codec_g722 寬頻帶音頻編碼解碼 很有用
codec_g726 (TODO:不懂,大概類似于codec_adpcm) 不重要
codec_gsm 全球移動通訊系統(tǒng) 很有用
codec_ilbc 因特網(wǎng)低比特率編碼解碼 不重要
codec_lpc10 線性預(yù)測編碼生硬合成器 不重要
codec_resample 8-bit和16-bit間帶符號線性采樣 可以用
codec_speex speex編碼 可以用
codec_ulaw 用于美國囊咏、加拿大的 脈沖編碼調(diào)制的Mu-law算法 很重要

格式解釋器

格式解釋器調(diào)用編碼解碼器的功能恕洲,但他們操作文件而不是信道塔橡。如果你錄制了一段GSM音頻,要播放到其他非GSM信道霜第,就需要一個格式解釋器葛家。

如果你錄制成了多種格式(GSM,WAV)泌类,當(dāng)某個信道需要該音頻時癞谒,Asterisk會選擇一個轉(zhuǎn)換代價最小的格式。

名稱 用途 評價
format_g723 G.723 .g723 不重要
format_g726 G.726 .g726 不重要
format_g729 G.729 .g729 很有用
format_gsm RPE-LTP (original GSM codec) .gsm 可以用
format_h263 H.263—video .h263 可以用
format_h264 H.264—video .h264 可以用
format_ilbc Internet Low Bitrate Codec .ilbc 不重要
format_jpeg Graphic file .jpeg .jpg 不重要
format_ogg_vorbis Ogg container .ogg 可以用
format_pcm Various Pulse-Coded Modulation formats: .alaw, .al, .alw, .pcm, .ulaw, .ul, .mu, .ulw, .g722, .au 很有用
format_siren14 G.722.1 Annex C (14 kHz) .siren14 不好說
format_siren7 G.722.1 (7 kHz) .siren7 不好說
format_sln16 16-bit signed linear .sln16 不好說
format_sln 8-bit signed linear .sln .raw 很有用
format_vox .vox 不重要
format_wav .wav 很有用
format_wav_gsm GSM audio in a WAV container .WAV, .wav49 可以用

撥號計劃函數(shù)

撥號計劃函數(shù)是對撥號計劃應(yīng)用程序的補充刃榨,提供了一些有用的增強功能弹砚,比如字符串處理、日期時間轉(zhuǎn)換枢希、ODBC連接性等迅栅。

名稱 用途 評價
func_aes 加密、解密AES字符串 很有用
func_audiohookinherit 允許呼叫轉(zhuǎn)移后仍被錄音 很有用
func_base64 編碼晴玖、解碼base-64字符串 可以用
func_blacklist 讀、寫astdb中的黑名單 很有用
func_callcompletion 存取信道的呼叫完成配置參數(shù) 不好說
func_callerid 存取CallerID 很有用
func_cdr 存取CDR變量 很有用
func_channel 存取信道信息 很有用
func_config 包括AST_CONFIG()为流;從配置文件讀取變量 可以用
func_connectedline 改變已連接的信道信息(需要電話的支持) 不好說
func_curl 使用curl訪問URL 很有用
func_cut 對字符串切片或者切塊 很有用
func_db 提供astdb函數(shù) 很有用
func_devstate 獲得設(shè)備狀態(tài) 很有用
func_dialgroup 創(chuàng)建一個同時撥號組 很有用
func_dialplan 驗證指定的撥號計劃目標(biāo)是否存在 很有用
func_enum 執(zhí)行ENUM查找 很有用
func_env 包括FILE()呕屎,STAT(),ENV()敬察。執(zhí)行操作系統(tǒng)動作 很有用
func_extstate 返回指定的分機狀態(tài) 很有用
func_global 存取全局變量 很有用
func_groupcount 存取一個組的信道數(shù) 很有用
func_iconv 字符編碼轉(zhuǎn)換 可以用
func_lock 包括LOCK()秀睛,UNLOCK(),TRYLOCK()莲祸;用于撥號計劃中的競爭控制 很有用
func_logic 邏輯判斷函數(shù)蹂安,包括ISNULL(),SET()锐帜,EXISTS()田盈,IF(),IFTIME()缴阎,IMPORT() 很有用
func_math 數(shù)學(xué)函數(shù)允瞧,包括MATH(),INC()蛮拔,DEC() 很有用
func_md5 生成MD5指紋 很有用
func_module 檢測模塊是否已經(jīng)裝載 可以用
func_odbc 訪問ODBC 很有用
func_pitchshift 修改音頻流的音調(diào) 很有用
func_rand 生成一個隨機數(shù) 很有用
func_realtime 在Asterisk實時架構(gòu)中執(zhí)行查找 很有用
func_redirecting 獲取本次呼叫的轉(zhuǎn)發(fā)信息 很有用
func_sha1 生成SHA1指紋 很有用
func_shell 執(zhí)行shell命令述暂,并返回結(jié)果 很有用
func_speex 執(zhí)行聲音調(diào)優(yōu) 很有用
func_sprintf 字符串格式化 很有用
func_srv 執(zhí)行SRV查找 很有用
func_strings 字符串處理函數(shù) 很有用
func_sysinfo 獲取系統(tǒng)信息,例如內(nèi)存建炫,交換空間和CPU負(fù)荷等 很有用
func_timeout 存取信道的超時時間 很有用
func_uri 把字符串做URI安全編碼 很有用
func_version 獲取Asterisk版本信息 可以用
func_vmcount 獲取語音信箱的消息數(shù) 很有用
func_volume 設(shè)置信道音量 很有用

PBX模塊

PBX模塊提供增強的控制和配置機制畦韭。

名稱 用途 評價
pbx_ael 提供AEL支持(很少有人用,如果不想用傳統(tǒng)的撥號計劃配置文件的話肛跌,大多數(shù)人會選擇AMI+AGI) 可以用
pbx_config 用于解釋extensions.conf艺配,最傳統(tǒng)察郁、用得最多的撥號計劃語言 很有用
pbx_dundi 執(zhí)行遠(yuǎn)程Asterisk數(shù)據(jù)查找 很有用
pbx_loopback 類似于撥號計劃的include,有點過時 不重要
pbx_lua 支持使用lua編寫撥號計劃 很有用
pbx_realtime 提供Asterisk實時架構(gòu)相關(guān)的功能 很有用
pbx_spool 和Asterisk外呼文件有關(guān)妒挎,提供外呼連接池 很有用

資源模塊

資源模塊用于集成外部資源绳锅。例如res_odbc用于訪問ODBC數(shù)據(jù)庫連接。

名稱 用途 評價
res_adsi 提供ADSI(盡管大多數(shù)ADSI功能Asterisk是不用的酝掩,但語音信箱用到這個資源) 很重要
res_ael_share 為pbx_ael提供共享程序(如果你使用AEL的話鳞芙,這個模塊就很重要。) 很重要
res_agi 提供Asterisk網(wǎng)管接口 很有用
res_ais 使用注入OpenAIS一類的AIS實現(xiàn)期虾, 提供分布式消息等待指示和設(shè)備狀態(tài)通知 很有用
res_calendar 提供日歷系統(tǒng)的集成 很有用
res_calendar_caldav 提供CalDAV特定的能力 很有用
res_calendar_exchange 提供微軟Exchange的特定能力 很有用
res_calendar_icalendar 提供蘋果/谷歌的iCalendar特定能力 很有用
res_clialiases 創(chuàng)建CLI別名 很有用
res_clioriginate 從CLI發(fā)起一次呼叫 可以用
res_config_curl 使用curl拉取配置信息 很有用
res_config_ldap 從LDAP拉取配置信息 可以用
res_config_odbc 從ODBC拉取配置信息 很有用
res_config_pgsql 從PostgreSQL拉取配置信息 可以用
res_config_sqlite 從SQLite拉取配置信息 可以用
res_convert 使用CLI執(zhí)行文件編碼轉(zhuǎn)換 可以用
res_crypto 提供加密功能 很有用
res_curl 為其他curl模塊提供公共服務(wù) 很有用
res_fax 為其他fax模塊提供公共服務(wù) 很有用
res_fax_spandsp 為使用spandsp的傳真功能提供插件 很有用
res_http_post 為Asterisk的HTTP服務(wù)器提供POST上傳功能 可以用
res_jabber 提供Jabber/XMPP資源 很有用
res_limit 允許調(diào)整Asterisk進(jìn)程的系統(tǒng)限制 可以用
res_monitor 提供呼叫錄音資源 很有用
res_musiconhold 提供等待音樂(MOH)功能 很重要
res_mutestream 提供音頻流的禁音和放音功能 不好說
res_odbc 為其他ODBC模塊提供公共功能 很有用
res_phoneprov (TODO:提供來自Asterisk HTTP 服務(wù)器的電話原朝?不懂) 不好說
res_pktccops 提供PacketCable COPS資源 不好說
res_realtime 為Asterisk實時架構(gòu)(ARA)提供CLI命令 很有用
res_rtp_asterisk 提供RTP 很重要
res_rtp_multicast 提供多播RTP 不好說
res_security_log 啟用安全日志 不好說
res_smdi 通過SMDI協(xié)議提供語音信箱通知 有局限
res_snmp 向SNMP管理的網(wǎng)絡(luò)提供系統(tǒng)狀態(tài)信息 可以用
res_speech 通用語音識別API 有局限
res_timing_dahdi 通過DAHDI內(nèi)核接口提供時鐘 很有用
res_timing_kqueue 通過某些操作系統(tǒng)的特性提供時鐘 不好說
res_timing_pthread 使用標(biāo)準(zhǔn)pthread API提供時鐘;不是很有效率镶苞,但移植性好 很有用
res_timing_timerfd 通過新版Linux內(nèi)核的timerfd API提供時鐘 很有用

附加模塊

附加模塊是社區(qū)開發(fā)的模塊喳坠,用法和版權(quán)條款都和Asterisk的主代碼不一樣。它們位于不同的目錄茂蚓,缺省是不會編譯和安裝的壕鹉。要啟用這些模塊就要使用menuselect構(gòu)建配置工具。

名稱 用途 評價
app_mysql 在撥號計劃中執(zhí)行MySQL查詢(已廢棄聋涨,見func_odbc) 已廢棄
app_saycountpl 用波蘭語播報計數(shù)(已廢棄晾浴,已經(jīng)集成到say.conf中) 已廢棄
cdr_mysql 在MySQL中記錄CDR(我們推薦cdr_adaptive_odbc) 可以用
chan_mobile 允許手機通過藍(lán)牙接聽或撥打電話 有局限
chan_ooh323 支持H.323協(xié)議 可以用
format_mp3 支持播放MP3文件 可以用
res_config_mysql 使用MySQL數(shù)據(jù)庫作為實時配置后端 很有用

測試模塊

測試模塊被Asterisk開發(fā)團隊用來驗證新代碼。它們會被頻繁地添加或修改牍白,對你沒什么用脊凰,除非你要開發(fā)Asterisk。

如果你是Asterisk開發(fā)者茂腥,你也許會對Asterisk測試套件有興趣狸涌,你可以執(zhí)行自動測試并將結(jié)果反饋給Asteisk項目。通過不斷地添加測試用例最岗,Asterisk可以防止代碼腐爛帕胆。通過添加你自己的測試用例,升級的時候會更有把握些仑性。

更多信息可以參考:
http://blogs.asterisk.org/2010/04/29/installing-the-asterisk-test-suite/
[http://svn.asterisk.org/svn/testsuite/asterisk/trunk/README.txt#asterisk-testing@'Freenode IRC network'](http://svn.asterisk.org/svn/testsuite/asterisk/trunk/README.txt#asterisk-testing@'Freenode IRC network')

文件結(jié)構(gòu)

Asterisk是一個復(fù)雜的系統(tǒng)惶楼,由很多資源組成。這些資源以不同的方式使用文件系統(tǒng)诊杆。既然Linux在這一點上很靈活歼捐,那就很有必要搞清楚什么數(shù)據(jù)存在什么地方(比如語音信箱文件、日志文件等)晨汹。
配置文件

Asterisk配置文件包括extensions.conf豹储,sip.conf,modules.conf淘这,以及各種信道剥扣、資源巩剖、模塊和函數(shù)用到的參數(shù)定義文件。這些文件一般位于/etc/asterisk钠怯,在做Asterisk的配置和管理工作時你經(jīng)常會進(jìn)到這個目錄佳魔。
模塊

Asterisk的模塊一般會安裝到/usr/lib/asterisk/modules目錄。你一般不用關(guān)心這個目錄晦炊;但你知道模塊在什么地方有時候也很有用鞠鲜。例如,如果你升級Asterisk断国,并且用menuselect構(gòu)建配置工具選擇了不同的模塊贤姆,老的(不兼容)模塊又沒有刪除,安裝腳本會提示警告信息稳衬。 應(yīng)該從modules目錄中刪除 這些老的模塊文件 霞捡。要么手工刪除,要么調(diào)用make uninstall薄疚。
資源庫

有些模塊是需要外部數(shù)據(jù)源的碧信。例如,等待音樂(MOH)就需要音樂文件才能播放街夭。系統(tǒng)的語音提示也需要存儲到硬盤的某個地方音婶。/var/lib/asterisk就是存放系統(tǒng)語音提示、AGI腳本莱坎、等待音樂(MOH)和其他資源文件的地方。

spool

spool是Linux操作系統(tǒng)的一種任務(wù)緩沖和資源共享機制寸士。例如檐什,Linux的打印任務(wù)和待發(fā)郵件都是先寫到spool然后在處理的。對Asterisk來說弱卡,spool用來存儲臨時性數(shù)據(jù)乃正,諸如語音消息,呼叫錄音婶博,呼叫文件等瓮具。Asterisk的spool文件位于/var/spool/asterisk目錄。
日志

Asterisk能夠產(chǎn)生幾種不同的日志文件凡人。/var/log/asterisk是存放CDR名党,CEL,調(diào)試(debug)日志挠轴,隊列日志传睹,消息,錯誤和其他輸出的地方岸晦。這個目錄對調(diào)試欧啤、排錯至關(guān)重要睛藻。
撥號計劃

撥號計劃是Asterisk的核心。所有接入Asterisk的信道都要經(jīng)過撥號計劃邢隧。撥號計劃包含呼叫流腳本店印,處理所有呼叫。

有三種方式可以編寫撥號計劃:

使用傳統(tǒng)的撥號計劃語法:/etc/asterisk/extensions.conf

使用Asterisk擴展邏輯(AEL)語言:/etc/asterisk/extensions.ael

使用LUA腳本語言:/etc/asterisk/extensions.lua

本書后面會有幾章專門介紹撥號計劃語法(這也是用得最多的方式)倒慧。一旦你學(xué)會了這種語法按摘,你可以考慮選擇轉(zhuǎn)向AEL或者LUA,看你自己迫靖。

硬件

Asterisk可以和各種技術(shù)通訊院峡。一般來說,這種通訊是基于某種網(wǎng)絡(luò)連接的系宜;當(dāng)然照激,和傳統(tǒng)的電信網(wǎng)絡(luò)通訊(像PSTN)是需要特殊硬件的。

很多公司生產(chǎn)這種硬件盹牧,比如Digium(Asterisk的贊助商俩垃、所有人和主要開發(fā)者), Sangoma汰寓, Rhino口柳, OpenVox,Pika有滑,Voicetronix跃闹,Junghanns,Dialogic毛好,Xorcom望艺,beroNet,還有很多其他的肌访。我們推薦Digium和Sangoma找默,當(dāng)然其他廠商的產(chǎn)品可能更適合你的需求。

大多數(shù)硬件都是針對Digium Asteirsk硬件設(shè)備接口(DAHDI)設(shè)計的吼驶。這些硬件會有不同的安裝要求和文件位置惩激。

在“第七章 外部連接性”中,我們會更詳細(xì)地討論DAHDI蟹演;當(dāng)然风钻,我們也會僅限于DAHDI的討論。你在安裝硬件的時候應(yīng)該參考廠商的文檔酒请。

Asterisk版本

Asterisk的發(fā)布方案在過去幾年中已經(jīng)經(jīng)歷了幾個來回了魄咕,本節(jié)的目的是為了幫助你理解版本號的含義。需要注意的是1.6.x系列的版本策略的變化蚌父,它跟所有其他的Asterisk版本都不一樣(從1.0到1.8哮兰,包括可以預(yù)見的未來)

以前的版本方案

當(dāng)我們只有Asterisk 1.2和Asterisk 1.4的時候毛萌,所有的開發(fā)工作都在主線上進(jìn)行,1.2分支和1.4分支上只進(jìn)行缺陷修復(fù)喝滞。Asterisk 1.2已經(jīng)被標(biāo)記為EOF(End of Life)阁将,不會再進(jìn)行任何缺陷修復(fù)和安全更新。在1.6.x之前右遭,所有的缺陷修復(fù)只會在1.4上進(jìn)行做盅。

由于所有的開發(fā)工作都在主線上進(jìn)行,除非創(chuàng)建1.6分支窘哈,否則人們不可能得到新特性和新功能吹榴。也不是完全不可能,主要是由于主線上可能發(fā)生任何變化滚婉,要在生產(chǎn)環(huán)境上部署主線的話就要求管理員非常精通Asterisk(C源代碼級的精通)图筹。

為了減輕管理員的壓力,也為了用戶盡快用上新特性(等幾個月而不是等幾年)让腹,一個新的版本方案建立了远剩。1.6分支實際上變成了一個系列1.6.0,1.6.1骇窍,1.6.2瓜晤,等等……,每添加一個新特性就升一個小版本號腹纳。目標(biāo)是每3痢掠、4個月就能得到一個新版本,為管理員提供一個更短更清晰的升級路線嘲恍。如果你需要新特性的話志群,只需要等上幾個月就可以了。

這些分支的標(biāo)簽看起來就會像這樣: 1.6.0.1 -- 1.6.0.2 -- 1.6.0.3 -- 1.6.0.4 -- etc. 1.6.1.1 -- 1.6.1.2 -- 1.6.1.3 -- 1.6.1.4 -- etc. 1.6.2.1 -- 1.6.2.2 -- 1.6.2.3 -- 1.6.2.4 -- etc.

圖示如下:

所以到目前為止蛔钙,我們有了這樣一些分支:1.2,1.4荠医,1.6.0吁脱,1.6.1,1.6.2(沒有分支1.6)彬向。在這些分支中兼贡,我們又創(chuàng)建標(biāo)簽,比如1.2.14娃胆,1.4.30遍希,1.6.0.12,和1.6.2.15里烦。

很不幸凿蒜,并不是像我們想的那樣每3、4個月就出一個小版本:至少也要6-8個月。不僅如此涩盾,1.6.x這種版本方案也有自己的問題十饥。人們很困惑,不知道應(yīng)該運行那個版本漂洋。

現(xiàn)在的版本方案

開發(fā)團隊從1.6.x系列中吸取了教訓(xùn)遥皂。出發(fā)點是好的,但實施起來完全不是那么回事刽漂。所以演训,1.8的版本方案又變回去了,和1.2贝咙、1.4一樣样悟。

雖然開發(fā)團隊仍然想盡快提供新特性使用(目前的目標(biāo)定在一年一次),并且認(rèn)識到對一個穩(wěn)定的版本提供長期支持也很重要颈畸。你可以認(rèn)為1.4是一個長期支持版本(LTS)乌奇,1.6.x系列可以看作是1.4的一部分。然后1.8是下一個長期支持版本(包括四年的缺陷修復(fù)和五年的安全更新)眯娱。

結(jié)束語

Asterisk由很多技術(shù)構(gòu)成礁苗,其中很多自身就很復(fù)雜。所以徙缴,理解Asterisk的架構(gòu)是很重要的试伙。當(dāng)然,Asterisk的設(shè)計還是很優(yōu)秀的于样,在我們看來疏叨,它很好地平衡了復(fù)雜度和靈活性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末穿剖,一起剝皮案震驚了整個濱河市蚤蔓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌糊余,老刑警劉巖秀又,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贬芥,居然都是意外死亡吐辙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蘸劈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昏苏,“玉大人,你說我怎么就攤上這事∠凸撸” “怎么了洼专?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長救巷。 經(jīng)常有香客問我壶熏,道長,這世上最難降的妖魔是什么浦译? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任棒假,我火速辦了婚禮,結(jié)果婚禮上精盅,老公的妹妹穿的比我還像新娘帽哑。我一直安慰自己,他們只是感情好叹俏,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布妻枕。 她就那樣靜靜地躺著,像睡著了一般粘驰。 火紅的嫁衣襯著肌膚如雪屡谐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天蝌数,我揣著相機與錄音愕掏,去河邊找鬼。 笑死顶伞,一個胖子當(dāng)著我的面吹牛饵撑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播唆貌,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼滑潘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锨咙?” 一聲冷哼從身側(cè)響起语卤,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酪刀,沒想到半個月后粹舵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡蓖宦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了油猫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稠茂。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出睬关,到底是詐尸還是另有隱情诱担,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布电爹,位于F島的核電站蔫仙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏丐箩。R本人自食惡果不足惜摇邦,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屎勘。 院中可真熱鬧施籍,春花似錦、人聲如沸概漱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓤摧。三九已至竿裂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間照弥,已是汗流浹背腻异。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留产喉,地道東北人捂掰。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像曾沈,于是被迫代替她去往敵國和親这嚣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理塞俱,服務(wù)發(fā)現(xiàn)姐帚,斷路器,智...
    卡卡羅2017閱讀 134,719評論 18 139
  • Ubuntu的發(fā)音 Ubuntu九秀,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音粘我。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,373評論 9 467
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 12,176評論 2 33
  • 寒風(fēng)蕭蕭起 白潮緩緩遲 秋意無需尋 念中冬將至
    傾新閱讀 89評論 0 0
  • 中午吃完飯鼓蜒,媽媽叫我洗碗痹换,我不肯洗,媽媽就用碗轉(zhuǎn)的語氣說我的小洗碗機都弹,快去洗碗吧娇豫!我就高興的去洗碗了。我一...
    張稼豐2閱讀 285評論 0 0