CALL文件使用說明
一、CALL文件工作原理
Asterisk Call Files是一個結構化文件,當它被移動到一個指定的目錄下,它就能夠自動的被Asterisk程序調用。它是一種很好的自動外呼方式,不像AGI、AMI和dialplan那樣複雜,只需瞭解簡單的知識就可以輕鬆使用它。
1. 將call文件移動到/var/spool/asterisk/outgoing/目錄下,這個目錄可以在asterisk.conf文件中自行設置如:
astspooldir => /var/spool/asterisk
2. 確保pbx_spool.so模塊被加載
3. 如果call文件的修改時間大於Asterisk系統的當前時間,那麼 Asterisk在執行該call文件之前會一直檢測call文件的修改時間是否等於系統當前時間,如果相等的話則執行該call文件。
4. Asterisk會檢測並執行call文件裏面的指令。Call文件可以調用Asterisk中的context,也可以執行撥號方案中的application。
二、CALL文件基本語法
主叫設置
Channel: SIP/8002 à主叫通道
CallerID: "Some Name" <1234>à主叫名稱/號碼
MaxRetries: 3 à呼叫失敗嘗試次數,實際呼叫次數= MaxRetries+1
RetryTime: 60 à呼叫失敗後重試之間的時間間隔
WaitTime: 15 à呼叫後主叫振鈴時長
Account: à
被叫設置
Context: from-internal à主中接通手要連接的地方(context)
Extension: 8003 àextension
Priority: 1 àpriority
Set: à設置通道變量
Application: àapplication
Data: àapplication的參數
通用設置
Set: à設置通道變量
AlwaysDelete: Yes à如果call文件修改時間大於當前系統時間,則不刪除
Archive: Yes à將執行完畢的call文件移動到outgoing_done目錄下
三、CALL文件使用實例
1、分機8002呼叫分機8003
Channel: SIP/8002
CallerID: "SomeName" <1234>
MaxRetries: 3
RetryTime: 60
WaitTime: 15
Account:
Context: from-internal
Extension: 8003
Priority: 1
Set:
Application:
Data:
Set:
AlwaysDelete: Yes
Archive: Yes
執行過程:
(1)該文件執行後,分機8002首先振鈴,振鈴15秒(WaitTime)後停止振鈴。
(2)過45秒(RetryTime-WaitTime)後,分機8002再次振鈴。如果分機8002一直沒人接聽,那麼它將振鈴四次(MaxRetries+1)後不再振鈴,即系統最多呼叫分機8002四次。
(3)當分機8002被接起後,系統將分機8002連接到 from-internam, 8003, 1 (Context, Extension, Priority),即開始呼叫8003分機。
(4)分機8003接起後,分機8002即可與其正常通話。
CALL文件執行以後系統生成的日誌文件:
分機8002第一次振鈴時被接起
Channel: SIP/8002
CallerID: "SomeName" <1234>
MaxRetries: 3
RetryTime: 60
WaitTime: 15
Account:
Context: from-internal
Extension: 8003
Priority: 1
Set:
Application:
Data:
Set:
AlwaysDelete: Yes
Archive: Yes
StartRetry: 3540 1(1292902977)
Status: Completed
分機8002第二次振鈴時被接起
Channel: SIP/8002
CallerID: "SomeName" <1234>
MaxRetries: 3
RetryTime: 60
WaitTime: 15
Account:
Context: from-internal
Extension: 8003
Priority: 1
Set:
Application:
Data:
Set:
AlwaysDelete: Yes
Archive: Yes
StartRetry: 3540 1(1292903468)
EndRetry: 3540 1(1292903463)
StartRetry: 3540 2(1292903489)
Status: Completed
分機8002四次振鈴全部沒有被接起
Channel: SIP/8002
CallerID: "SomeName" <1234>
MaxRetries: 3
RetryTime: 60
WaitTime: 15
Account:
Context: from-internal
Extension: 8003
Priority: 1
Set:
Application:
Data:
Set:
AlwaysDelete: Yes
Archive: Yes
StartRetry: 3540 1(1292903137)
EndRetry: 3540 1(1292903132)
StartRetry: 3540 2(1292903158)
EndRetry: 3540 2(1292903153)
StartRetry: 3540 3(1292903179)
EndRetry: 3540 3(1292903174)
StartRetry: 3540 4(1292903200)
Status: Expired
2、外線手機撥打外線手機:
Channel: DAHDI/g0/13424246447
CallerID: "SomeName" <1234>
MaxRetries: 3
RetryTime: 60
WaitTime: 15
Account:
Context: from-internal
Extension: 13310876461
Priority: 1
Set:
Application:
Data:
Set:
AlwaysDelete: Yes
Archive: Yes
四、附加說明
u 生成CALL文件時不應該直接在/var/spool/asterisk/outgoing/目錄下面生成,因爲系統會一直檢測這個目錄下面的文件並嘗試去執行,如果直接在該目錄下面編輯文件,可能會出現未知問題。
u 我們一般會在/var/spool/asterisk/tmp/目錄下面先把CALL生成好,然後再將該CALL文件搬到/var/spool/asterisk/outgoing/目錄下。在將移動CALL文件到/var/spool/asterisk/tmp/目錄下面時,只能用mv命令而不能使用cp命令。因爲cp命令會將CALL文件的修改時間改爲當前時間,而使用mv命令時,CALL文件的修改時間將保持不變。只有使用mv命令時,我們生成的CALL才能在我們指定的時間開始啓動執行。
u 我們知道CALL只有在系統時間等於CALL文件修改時間時纔會執行,所以我們將CALL文件生成好後還必須修改CALL的修改時間,讓CALL在我們期望的時間啓動執行。修改文件修改時間可以使用如下命令:
touch –t [[CC]YY]MMDDhhmm[.SS] filename
CC: 年份的前兩位數字
YY: 年份的後兩位數字
MM: 月份,有前導零
DD: 日,有前導零
hh: 時,有前導零
mm: 分,有前導零
SS: 秒,有前導零
例如:
touch –t 201012211010.10 test.call
上述命令將test.call文件的修改時間改爲2010-12-21 10:10:10
u CALL文件在呼叫失敗後會根據參數MaxRetries來進行再次嘗試呼叫,MaxRetries的默認值爲0,也就是說CALL實際最大呼叫次數= MaxRetries+1。
u 參數WaitTime是設置主叫的振鈴時長,參數RetryTime是設置呼叫失敗再次嘗試呼叫的時間間隔。值得注意的是,RetryTime包括WaitTime在內。例如:
RetryTime: 60
WaitTime: 15
當主叫分機振鈴15秒後停止不再振鈴,接着只需等待45秒便開始再次振鈴。
因此當RetryTime小於或等於WaitTime時,系統在執行CALL文件時可能會與我們的期望結果不一樣。
u 爲了對CALL文件執行後的結果進行統計分析,我們應該將參數Archive設置爲Yes,這樣當CALL文件執行完成後,會在/var/spool/asterisk/outgoing_done/目錄下生成同名文件。該文件裏面記錄了系統從什麼時候發起第一次呼叫,什麼時候開始第二次呼叫,最終呼叫成功還是失敗等信息。
u 當主叫接通電話,系統即認爲CALL文件成功執行。主叫接通後開始呼叫被叫,系統執行時是不關心被叫是否被接通。