2016/01/26

Asterisk : The Cookbook 食譜 018 - 檔案結構

Q018: Asterisk 的檔案太多了,可以解譯各個檔案的功能嗎?

是的,Asterisk 是一個複雜的系統,整合了諸多資源,而這些資源使用系統中各種不同的方式。底下的解說採用 Ubuntu 為例。

[組態檔]

Asterisk 的組態檔預設都是放在 /etc/asterisk/ ,底下是幾個比較重要的設定
extensions.conf  manager.conf  sip.conf  voicemail.conf asterisk.conf
在最後面會有這幾個檔的範例

[模組]

根據 asterisk.conf 中的設定,模組是放在 astmoddir => /usr/lib/asterisk/modules 中
需要注意的是,新舊版本的模組是不相容的,建議把舊的模組刪除或是備份。

[資源檔]

音樂檔(像 Music oh Hold(MOH)) 照 asterisk.conf 的設定,是放在 /usr/share/asterisk/moh 中。這邊要注意的是要依據設定檔來找,有很大可能也會放在 /var/lib/asterisk/moh 中

[spool]

spool 通常放在 /var/spool/asterisk 中,這目錄放的檔案主要是需要其他工具使用,例如 mail, printer 等等

[記錄]

記錄檔通常放 /var/log/asterisk 中,種類很多,包括 CDR, CEL, debug log, queue log, mesages, error 等等等


== extensions.conf ==
[general]
static=yes
writeprotect=no
clearglobalvars=no
[internal]
exten=>7001,1,Answer()
exten=>7001,2,Dial(SIP/7001,60)
exten=>7001,3,Playback(vm-nobodyavail)
exten=>7001,4,VoiceMail(7001@main)
exten=>7001,5,Hangup()
exten=>7002,1,Answer()
exten=>7002,2,Dial(SIP/7002,60)
exten=>7002,3,Playback(vm-nobodyavail)
exten=>7002,4,VoiceMail(7002@main)
exten=>7002,5,Hangup()
exten=>7003,1,Answer()
exten=>7003,2,Dial(SIP/7002,60)
exten=>7003,3,Playback(vm-nobodyavail)
exten=>7003,4,VoiceMail(7002@main)
exten=>7003,5,Hangup()
exten=>8001,1,VoicemailMain(7001@main)
exten=>8001,2,Hangup()
exten=>8002,1,VoicemailMain(7002@main)
exten=>8002,2,Hangup()

== manager.conf ==
[general]
enabled = yes
webenabled = yes
port = 5038
bindaddr = 0.0.0.0
displaysystemname = yes
httptimeout = 60

[admin]
secret = 123456
permit = 192.168.1.0/24
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config

== sip.conf ==
[general]
context=internal
allowguest=no
allowoverlap=no
bindport=5060
bindaddr=0.0.0.0
srvlookup=no
allow=ulaw
nat=yes
localnet=192.168.1.0/24

[my-codecs](!)
disallow=all
allow=ilbc
allow=g729
allow=gsm
allow=g723
allow=ulaw

[7001]
type=friend
host=dynamic
secret=123456
context=internal

[7002]
type=friend
host=dynamic
secret=123456
context=internal

[7003]
type=friend
host=dynamic
secret=123456
context=internal

== voicemail.conf ==
[general]
format=wav49|gsm|wav
serveremail=asterisk
attach=yes
skipms=3000
maxsilence=10
silencethreshold=128
maxlogins=3
emaildateformat=%A,%B%d,%Yat%r
pagerdateformat=%A,%B%d,%Yat%r
[zonemessages]
eastern=America/New_York|'vm-received'Q'digits/at'IMp
central=America/Chicago|'vm-received'Q'digits/at'IMp
central24=America/Chicago|'vm-received'q'digits/at'HN'hours'
military=Zulu|'vm-received'q'digits/at'HN'hours''phonetic/z_p'
european=Europe/Copenhagen|'vm-received'adb'digits/at'HM
[default]
1234=>4242,ExampleMailbox,root@localhost
[other]
1234=>5678,Company2User,root@localhost
[main]
7001=>123456
7002=>123456
7003=>123456

== asterisk.conf ==
[directories](!)
astetcdir => /etc/asterisk
astmoddir => /usr/lib/asterisk/modules
astvarlibdir => /var/lib/asterisk
astdbdir => /var/lib/asterisk
astkeydir => /var/lib/asterisk
astdatadir => /usr/share/asterisk
astagidir => /usr/share/asterisk/agi-bin
astspooldir => /var/spool/asterisk
astrundir => /var/run/asterisk
astlogdir => /var/log/asterisk
astsbindir => /usr/sbin

Asterisk : The Cookbook 食譜 017 - 加值

Q017: 可以說說加值模組嗎?

加值模組屬於社群自行開發的,通常放在獨立的目錄而且預設並不會被編譯進來。如果你想啟動它的話,請利用源碼編譯時採用 make menuselect 來選擇。

  1. app_mysql Executes MySQL queries with a dialplan application (過期,請參考 func_odbc)
  2. app_saycountpl Says Polish counting words (過期,已整合在 say.conf)
  3. cdr_mysql Logs CDRs to a MySQL database (有用的)
  4. chan_mobile Enables making and receiving phone calls using cell phones over Bluetooth (有限制的)
  5. chan_ooh323 Enables making and receiving VoIP calls using the H.323 protocol (有用的)
  6. format_mp3 Allows Asterisk to play MP3 files (有用的)
  7. res_config_mysql Uses a MySQL database as a realtime configuration backend (有用的)

