Asterisk 13.17.0 во Freepbx Хочу писать в cdr имя агента, который ответил на вызов. Модифицировал контекст вызова очереди след образом:
exten => 500,n(qcall),Queue(500,${QOPTIONS},,${QAANNOUNCE},${QMAXWAIT},${QAGI},,set-accountcode,s,1,${QRULE},${QPOSITION})
Т.е. добавил опцию вызова Gosub когда оператор отвечает на звонок. Вот сам контекст, который вызывается очередью:
[set-accountcode]
exten => s,1,Set(CHANNEL(accountcode)=${MEMBERNAME})
exten => s,n,Verbose(<<<<<<<<<<<<<<set as ${MEMBERNAME}>>>>>>>>>>>>>>>)
exten => s,n,Return
В консоли видно как отрабатывает Verbose, показывая значение переменной MEMBERNAME (она не пустая), значит при ответе оператора контекст set-accountcode выполняется и переменная accountcode устанавливается. Но в базе cdr поле accountcode записи этого звонка пустое. Не записывается оно никак. Если же установить accountcode ПЕРЕД вызовом Queue, то в базу оно попадает корректно.
Как обновлять accountcode во время выполнения Queue?
Скорее всего после ForkCDR появится, тк каналы-то разные. Но account будет плодить файлы логов. Для подобных же записей существует userfield Еще можно можно после hangup в deadagi собрать все переменные в одну строку и засунуть в userfield.
У вас проблема не в диалплане. Диалплан нормальный.
Место плохое. В этом месте много чего не работает, скорее всего и CHANNEL
Ставьте в материнском канале.
А вообще правильно парсить queue_log
exten => s,1,Set(CDR(accountcode)=${MEMBERNAME})
Задан: Mar 13 '19
Просмотрен: 410 раз
Обновлен: Mar 14 '19
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.