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