Asterisk : The Cookbook 食譜 016 - 資源


Q016: 可以說說資源模組嗎?

Asterisk 的組態設置都存放在 /etc/asterisk/ 中,每個模組有各自的組態。
  1. res_config_curl Pulls configuration information using cURL (有用的)
  2. res_config_ldap Pulls configuration information using LDAP (可用的)
  3. res_config_odbc Pulls configuration information using ODBC (有用的)
  4. res_config_pgsql Pulls configuration information using PostgreSQL (有用的)
  5. res_config_sqlite Pulls configuration information using SQLite (version 2) (有用的)
  6. res_config_sqlite3 Pulls configuration information using SQLite (version 3) (有用的)

    有些操作需要時間來源,不過像 MeetMe() 卻不是使用時間界面,而是直接從 DAHDI 取得。不過並不是每個機器都有支援 DAHDI 硬體模組,所以也可以考慮改用 res_timing_timerfd。可能的話盡量不要使用 res_timing_pthread,因為它比較沒效率。
  7. res_timing_dahdi Provides timing using the DAHDI kernel interface (有用的)
  8. res_timing_kqueue Provides timing using a kernel feature in some BSDs, including Mac OS X (有用的)
  9. res_timing_pthread Provides timing using only parts of the standard pthread API; less efficient but more portable than other timing modules (有用的)
  10. res_timing_timerfd Provides timing using the timerfd API provided by newer versions of the Linux kernel (有用的)
    Asterisk 也整合某些行事曆系統,你可以讀寫撥號計畫中的行事曆資訊,也可以透過行程安排自動撥號。
  11. res_calendar Enables base integration to calendaring systems (有用的)
  12. res_calendar_caldav Allows features provided by res_calendar to connect to calendars via CalDAV (有用的)
  13. res_calendar_exchange Allows features provided by res_calendar to connect to MS Exchange (有用的)
  14. res_calendar_icalendar Allows features provided by res_calendar to connect to Apple/Google iCalendar (有用的)
    Asterisk 的核心並不包含 RTP 實作,所以如果你的某個 VoIP 通道需要 RTP 的話,就必須先載入 res_rtp_asterisk 模組。而多點廣播 RTP 只用在 chan_multicast_rtp 通道。
  15. res_rtp_asterisk Provides RTP (重要的)
  16. res_rtp_multicast Provides multicast RTP
    Asterisk 在使用在各個音頻與視頻格式時,可以實作的一個重要介面就是『屬性』。
  17. res_format_attr_celt Handles format attribute details for the CELT audio format (有用的)
  18. res_format_attr_h263 Handles format attribute details for the H.263 video format (有用的)
  19. res_format_attr_h264 Handles format attribute details for the H.264 video format (有用的)
  20. res_format_attr_silk Handles format attribute details for the SILK audio format (有用的)
    底下是一些可選模組供 Asterisk 命令列界面(CLI)使用
  21. res_clialiases Creates CLI aliases (有用的)
  22. res_clioriginate Provides an Asterisk CLI command for originating calls (有用的)
  23. res_convert Provides an Asterisk CLI command to perform file-format conversions (有用的)
  24. res_limit Enables adjusting of system limits on the Asterisk process (有用的)
  25. res_realtime Provides CLI commands for the Asterisk Realtime Architecture (ARA) (有用的)
    其他資源,不代表不重要,只是沒有特別將它分類而已
  26. res_adsi Provides ADSI (重要)
  27. res_ael_share Provides shared routines for use with pbx_ael (如果使用 AEL 就重要,不過應該沒人在用 AEL)
  28. res_agi Provides the Asterisk Gateway Interface (see Chapter 21) (有用的)
  29. res_corosync Provides distributed message waiting indication (MWI) and device state notifications via the Corosync Cluster Engine (有用的)
  30. res_crypto Provides cryptographic capabilities (有用的)
  31. res_curl Provides common subroutines for other cURL modules (有用的)
  32. res_fax Provides common subroutines for other fax modules (有用的)
  33. res_fax_spandsp Plug-in for fax using the spandsp package (有用的)
  34. res_http_post Provides POST upload support for the Asterisk HTTP server (有用的)
  35. res_http_websocket Provides WebSocket support for the Asterisk internal HTTP server; also utilized by chan_sip to provide SIP over a WebSocket connection, which is useful for rtcweb(有用的)
  36. res_jabber Provides Jabber/XMPP resources (過期,請參考 res_xmpp)
  37. res_monitor Provides call-recording resources (有用的)
  38. res_musiconhold Provides music on hold (MOH) resources (重要)
  39. res_mutestream Allows muting/unmuting of audio streams 
  40. res_odbc Provides common subroutines for other ODBC modules (有用的)
  41. res_phoneprov Provisions phones from Asterisk HTTP server 
  42. res_pktccops Provides PacketCable COPS resources 
  43. res_security_log Enables logging of security events generated by other parts of Asterisk 
  44. res_smdi Provides voicemail notification using the SMDI protocol (有限制的)
  45. res_snmp Provides system status information to an SNMP-managed network (有用的)
  46. res_speech Generic speech recognition API (有限制的)
  47. res_xmpp Provides Jabber/XMPP resources (有用的)

Asterisk : The Cookbook 食譜 015 - PBX

Q015 可以說說 PBX 交換機模組嗎?

