<u>Asterisk 1.6
Создаю call file:
Channel: LOCAL/123456@context/n
MaxRetries: 10
RetryTime: 10
WaitTime: 30
Context: callback
Extension: 123
Priority: 1
После начала дозвона туда дописывается следущее:
StartRetry: 2862 1 (1346937346)
DelayedRetry: 2862 0 (1346937356)
DelayedRetry: 2862 0 (1346937366)
EndRetry: 2862 1 (1346937367)
StartRetry: 2862 2 (1346937387)
EndRetry: 2862 2 (1346937388)
StartRetry: 2862 3 (1346937408)
DelayedRetry: 2862 2 (1346937418)
В "StartRetry: 2862 3 (1346937408)" число 3 - номер попытки дозвона. Вопрос - как этот номер получить из asterisk'a?
Ну и просто интересно: а что это за загадочное число: 2862, и что означает второе число в DelayedRetry?
Всем спасибо за ответы. Свое решение:
Ввел 2 переменные: кол-во неудачных попыток, имя файла.
Далее в диалплане:
exten => failed,n,Set(Retry_NUM=${MATH(${Retry_NUM}+1)})<br>
exten => failed,n,System(echo "Set: Retry_NUM=${Retry_NUM}" >> /var/spool/asterisk/outgoing/${Call_File})
Команда System дописывает переменную в конец файла. А астериск смотрит посл. добавленную переменную. ${Retry_NUM}
всегда отображает верную информацию.
Время файла - важная характеристика колл файла, т.к. именно в нем находиться время следущей попытки дозвона. Но! В данном способе изменение времени - не проблема, т.к. оно моментально меняется астериском после завершение контекста failed (EndRetry).
нет такой переменной в диалплане.
как посоветовали ранее считать надо в диалплане, только самому (agi/odbc/astdb по вкусу), отлавливая неудачи в exten fail.
Считать количество дозвонов лучше в контексте context через функции диаплана любым из множества способов. Выявить все переменные канала поможет утилита DumpChan().
первое число - случайное.
второе число - номер попытки.
delayed - значит попытка еще идет. соответвенно номер попытки 0.
третье число - время в фомрате unixtimestamp.
самый простой способ посмотреть текущую попытку такой
1) в файл добавляем
Set: filename=123456.call
(соответсвенно именуем файл)
в астериске смотрим
cat /var/spool/asterisk/${filename}|grep Start|tail -n 1|cut -f 3
например в аги скрипте или делаем скрипт который ложит это в файл а потом readfile.
но правильно делается не так. если вам важно попытки - ставьте retry=1 и делайте внешний скрипт который создает попытки самостоятельно(и выставляет переменные).
ну или вы всегда можете дописать spool чтоб он эту попытку порписывал в переменную.
Задан: Sep 7 '12
Просмотрен: 1,099 раз
Обновлен: Sep 10 '12
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.
замечательное решение.правда есть проблемка. это изменяет время изменения файла и + создает интерпретатор каждый раз. но вам это не важно видимо.
meral (Sep 10 '12)editконечно не проблема. это как разрезать руку человеку каждый раз когда вам надо его пометить и говорить что это не пробелма. оно ж заживает до ледуюещего раза. короче, рабоатет - радуйтесь. перестанет работать - не пишите нам вопросы,ок? астериск счиатет что эти файлы НЕ меняются в процессе работы. если вы его разачаровываете - то это ваши пробелмы.
meral (Sep 10 '12)editАвтор из людей , которые трусы через голову одевают )
zzuz (Sep 10 '12)edit