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文件成功执行。主叫接通后开始呼叫被叫,系统执行时是不关心被叫是否被接通。