交換機模組是一種設備模組,它提供增強的控制和可設置的組態機制。

  1. pbx_ael Asterisk Extension Logic (AEL) offers a dialplan scripting language that looks like a modern programming language. (有用的)
  2. pbx_config This is the traditional, and most popular, dialplan language for Asterisk. Without this module, Asterisk cannot read extensions.conf. (有用的)
  3. pbx_dundi Performs data lookups on remote Asterisk systems. (有用的)
  4. pbx_loopback Performs something similar to a dialplan include, but in a deprecated manner. (不重要)
  5. pbx_lua Allows creation of a dialplan using the Lua scripting language. (有用的)
  6. pbx_realtime Provides functionality related to the Asterisk Realtime Architecture. (有用的)
  7. pbx_spool Provides outgoing spool support relating to Asterisk call files.(有用的)

Asterisk : The Cookbook 食譜 014 - 撥號計劃功能

Q014: 可以說說撥號計劃功能模組嗎?

撥號計劃功能模組針對撥號計畫應用補充許多功能,像 字串處理, 時區同步, ODBC 連接等等

  1. func_aes Encrypts/decrypts an AES string (有用)
  2. func_audiohookinherit Allows calls to be recorded after transfer (有用)
  3. func_base64 Encodes/decodes a base-64 string (有用)
  4. func_blacklist Writes/reads blacklist in astdb (有用)
  5. func_callcompletion Gets/sets call-completion configuration parameters for the channel 
  6. func_callerid Gets/sets CallerID (有用)
  7. func_cdr Gets/sets CDR variable (有用)
  8. func_channel Gets/sets channel information (有用)
  9. func_config Includes AST_CONFIG() ; reads variables from config file (有用)
  10. func_connectedline Changes connected-line information on supported handsets 
  11. func_curl Uses cURL to obtain data from a URI (有用)
  12. func_cut Slices and dices strings (有用)
  13. func_db Provides astdb functions (有用)
  14. func_devstate Gets state of device (有用)
  15. func_dialgroup Creates a group for simultaneous dialing (有用)
  16. func_dialplan Validates that designated target exists in dialplan (有用)
  17. func_enum Performs ENUM lookup (有用)
  18. func_env Includes FILE() , STAT() , and ENV() ; performs operating system actions (有用)
  19. func_extstate Returns status of a hinted extension (有用)
  20. func_global Gets/sets global variables (有用)
  21. func_groupcount Gets/sets channel count for members of a group (有用)
  22. func_hangupcause Gets/sets hangupcause information from the channel (有用)
  23. func_iconv Converts between character sets (有用)
  24. func_jitterbuffer Includes the JITTERBUFFER() function, which allows you to place a jitterbuffer on a channel. (有用)
  25. func_lock Includes LOCK() , UNLOCK() , and TRYLOCK() ; sets a lock that can (有用)
  26. be used to avoid race conditions in the dialplan func_logic Includes ISNULL() , SET() , EXISTS() , IF() , IFTIME() , and IMPORT() ; performs various logical functions (有用)
  27. func_math Includes MATH() , INC() , and DEC() ; performs mathematical functions (有用)
  28. func_md5 Converts supplied string to an MD5 hash (有用)
  29. func_module Checks to see if supplied module is loaded into memory (有用)
  30. func_odbc Allows dialplan integration with ODBC resources (有用)
  31. func_pitchshift Shifts the pitch of an audio stream (有用)
  32. func_presencestate Gets/sets presence state; this is primarily used by Asterisk integration with Digium phones (有用)
  33. func_rand Returns a random number within a given range (有用)
  34. func_realtime Performs lookups within the Asterisk Realtime Architecture (ARA) (有用)
  35. func_redirecting Provides access to information about where this call was redirected from (有用)
  36. func_sha1 Converts supplied string to an SHA1 hash (有用)
  37. func_shell Performs Linux shell operations and returns results (有用)
  38. func_speex Reduces noise and performs dB gain/loss on an audio stream (有用)
  39. func_sprintf Performs string format functions similar to C function of same name (有用)
  40. func_srv Performs SRV lookups in the dialplan (有用)
  41. func_strings Includes over a dozen string manipulation functions (有用)
  42. func_sysinfo Gets system information such as RAM, swap, load average, etc. (有用)
  43. func_timeout Gets/sets timeouts on channel (有用)
  44. func_uri Converts strings to URI-safe encoding (有用)
  45. func_version Returns Asterisk version information (有用)
  46. func_vmcount Returns count of messages in a voicemail folder for a particular user (有用)
  47. func_volume Sets volume on a channel (有用)

Asterisk : The Cookbook 食譜 013 - 格式解譯器

Q013 : 可以說說格式解譯器模組嗎?

格式解譯器模組完成 Codec 翻譯器的同樣的功能,只是對象不是通道而是檔案。譬如你將一通電話以 GSM 格式記錄下來,在回放時若是該通道非 GSM 格式時就需要格式解譯器模組。

