Удалить файл вызовов Asterisk до достижения Maxretries - PullRequest
3 голосов
/ 05 октября 2011

Я создал файл вызовов Asterisk с Maxretries = 3 и RetryTime = 300. Иногда мне нужно удалить файл вызовов после 2 повторных попыток. Как бы я остановил Asterisk на третьей попытке вызова?

1 Ответ

4 голосов
/ 12 октября 2011

В настоящее время нет способа сделать это без удаления файла вызовов из вашего каталога буферизации (обычно это: /var/spool/asterisk/outgoing).

.

Что вам нужно сделать (если вам нужно убить попытки повторной попытки), это:

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

Другой способ справиться с этим - прагматично, с помощью ваших обратных вызовов. Например:

Допустим, ваш файл вызовов выглядит следующим образом:

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

И вы хотите, чтобы ваш файл вызовов повторил вызов два раза (максимум). Вы можете написать свой код набора номера (для реализации 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 и выполнит некоторый ручной подсчет, чтобы убедиться, что попытка вызова была предпринята <3 раза (если нет, то он зависнет). </p>

Этот метод, очевидно, не оптимален (так как намного проще управлять этим поведением из написанного вами приложения, которое на самом деле создает буферный файл), но он будет работать.

Надеюсь, это поможет!

...