在达到Maxretries之前删除Asterisk调用文件

时间:2011-10-05 12:51:58

标签: asterisk telephony

我创建了一个Asterisk call file,其中Maxretries = 3,RetryTime = 300.偶尔我需要在2次重试后删除调用文件。我如何阻止Asterisk进行第三次呼叫尝试?

1 个答案:

答案 0 :(得分:4)

如果不从假脱机目录中删除调用文件,目前无法做到这一点(通常是:/ var / spool / asterisk / outgoing)。

你需要做什么(如果你需要杀死重试次数),是:

rm /var/spool/asterisk/outgoing/<callfilename>

另一种处理方法是通过拨号方案回调实用。例如:

假设您的调用文件如下所示:

Channel: SIP/flowroute/18002223333
Context: my_code
Extension: s
Priority: 1
MaxRetries: 3

并且您希望让您的callfile重试两次(最多)。您可以按如下方式编写拨号方案代码(以实现my_code):

[my_code]

exten => s,1,ExecIf($[ !${DB_EXISTS(call/tries)} ]?Set(DB(call/tries)=0))
exten => s,n,Set(DB(call/tries)=${MATH(${DB(call/tries)}+1,i)})
exten => s,n,NoOp(your code here...)
exten => s,n,GotoIf($[ ${DB(call/tries)} > 1 ]?end,1)

exten => end,1,DBDel(call/tries)
exten => end,n,System(rm /var/spool/asterisk/outgoing/<name>)
exten => end,n,Hangup()

这将把调用文件的状态存储在Asterisk数据库中,并进行一些手动计数以验证是否已尝试调用&lt; 3次(如果没有,那么它会挂断)。

这个方法显然不是最优的(因为从你编写的应用程序实际调整调用文件的行为中控制这种行为要容易得多),但它会起作用。

希望这有帮助!