這邊建議不要使用 GSM 格式來儲存而請改採 WAV 格式,主要原因是降低 CPU 負載。

  1. format_g723 G.723: .g723 (不重要)
  2. format_g726 G.726: .g726 (不重要)
  3. format_g729 G.729: .g729 (有用的)
  4. format_gsm RPE-LTP (original GSM codec): .gsm (有用的)
  5. format_h263 H.263—video: .h263 (有用的)
  6. format_h264 H.264—video: .h264 (有用的)
  7. format_ilbc Internet Low Bitrate Codec: .ilbc (不重要)
  8. format_jpeg Graphic file: .jpeg, .jpg (不重要)
  9. format _ogg_vorbis Ogg container: .ogg (有用的)
  10. format_pcm Various Pulse-Coded Modulation formats: .alaw, .al, .alw, .pcm, .ulaw, .ul, .mu, .ulw, .g722, .au (有用的)
  11. format_siren14 G.722.1 Annex C (14 kHz): .siren14 
  12. format_siren7 G.722.1 (7 kHz): .siren7 
  13. format_sln16 16-bit signed linear: .sln16 
  14. format_sln 8-bit signed linear: .sln, .raw (有用的)
  15. format_vox .vox (不重要)
  16. format_wav .wav (有用的)
  17. format_wav_gsm GSM audio in a WAV container: .wav, .wav49 (有用的)

Asterisk : The Cookbook 食譜 012 - Codec 翻譯器

Q012: 可以說說Codec 翻譯器嗎?

Codec 翻譯器讓 Asterisk 有能力轉換通話雙方的音頻編碼。例如有可能來自一個 PRI 線路(使用 G.711),需要轉換成壓縮的 SIP 輸出(像 G.729),此時就需要這種 Codec 翻譯器。

Digium 公司有散布某些額外的 Codec 翻譯器模組,像 codec_g729 , codec_silk , codec_siren7 , and codec_siren14 等。 這些 Codec 並不是開放授權的,不過大部份也都是可以免費使用,要注意的是 codec_g729 在使用前必須取得授權。 可以參考 Digium Site.
  1. codec_adpcm Adaptive Differential Pulse Coded Modulation (ADPCM) codec (不重要)
  2. codec_alaw A-law PCM codec used all over the world (except Canada/USA) on the PSTN (重要)
  3. codec_g729 Does not come with Asterisk due to the fact that it is not a public domain codec, but can be purchased from Digium; a very popular codec if compression is desired (and CPU use is not an issue) (有用的)
  4. codec_a_mu A-law to mu-law direct converter (有用的)
  5. codec_dahdi Utilizes proprietary Digium hardware transcoding card (重要)
  6. codec_g722 Wideband audio codec (有用的)
  7. codec_g726 Flavor of ADPCM (不重要)
  8. codec_gsm Global System for Mobile Communications (GSM) codec Useful
  9. codec_ilbc Internet Low Bitrate Codec (不重要)
  10. codec_lpc10 Linear Predictive Coding vocoder (extremely low bandwidth) (不重要)
  11. codec_resample Resamples between 8-bit and 16-bit signed linear (有用的)
  12. codec_speex Speex codec (有用的)
  13. codec_ulaw Mu-law PCM codec used in Canada/USA on PSTN (重要)

Asterisk : The Cookbook 食譜 011 - 通道驅動

Q011: 可以說說通道驅動嗎?

如果沒有通道驅動的話,Asterisk 就沒有辦法完成通話。每個通道實作支援了某一協定,例如 SIP, ISDN 等。通道模組就像是 Asterisk 核心的中繼器。

  1. chan_agent Provides agent channel for Queue() (有用的)
  2. chan_alsa Provides connection to Advanced Linux Sound Architecture (有用的)
  3. chan_bridge Used internally by the ConfBridge() application; should not be used directly Essential a chan_console Utilizes the portaudio library to provide a cross-platform console channel driver that uses the system sound device (有用的)
  4. chan_dahdi Provides connection to PSTN cards that use DAHDI channel drivers (有用的)
  5. chan_gtalk Provides connection to Google Talk (過期的, 參考 chan_motif)
  6. chan_h323 Provides connection to H.323 endpoints (過期的,參考 chan_ooh323)
  7. chan_iax2 Provides connection to IAX2 endpoints (有用的)
  8. chan_jingle Provides connection to Jingle-enabled endpoints (過期的,參考chan_motif)
  9. chan_local Provides a mechanism to treat a portion of the dialplan as a channel (有用的)
  10. chan_mgcp Media Gateway Control Protocol channel driver (有用的)
  11. chan_misdn Provides connection to mISDN-supported ISDN cards (有限制的)
  12. chan_motif Implements the Jingle protocol, including the ability to connect to Google Talk and Google Voice; introduced in Asterisk 11 (有用的)
  13. chan_multicast_rtp Provides connection to multicast Realtime Transport Protocol (RTP) streams (有用的)
  14. chan_nbs Network Broadcast Sound channel driver (不重要)
  15. chan_oss Open Sound System driver (有用的)
  16. chan_phone Linux telephony interface driver (very old) (不重要)
  17. chan_sip Session Initiation Protocol (SIP) channel driver (重要)
  18. chan_skinny Cisco Skinny Client Control Protocol (SCCP) channel driver (有用的)
  19. chan_unistim Nortel Unistim protocol channel driver (有用的)

Asterisk : The Cookbook 食譜 010 - 通道事件記錄模組 (CEL)

Q010: 可以說說通道事件記錄模組 (CEL)嗎?

通道事件日誌記錄(CEL)針對電話活動報告提供了更為強大的控制。出於同樣的原因,它需要更加仔細的規劃你的撥號方案,而絕不會自動工作。也就是說更複雜了點,而且是被動呼叫。

  1. cel_custom CEL to disk/file (有用的)
  2. cel_manager CEL to AMI (有用的)
  3. cel_odbc CEL to ODBC (有用的)
  4. cel_pgsql CEL to PostgreSQL (有用的)
  5. cel_radius CEL to RADIUS (有用的)
  6. cel_sqlite3_custom CEL to SQLite3 (有用的)
  7. cel_tds CEL to Microsoft SQL or Sybase (有用的)

