Добрый день! Использую для отправки сообщений (в виде голосовых звонков) пользователям asterisk 1.8 + chan_datacard + E1550 модем. Отправляю голосовые звонки через /var/spool/asterisk/outgoing, помещая туда call-файлы.
Есть несколько вопросов по отлову ошибок и "затыков" очереди. Ситуация 1: в call файле указывается кол-во повторов и через которое время осуществлять повтор дозвона (MaxRetries, RetryTime). Ошибкой, при которой перебираются попытки дозвона - абонент сбрасывает, не поднимая трубку - это хорошо, но предположим, абонент будет недоступен и все попытки исчерпаются? call файл будет просто удален из outgoing. А как же тогда обрабатывать ощибки? например, я бы может и попробовал через час запустить повтор (предварительно записав в базу причину, по которой не доставил сообщение пользователю), но я не имею информации дозвонился ли asterisk в прошлый раз или нет. Ведь в результате успешного дозвона и окончания попыток дозвона - результат один, а именно - файл стирается из outgoing.
ситуация 2: Но вот, например, если в очереди в outgoing лежит 10 call файлов, то пока модем занят дозвоном и проигрыванием звука 1-му абоненту, остальные 9 call файлов считают все равно пытаются осуществлять дозвон, тем самым счетчик неудачных попыток в них увеличивается, и тем самым, например 8-9-10 файлы, если до них не успеет дойти очередь - безвозвратно исчезают, удаляются. Тут снова возникает вопрос, каким образом заставить работать очередь (обрабатывать call файлы) только в том случае, если модем свободен?
ситуация 3: как проверить перед очередой обработкой следующего call файла, зарегистрирован ли модем в сети? ведь если ее нет, пытаться что-то отправить не имеет смысла и очередь можно было бы поставить на паузу.
Заранее спасибо за помощь