Обнаружил странную проблему.
Есть asterisk 1.2 (SVN 16955 на 2006-03-05).
Написал ряд AGI-скриптов для регистрации агентов и сбора статистики по агентам.
Регистрация делается из AGI путем вызова AgentCallbackLogin на отдельный extention agents.
Разрегистрация -- asterisk -rx "agent logoff Agent/XXXX".
Теперь о сути проблемы:
Входящий звонок попадает в очередь, затем на агента.
extention agents описан так:
exten => _XXXX,1,DeadAGI(agentdial.agi)
В agentdial.agi делается вызов DIAL(SIP/XXXX,,g).
Затем я получаю статистику из переменных DIALSTATUS, ANSWEREDTIME и других.
Так вот проблема в том, что application Dial сразу, после поднятия трубки на SIP/XXXX завершает свою работу, т.е. выполняет только функцию соединения.
В нормальной ситуации, Dial ожидает завершения звонка и возвращает корректные переменные.
DIALSTATUS возвращает правильное значение, _НО_ ANSWERDTIME возвращает всегда 0!
Статистику не собрать и т.д. и т.п.
Связь при этом не рвется (канал поднят).
Наличие или отсутствие опции 'g' в Dial положительного эффекта не дают, что и понятно.
Пробовал делать так:
(agents)
exten => _XXXX,1,Hangup
Сижу в очереди, звонки на агента отбиваются по hangup.
Все верно.
(agents)
exten => _XXXX,1,Dial(SIP/0005)
exten => _XXXX,n,NoOp(DIALSTATUS=${DIALSTATUS})
exten => _XXXX,n,NoOp(AnswerTime: ${ANSWEREDTIME} seconds...)
Звонок приходит на SIP/0005 и сразу после поднятия трубки идет переход к следующему приоритету!
Что делать?
Подскажите, куда копать?
И нормальное ли это поведение?