Asterisk : The Cookbook 食譜 009 通話詳細記錄 (CDR)模組

Q009: 可以說說通話詳細記錄 (CDR)模組嗎?

通話詳細記錄(CDR)可以有很多方法,例如存到檔案、資料庫、或是遠端撥入用戶服務(RADIUS),或是 syslog 中。

CDR 通常不建議用在複雜的計費系統中,如果你要更多的控制計費及呼叫記錄的話,應該採用通道事件記錄(Channel Event Logging),主要是因為 CDR 相對簡單夠用,但是在計費系統中又不夠滿足系統端與用戶端的需求。

  1. cdr_adaptive_odbc Allows writing of CDRs through ODBC framework with ability to add custom fields (有用的)
  2. cdr_csv Writes CDRs to disk as a comma-separated values file (有用的)
  3. cdr_custom Writes CDRs to a CSV file, but allows addition of custom fields (有用的)
  4. cdr_manager Outputs CDRs to Asterisk Manager Interface (AMI) (有用的)
  5. cdr_odbc Writes CDRs through ODBC framework (有用的)
  6. cdr_pgsql Writes CDRs to PostgreSQL (有用的)
  7. cdr_radius Writes CDRs to RADIUS (有用的)
  8. cdr_sqlite Writes CDRs to SQLite2 database (過期,請使用 sqlite3_custom)
  9. cdr_sqlite3_custom Writes CDRs to SQLite3 with custom fields (有用的)
  10. cdr_syslog Writes CDRs to syslog (有用的)
  11. cdr_tds Writes CDRs to Microsoft SQL or Sybase (有用的)

Asterisk : The Cookbook 食譜 008: 橋接模組

Q008: 可以說說橋接模組嗎?

實際通話是將通道跟通道橋接起來,以便雙方互相溝通訊息。

  1. bridge_builtin_features 當使用內建用戶功能時完成橋接 (參考 features.conf).
  2. bridge_multiplexed 完成複雜的多工橋接,例如多參與者的大型會議. 目前只用在 app_confbridge  (有用的)
  3. bridge_simple 完成簡單的通道對通道的橋接,也就是一般的接聽來電 (有用的)
  4. bridge_softmix 完成簡單的多工橋接,例如多參與者的大型會議. 目前只用在 app_confbridge  (有用的)

Asterisk : The Cookbook 食譜 007: 應用程式模組

Q007: 可以說說應用程式模組嗎?

