VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

запись поля accountcode в cdr

Обо всем касательно FreePBX, MetPBX, TrixBox, Elastix, AstPBX и всех других дистрибутивов

Модераторы: april22, Zavr2008

Ответить
Merk83
Сообщения: 15
Зарегистрирован: 13 мар 2019, 19:45

запись поля accountcode в cdr

Сообщение Merk83 »

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?
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: запись поля accountcode в cdr

Сообщение ded »

Код: Выделить всё

[set-accountcode]
exten => s,1,Set(CDR(accountcode)=${MEMBERNAME})
exten => s,n,Verbose(<<<<<<<<<<<<<<set as ${MEMBERNAME}>>>>>>>>>>>>>>>)
exten => s,n,Return
Merk83
Сообщения: 15
Зарегистрирован: 13 мар 2019, 19:45

Re: запись поля accountcode в cdr

Сообщение Merk83 »

не работает так))
Еще и астериск ругается на то. что Set(CDR(.. устарело, типа используй Set(CHANNEL(

Похоже, когда очередь уже "Началась", R\W-поля CDR, доступные пользователю, уже недоступны для записи. Или же макрос, запускаемый очередью, выполняется для нового канала (который с агентом очереди, а не с клиентом). Учитывая, что в базу CDR во Freepbx пишутся данные по первому каналу, который содержит позвонившего в очередь, в итоге accountcode в базе пустое.
Пробовал использовать функцию SHARED(), но она пишет в отдельное пространство переменных и как потом передать это обратно в первый канал, в нужную мне переменную канала, ума не приложу.
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: запись поля accountcode в cdr

Сообщение ded »

${CDR(clid)} Caller ID
${CDR(src)} Source
${CDR(dst)} Destination
${CDR(dcontext)} Destination context
${CDR(channel)} Channel name
${CDR(dstchannel)} Destination channel
${CDR(lastapp)} Last app executed
${CDR(lastdata)} Last app's arguments
${CDR(start)} Time the call started.
${CDR(answer)} Time the call was answered.
${CDR(end)} Time the call ended.
${CDR(duration)} Duration of the call.
${CDR(billsec)} Duration of the call once it was answered.
${CDR(disposition)} ANSWERED, NO ANSWER, BUSY
${CDR(amaflags)} DOCUMENTATION, BILL, IGNORE etc
${CDR(accountcode)} The channel's account code.
${CDR(uniqueid)} The channel's unique id.
${CDR(userfield)} The channels uses specified field.
https://wiki.asterisk.org/wiki/display/ ... +Variables
Не знаю, зачем они там всё меняют. Вот в 16-м Астериске - https://wiki.asterisk.org/wiki/display/ ... nction_CDR
CDR()
Synopsis

Gets or sets a CDR variable.
Description

All of the CDR field names are read-only, except for accountcode, userfield, and amaflags. You may, however, supply a name not on the above list, and create your own variable, whose value can be changed with this function, and this variable will be stored on the CDR.
accountcode, userfield, and amaflags - перезаписываемые.
BorisTheBlade
Сообщения: 167
Зарегистрирован: 14 фев 2011, 14:24

Re: запись поля accountcode в cdr

Сообщение BorisTheBlade »

gosub выполняется в канале оператора, CDR пишет инициатор звонка, попробуйте в AGI писать, он на строне вызывающего запускается.
union1111
Сообщения: 1
Зарегистрирован: 09 апр 2019, 16:33

Re: запись поля accountcode в cdr

Сообщение union1111 »

проверьте в cli при вызове какой используются канал в Queue() и какой в [set-accountcode] , возможно они разные, тогда и некуда писать SET CDR
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH