Я создал файл вызова Asterisk с Maxretries = 3 и RetryTime. = 300. Иногда мне нужно удалить файл вызова после 2 попыток. Как я могу остановить Asterisk, делающую третью попытку звонка?
Удалить файл вызова Asterisk до достижения максимального количества попыток
Ответы (1)
В настоящее время нет способа сделать это, не удаляя файл вызова из вашего каталога спулинга (обычно: /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 раза (если нет, то произойдет зависание).
Этот метод, очевидно, не оптимален (поскольку гораздо проще контролировать такое поведение из написанного вами приложения, которое фактически подкачивает файл вызова), но он будет работать.
Надеюсь, это поможет!