底下沒翻譯完,有空再來翻譯

  1. app_adsiprog 載入類比顯示服務介面(Analog Display Services Interface (ADSI)) 腳本到相容的類比電話(不重要)
  2. app_alarmreceiver 接收來自報警設備的報告(不重要)
  3. app_amd 偵測答錄機(不可靠)
  4. app_authenticate 針對提供的字符串(密碼)比對雙音多頻(DTMF)輸入(有用)
  5. app_cdr 寫入制式記錄到詳細通話記錄(CDR)(有用)
  6. app_celgenuserevent 產生用戶自訂事件到 通道事件記錄(CEL)
  7. app_chanisavail  檢查通道狀態 (不可靠)
  8. app_channelredirect 轉向,強迫其他通道轉向到撥號計劃中的另外一部份 (有用)
  9. app_chanspy 監聽,允許通道聆聽另一通道的語音 (有用)
  10. app_confbridge 提供視訊會議功能 (有用)
  11. app_controlplayback 播放提示音,並具快轉、倒轉功能 (有用)
  12. app_dahdibarge 允許在 DAHDI 通道中闖入 (過期)
  13. app_dahdiras 在 DAHDI 通道中建立遠端存取伺服器 (Remote Access Server) (不重要)
  14. app_db 用來編輯(加、減、修) Asterisk 內建的 SQLite 記錄 (過期,請參考 func_db)
  15. app_dial 用來將通道連接起來(也就是打電話) (重要)
  16. app_dictate 播放一筆通話記錄並具有開始/停止功能 (有用)
  17. app_directed_pickup 接聽另一線電話(插撥) (有用)
  18. app_directory 顯示 voicemail.conf 中的姓名清單(有用)
  19. app_disa 提供撥號音頻並接受雙音多頻(DTMF)輸入(有用)
  20. app_dumpchan 傾印通道參數到 Asterisk 命令列介面 (CLI) (有用)
  21. app_echo 回音,重導收到的語音到來話通道 (有用)
  22. app_exec 在某些狀況下執行撥號計畫應用程式(包括 Exec() , TryExec() , and ExecIf() ) (有用)
  23. app_externalivr 將 Asterisk 控制成其他程式語言(C, PHP, Perl, shell...)的非同步中繼介面(AGI) (有用)
  24. app_fax 傳真, 提供 SendFax() and ReceiveFax() (有用)
  25. app_festival Enables basic text to speech using Festival TTS engine (有用)
  26. app_flash Performs a hook-switch flash on channels (primarily analog) (有用)
  27. app_followme Performs find me/follow me functionality based on followme.conf (有用)
  28. app_forkcdr Starts new CDR record on current call (有用)
  29. app_getcpeid Gets the ADSI CPE ID (不重要)
  30. app_ices Sends audio to an Icecast server (有用)
  31. app_image Transmits an image to supported devices (有限)
  32. app_ivrdemo Sample application for developers (不重要)
  33. app_jack Works with JACK Audio Connection Kit to share audio between compatible applications (有用)
  34. app_macro Triggers dialplan macros (過期,參考 Sub())
  35. app_meetme Provides multiparty conferencing (有用)
  36. app_milliwatt Generates 1,004 Hz tone for testing loss on analog circuits (有用)
  37. app_minivm Provides primitive functions to allow you to build your own voicemail application in dialplan (有用)
  38. app_mixmonitor Records both sides of a call and mixes them together (有用)
  39. app_morsecode Generates Morse code (有用)
  40. app_mp3 Uses mpg123 to play an MP3 (不重要)
  41. app_nbscat Streams audio from Network Broadcast Stream (NBS) (不重要)
  42. app_originate Allows origination of a call (有用)
  43. app_osplookup Performs Open Settlement Protocol (OSP) lookup (有用)
  44. app_page Creates multiple audio connections to specified devices for public address (paging) (有用)
  45. app_parkandannounce Enables automated announcing of parked calls (有用)
  46. app_playback Plays a file to the channel (does not accept input) (有用)
  47. app_playtones Plays pairs of tones of specified frequencies (有用)
  48. app_privacy Requests input of caller’s phone number if no CallerID is received (不重要)
  49. app_queue Provides Automatic Call Distribution (ACD) app_read Requests input of digits from callers and assigns input to a variable (有用)
  50. app_readexten Requests input of digits from callers and passes call to a designated extension and context (有用)
  51. app_readfile Loads contents of a text file into a channel variable (過期,參考 func_env)
  52. app_record Records received audio to a file (有用)
  53. app_sayunixtime Plays back time in specified format (有用)
  54. app_senddtmf Transmits DTMF to calling party (有用)
  55. app_sendtext Sends a text string to compatible channels (不重要)
  56. app_setcallerid Sets CallerID on a channel (過期,參考 func_callerid)
  57. app_skel Sample application for developers (有用)
  58. app_sms Sends SMS message in compatible countries (有限制的)
  59. app_softhangup Requests hangup of channel (有用)
  60. app_speech_utils Provides utilities relating to speech recognition (有用)
  61. app_stack Provides Gosub() , GoSubIf() , Return() , StackPop() , LOCAL() , and LOCAL_PEEK() (重要的)
  62. app_system Executes commands in a Linux shell (有用)
  63. app_talkdetect Similar to app_background , but allows for any received audio to interrupt playback (有用)
  64. app_test Client/server testing application (有用)
  65. app_transfer Performs a transfer on the current channel (有用)
  66. app_url Passes a URI to the called channel (有限制的)
  67. app_userevent Generates a custom event in the Asterisk Manager Interface (AMI) (有用)
  68. app_verbose Generates a custom event in the Asterisk CLI (有用)
  69. app_voicemail Provides voicemail (重要)
  70. app_waitforring Waits for a RING signaling event (not to be confused with RINGING); most likely unnecessary, as only chan_dahdi with analog channels where ringing is received (such as an FXO port) generates the RING signaling event (不重要)
  71. app_waitforsilence Includes WaitForSilence() and WaitForNoise() ; listens to the incoming channel for a specified number of milliseconds of noise/silence (有用)
  72. app_waituntil Waits until current Linux epoch matches specified epoch (有用)
  73. app_while Includes While() , EndWhile() , ExitWhile() , and ContinueWhile() ; provides while-loop functionality in the dialplan (有用)
  74. app_zapateller Generates SIT (Special Information Tone) to discourage telemarketers (有用)

Asterisk : The Cookbook 食譜 006: 模組

Q006: 感覺 Asterisk 提供了很多模組,可以說說模組嗎?

我們可以說 Asterisk 是由模組建立起來的。一個模組是一個可裝載組件,它提供一個特定的功能,諸如信號通道驅動器(例如,chan_sip.so),或是允許連接到一個外部技術的資源(如func_odbc.so)。Asterisk 模組設定檔放在 /etc/asterisk/modules.conf 。

實際上是可以在啟動 Asterisk 的時候不載入任何模組,但在這種狀態下,將沒有能力做任何事情的(因為 Asterisk 是由模組組成的)。

話又說回來,當你以無模組的方式啟動 Asterisk 的話,是可以從控制台手動加載每個所需模組。但這不是你想要的產品方式,這種無模組的啟動方式通常用來做系統性能調整的用途,你想消除不需要的模組以達成特定的Asterisk的應用程序下才有用。

Asterisk 的模組分類如下:
• 應用程式
• 橋接模組
• 通話詳細記錄 (CDR)模組
• 通道事件記錄模組 (CEL)
• 通道驅動
• Codec 翻譯器
• Format 解譯器
• 撥號計劃功能
• PBX 模組
• 資源模組
• 加值模組
• 測試模組

因為內容太多了,後面會分別介紹上面的模組,而不是整合在一篇。

Asterisk : The Cookbook 食譜 005 : 大不同

Q005: Aasterisk 與傳統電信交換站最大的不同在哪兒呢?

底下我們用圖來解讀比較直觀,從底下的圖也可以看出來為什麼 Asterisk 會以英文的『星號 * 』來命名。

