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

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

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

Модератор: april22

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

Сообщение Merk83 » 13 мар 2019, 21:17

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?
Merk83
 
Сообщений: 10
Зарегистрирован: 13 мар 2019, 20:45

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

Сообщение ded » 14 мар 2019, 11:51

Код: выделить все
[set-accountcode]
exten => s,1,Set(CDR(accountcode)=${MEMBERNAME})
exten => s,n,Verbose(<<<<<<<<<<<<<<set as ${MEMBERNAME}>>>>>>>>>>>>>>>)
exten => s,n,Return
ded
 
Сообщений: 14017
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение Merk83 » 14 мар 2019, 14:15

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

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

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

Сообщение ded » 14 мар 2019, 16:25

${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 - перезаписываемые.
ded
 
Сообщений: 14017
Зарегистрирован: 26 авг 2010, 19:00

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

Сообщение BorisTheBlade » 14 мар 2019, 20:41

gosub выполняется в канале оператора, CDR пишет инициатор звонка, попробуйте в AGI писать, он на строне вызывающего запускается.
BorisTheBlade
 
Сообщений: 126
Зарегистрирован: 14 фев 2011, 15:24

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

Сообщение union1111 » 09 апр 2019, 17:42

проверьте в cli при вызове какой используются канал в Queue() и какой в [set-accountcode] , возможно они разные, тогда и некуда писать SET CDR
union1111
 
Сообщений: 1
Зарегистрирован: 09 апр 2019, 17:33


Вернуться в Готовые VoIP дистрибутивы

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

© 2008 — 2019 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH