В настоящее время нет способа сделать это без удаления файла вызовов из вашего каталога буферизации (обычно это: /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>
Этот метод, очевидно, не оптимален (так как намного проще управлять этим поведением из написанного вами приложения, которое на самом деле создает буферный файл), но он будет работать.
Надеюсь, это поможет!