因為電信的發展是歷史的演進,不同時代的電信設備通過不同的硬體架構互相交換訊息來達成彼此溝通。而 Asterisk 則是數位化的,對 Asterisk 而言,這些輸入輸出都以相同的角度去面對,換句話說,Asterisk 不具有中繼或站的內部概念。在Asterisk內部,一切進入或輸出系統的資訊都是通過某種渠道傳遞。Asterisk 有許多不同類型的通道,對Asterisk 而言這些通道的撥號都是用類似的方式處理。這意味著,例如,一個內部用戶可以在一個外部中繼(例如,手機)的端部存在,與在內線的端部的撥號方式都是用完全一樣的方式處理。



2016/01/25

Asterisk : The Cookbook 食譜 004 - 技術支援

Q004: 使用 Asterisk 會不會變成技術孤兒(得不到任何技術支援)?

採用Asterisk 的引人注目的優勢之一正是背後有著開發並支持它的充滿激情的網路社群。這個社群主要是以 Digium公司為首,這家公司非常清楚的Asterisk的文化​​意義,同時具有對未來的樂觀看法。

其中一個Asterisk社群更強大的邊際能量是它催生了電信,網絡和信息技術專業人士之間彼此熱誠的合作。在Asterisk 被普及化之前,這些領域裡的專業人士是彼此隔行如隔山的彼此各自走各自的路,甚至一直處於相互衝突、競爭的地位。在Asterisk社群裡,他們卻是互相喜歡對方的技術,而這些合作的意義不可低估。

Asterisk 社辭目前面臨的一個挑戰是新用戶的迅速湧入。現有社群的成員一般都是歡迎新成員的,但他們技術是持續不斷的往前走,誰能要求他們能不厭其煩的持續不斷的回答問題呢?所以每個人提出的問題,其答案往往只能自己獨立實驗來獲得自己的理解。前提是這些提問者願意花一些時間來研究和實驗。

很顯然,我們指的新用戶常常是不屬於任何特定類型的技術人員。雖然有些人會很樂意花時間試驗和閱讀各個在布落格上其他人的苦難經驗。也有很多人更是因為熱衷於簡單的解答而對這項技術的提問完全不感興趣。他們希望有一個簡單,直接,一步一步的指導,那將讓他們運行起來,然後描述實現常用功能(如語音信箱,自動話務員,等等)的最佳方法的一些明智的例子。嗯嗯,就是說,他們只想笨笨的照做,卻又不關心技術本身,然後遇到問題就又想直接找到解答照做,卻對問題的答案本身不願進行了解。

對專業社群中的成員,他們(正確地)覺察到Asterisk是像一個Web開發語言。對其他成員來說,這反而是沒有任何意義,很明顯,這樣的認知會讓人沉浸在欣賞Asterisk 微妙之處。但是人們總會要求一步一步的指導,卻無法期待 Asterisk像一個Web開發語言能提供他們解答。

很顯然,不可能有一種方法適合每個人。 Asterisk就像是一個全新的動物,需要一個完全不同的思維方式。當你探索社群,你會找到它包括許多不同的技術和不同的態度。

社群中的某些人對新進人員無法保有足夠的耐心,但是這往往是由於他們的熱情於研究,而不是因為他們不歡迎你的參與。意思就是說,如果你有問題,只要你有足夠的耐心,相信你一定也能找到有足夠耐心的人來幫你解答。

Mailing List: http://lists.digium.com
Wiki: http://wiki.asterisk.org
收集大量資訊的 Wiki, 有不少已經是歷史的塵埃,但是仍然值得一讀:
http://www.voip-info.org
IRC: irc.freenode.net/ 至少有兩個頻道 #asterisk and #asterisk-dev




Asterisk : The Cookbook 食譜 003 - 功能摘要

Q003: Asterisk 會不會太簡單了?我想做轉接、視訊會議、多方通話...

Asterisk 是專業的,而且我們也相信實際上也沒有任何一家電信廠商可以不計任何代價滿足大家的需求。對 Asterisk 而言,這些都是可以做到的,只要您付出些時間閱讀本系統食譜。

我們也相信,世界上已經有相當多的電信商其實背後是採用 Asterisk 來提供各種豐富的服務,而這些是那些沒有採用 Asterisk 的電信商做不到的。

