2016/02/03

Asterisk : The Cookbook 食譜 029 - 重要設定檔

Q029: 如何客製化自己的 Asterisk 呢?

我把設定檔擺在這邊,是因為相信前面幾篇應該足夠大家使用 Asterisk 來撥號了。這篇主要說明三個重要的設定檔(設定檔都在 /etc/asterisk/ 中)。
為了不占太多篇幅,請自行參考系統中的檔案。這邊提醒一個最重要的注意事項,檔案的節後面若有 (!) 的話,表示這個只是草稿,如果你要讓它生效,請自行將它去掉。

==== asterisk.conf ====

asterisk.conf 就把它想成「系統設定」即可,在執行 Asterisk 時也可以指定它的路徑,沒指定時就是從預設路徑讀(/etc/asterisk/asterisk.conf):

/usr/sbin/asterisk -C /custom/path/to/asterisk.conf

這個檔有幾個重要的節:[directories], [options], [files], [compat]

[directories]

astetcdir 設定檔
astmoddir 模組檔
astvarlibdir 各種狀態資訊存放路徑
astdbdir Asterisk 內部資料庫存放路徑
astdatadir 資源檔存放路徑,例如各種錄音檔
astagidir 存放 agi-bin 的執行檔
astspooldir 存放各種對外緩衝資料,例如 voicemail, call recording....
astrundir 存放 linux socket, process ID
astlogdir 存放 log 檔

[options]

這邊的設定可以參考 man asterisk
比較需要知道的就是 runuser/rungroup 為執行時的帳號,通常就是 asterisk

[files]

用來設定 control socket 的控制權,指的是執行在背景,前景用 asterisk -r 的時候用:
astctlpermissions 0660
astctlowner root
astctlgroup apache
astctl asterisk.ctl

這邊都用預設即可,也就是全部都可以不寫出來

[compat]
這是為了向先前的版本相容時用的,一般都設定 1.6, 所以照預設值寫就好。

pbx_realtime=1.6
res_agi=1.6
app_set=1.6

==== modules.conf ====

假如只設定 autoload=yes 這一行的話,那就會預載所有 asterisk.conf 中指明路徑的所有模組。
所以如果你想控制載入的模組,可以用 autoload=yes, 然後把要放的模組放在指定的路徑即可。

如果要明確指定哪些要載入哪些不要載入,那麼就用 :
  • preload 指明一開始就要載入的模組,此設定跟 autoload 無關
  • load 指明要載入的模組,受 autoload 影響
  • noload 指明不要載入的模組,當然是在 autoload=yes 的情況下
  • require 這項跟 load 一樣,但是有更強烈的要求之意,如果載入失敗就離開 asterisk 不繼續執行
  • preload-require 這項跟 preload 一樣,當然也是載入失敗就離開
==== indications.conf ====

這個檔定義各種地區的音頻設定(tone indications),預設是用美國,可以修改成台灣
country=us 改成 country=tw
在撥號計劃中,也可以用底下的語法來明確指明某 Context 採用哪個 tone indications
Set(CHANNEL(tonezone)=[tw])
Set(CHANNEL(musicclass)=[tw])
這邊提到的 tonezone, musicclass 通常也都會在別的設定檔中指明,或是採用在 indications.conf 中指定的 [genera] 中的 country 設定項。

底下用一個比較有趣的設定,星際爭霸的音效:

例如在 indications.conf 設定底下一節:
[starwars](us)
description = Star Wars Theme Song
ring = 262/400,392/500,0/100,349/400,330/400,294/400,524/400,392/500,0/100,
349/400,330/400,294/400,524/400,392/500,0/100,349/400,330/400,349/400,
294/500,0/2000

然後在 extensions.conf 中引用:
exten => 500,1,Answer()
  same => n,Set(CHANNEL(tonezone)=starwars)
  same => n,Dial(SIP/0000FFFF0002)

寫到這邊,如果您的系統只是自用的話,就在 indications.conf 中指明預設國家就夠了。如果還要給不同國家使用,那就在撥號計劃中如上面那樣使用。

==== musichold.conf ====

撥號時通常有各種音頻設定,甚至可以讓使用者下載自己的音頻(來電答鈴)。可以參考 http://www.university-music-on-hold.com/

這邊要說明的是,播放格式不同會影響 CPU 負載,例如 mp3 就遠比 .wav 還要需要 CPU 來解壓音頻。另外就是若採用非預設音頻格式的話,就需要指定 application 來播放,例如用 mpg123 來播放 mp3 格式的音頻,而 mpg123 可能需要額外安裝。

音頻檔放置路徑定義在 asterisk.conf 的 astdatadir 中,採用編譯的預設值跟 Ubuntu 套件的預設值是不同的,前者在 /var/lib/asterisk 而後者在 /usr/share/asterisk 中

======================================
講完幾個重要的設定檔之後,要提醒大家的是 log 檔,按照 asterisk.conf 的設定,可以找到 /var/log/asterisk/message 檔,它會記錄的跟 asterisk -cvvv 中見到的類似。 
也許你在 log message 中會見到很多錯誤,很有可能就是你載入了太多模組,而這些模組在編譯時可能沒有被設定支援。你可以試著解決這些問題。







0 意見: