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ù)雜度和靈活性。