底下我就不翻譯,直接列出幾個(其實是一大堆)Asterisk 能夠提供的電信服務:


  1. Call Features
    1. ADSI On-Screen Menu System
    2. Alarm Receiver
    3. Append Message
    4. Authentication
    5. Automated Attendant
    6. Blacklists
    7. Blind Transfer
    8. Call Detail Records
    9. Call Forward on Busy
    10. Call Forward on No Answer
    11. Call Forward Variable
    12. Call Monitoring
    13. Call Parking
    14. Call Queuing
    15. Call Recording
    16. Call Retrieval
    17. Call Routing (DID & ANI)
    18. Call Snooping
    19. Call Transfer
    20. Call Waiting
    21. Caller ID
    22. Caller ID Blocking
    23. Caller ID on Call Waiting
    24. Calling Cards
    25. Conference Bridging
    26. Database Store / Retrieve
    27. Database Integration
    28. Dial by Name
    29. Direct Inward System Access
    30. Distinctive Ring
    31. Distributed Universal Number Discovery (DUNDi™)
    32. Do Not Disturb
    33. E911
    34. ENUM
    35. Fax Transmit and Receive
    36. Flexible Extension Logic
    37. Interactive Directory Listing
    38. Interactive Voice Response (IVR)
    39. Local and Remote Call Agents
    40. Macros
    41. Music On Hold
    42. Music On Transfer:
      1.   Flexible Mp3-based System
      2.   Random or Linear Play
      3.   Volume Control
    43. Privacy
    44. Open Settlement Protocol (OSP)
    45. Overhead Paging
    46. Protocol Conversion
    47. Remote Call Pickup
    48. Remote Office Support
    49. Roaming Extensions
    50. Route by Caller ID
    51. SMS Messaging
    52. Spell / Say
    53. Streaming Hold Music
    54. Supervised Transfer
    55. Talk Detection
    56. Text-to-Speech (via Festival)
    57. Three-way Calling
    58. Time and Date
    59. Transcoding
    60. Trunking
    61. VoIP Gateways
    62. Zapateller
    63. Voicemail:
      1.   Visual Indicator for Message Waiting
      2.   Stutter Dialtone for Message Waiting
      3.   Voicemail to email
      4.   Voicemail Groups
      5.   Web Voicemail Interface
  2. Computer-Telephony Integration
    1. Asterisk Gateway Interface (AGI)
    2. Asterisk Manager Interface (AMI)
    3. Asterisk REST Interface (ARI)
    4. Outbound Call Spooling
  3. Scalability
    1. TDMoE (Time Division Multiplex over Ethernet)
    2. Allows direct connection of Asterisk PBX
    3. Zero latency
    4. Uses commodity Ethernet hardware
    5. Voice-over IP
    6. Allows for integration of physically separate installations
    7. Uses commonly deployed data connections
    8. Allows a unified dialplan across multiple offices
  4. Speech
    1. Cepstral TTS
    2. Lumenvox ASR
  5. Codecs
    1. ADPCM
    2. CELT (pass through)
    3. G.711 (A-Law & μ-Law)
    4. G.719 (pass through)
    5. G.722
    6. G.722.1 licensed from Polycom®
    7. G.722.1 Annex C licensed from Polycom®
    8. G.723.1 (pass through)
    9. G.726
    10. G.729a
    11. GSM
    12. iLBC
    13. Linear
    14. LPC-10
    15. Speex
    16. SILK
  6. VoIP Protocols
    1. Google Talk
    2. H.323
    3. IAX™ (Inter-Asterisk eXchange)
    4. Jingle/XMPP
    5. MGCP (Media Gateway Control Protocol
    6. SCCP (Cisco® Skinny®)
    7. SIP (Session Initiation Protocol)
    8. UNIStim
  7. Traditional Telephony Protocols
    1. E&M
    2. E&M Wink
    3. Feature Group D
    4. FXS
    5. FXO
    6. GR-303
    7. Loopstart
    8. Groundstart
    9. Kewlstart
    10. MF and DTMF support
    11. Robbed-bit Signaling (RBS) Types
    12. MFC-R2 (Not supported. However, a patch is available)
  8. ISDN Protocols
    1. AT&T 4ESS
    2. EuroISDN PRI and BRI
    3. Lucent 5ESS
    4. National ISDN 1
    5. National ISDN 2
    6. NFAS
    7. Nortel DMS100
    8. Q.SIG



Asterisk : The Cookbook 食譜 002 - Safe


Q002: 使用 Asterisk 安全嗎?
Asterisk 可以說是駭客的電信局。不要誤解駭客的意思,我們可以聲稱是因為駭客的存在才有網際網路,這是個複雜的故事,在此只是想要向那些在背後默默付出的技術人員致敬。不要害怕這個詞,因為有這些駭客的存在,我們的網際網路才有可能更加安全的可能性(否則我們每個人都會被那些大公司賣了還幫他們數錢)。Asterisk 是安全的,也是彈性的,主要就是因為有大量的駭客人員參與開發。是的,也因此我才能在這邊聲稱我們可以自行架設免費的電信局端。

Asterisk : The Cookbook 食譜 001 - what

首先聲明:
安裝環境主要是針對 Ubuntu, 包括 15.10-Desktop, 14.04.3-server。
不過我的電腦都不是乾淨的,所以安裝時相依套件可能會因為您的電腦而有變化,如果有問題請提出。

Q: Asterisk 是什麼?
Asterisk 是用來實作 VoIP 交換機的軟體堆疊,我相信它能縮小傳統電話和網絡電話的差距,讓您能夠輕鬆自行架設電信局端。

我們似乎已經忘記了,電話的目的是為了讓人們進行交流。這是一個簡單的目標,通過網際網路照理應該相當容易實現這個目標,但是為什麼我們仍然必須付高昂的費用來打電話呢?當年的 Skype 真正要落實打電話仍然必須付費用,而且普及率仍然無法在台灣落實,這其中的原因是什麼呢?我只能說,軟體技術是相當低的,這系列的文章主要就是說明這件事。

Asterisk 從 1999 就以開放源碼的型式出發,到目前為止,它整合了 Zapata 技術專案,Zapata 技術專案的整合讓 Asterisk 能夠提供公共交換電話網(PSTN)接口,使得軟體 VoIP 可以跟實體電信局端對接。意思就是透過 Asterisk 您就可以有機會撥打遠洋國際電話,也可以實際打到朋友的手機。當然這中間若有與其他電信局端對接的話,仍然要付電信費用。話又說回來,如果您與朋友都能透過 VoIP 對話的方式就可以享受無費用的通話囉。