Страница 1 из 2

cdr_adaptive при attended transfer

СообщениеДобавлено: 14 мар 2017, 14:33
shader
Добрый день.
имею: asterisk 14 с настроенным модулем cdr_adaptive (postgre)
Хочу: логгировать в базу адекватные CDR в случае, если абонент сделал attended transfer (Хотя бы исходящий абонента "Б" и исходящий от абонента "А" после перевода).
Логика такова:
абонент "А" звонит абоненту "Б" - создается канал (заполняется всякими переменными), формируется 1 CDR запись. Тут проблем нет (пока).
Затем абонент Б делает attended transfer абоненту "В", общается с ним какое-то время и кладет трубку.
Создаются 3 CDR записи, из которых одна - исходящий звонок "Б"-"В" (ловлю её и заполняю нужными переменными с помощью AGI в момент Hangup абонента "Б",
используя h - extension )
А далее, нерешаемая проблема:
после того, как абонент "А" поговорит с абонентом "С" (кладет трубку) с помощью той же h - extension, я формирую CDR запись успешно переведенного звонка с правильнйо длительностью, но ! Остальные переменные канала остаются точно такими же, как и до осуществления перевода. и по записи этой не ясно, был ли вообще
attended transfer или нет.
PS. Читал вот это: https://wiki.asterisk.org/wiki/display/ ... cification
И это: https://wiki.asterisk.org/wiki/display/ ... ation_Dial
Суть проихсходящего то ясна. Не ясно только как именно (в каком месте диалплана) можно управлять переменными из которых формуруются все CDR (при attended transfer). Т. е. как модифицировать переменные самого начального канала, чтобы он "знал", что он уже не входищий от абонента "А", а исходящий от абонента "Б"?
Смотрел в консоль при cdr set debug on. Интересующий меня момент - когда абонент "Б" кладет трубку. Но дальше, не получается.
PPSS. Смотрел в сторону CEL - 30 записей за один attended transfer - это круто. :o

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 14 мар 2017, 14:40
ded
Знаете что такое CEL?

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 14 мар 2017, 15:33
ded
поиск: audiohook inherit

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 14 мар 2017, 18:41
shader
core show function AUDIOHOOK_INHERIT

-= Info about function 'AUDIOHOOK_INHERIT' =-

[Synopsis]
DEPRECATED: Used to set whether an audiohook may be inherited to another
channel. Due to architectural changes in Asterisk 12, audiohook inheritance is
performed automatically and this function now lacks function.


Похоже, все-таки придется работать с cel.

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 15 мар 2017, 09:18
virus_net
Всегда есть возможность добавить в таблу CDR свои кастомные поля и заполнять их как угодно и когда угодно, а потом ориентироваться по ним где угодно и как угодно.
Так же есть переменная linkedid, которая вместе с uniqueid показывает какие каналы были связаны между собой.

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 15 мар 2017, 09:55
shader
virus_net, это было бы очень здорово! Я и так добавил в таблицу кучу своих кастомных полей (потому и юзаю cdr_adaptive) и все прекрасо работает, если нет attended transfer...И вообще на мой взгляд именно adaptive mode - это золотая середина, которой, имхо, стоит придерживаться. Но....у меня НЕ ПОЛУЧАЕТСЯ заполнить нужные мне поля в нужные моменты внремени.
Вот, вчера еще прочитал вот это:
https://wiki.asterisk.org/wiki/display/ ... e+Handlers
Но мне всеравно остаелся непонятно, как управлять переменными для связанного канала.
Поясню проблему конкретнее:
1. У меня есть звонок. "А" -> "Б". В момент окончания разговора я вывожу переменные канала в лог (agi, perl)
2. У меня есть звонок "А" -> "Б" -> (attended transfer) -> "В" ... "А" -> "В" И момент окончания разговора "А" -> "В" набор переменных точно такой же, как и в случае 1 ("А" -> "Б"). Как модифицировать эти переменные ПОСЛЕ (attended transfer) я пока не понимаю.(Ибо набор переменных этого канала формируется ДО осуществления перевода)
на практике (в логах)я вижу, что в момент, когда абонент "Б" кладет трубку для непосредственного осуществления перевода звонка (когда он дозвонился абоненту "В" и сообщил ему о том, что с ним желает говорить абонент "А") отрабатывает hangup extension (=> h,1,...) Где я, предполагаю, должен изменять нужные переменные. Но! в этот момент мне доступны для модификации переменные канала "Б" -> "В"!

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 15 мар 2017, 12:00
virus_net
shader писал(а):имею: asterisk 14

Читаем: https://forum.asterisk.ru/viewtopic.php?p=73465#p73465
Так что возможно тут "приколы нашего городка".
shader писал(а):Как модифицировать эти переменные ПОСЛЕ (attended transfer)

google -> TRANSFER_CONTEXT asterisk
google -> fucn shared asterisk

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 15 мар 2017, 15:07
shader
Благодарю. Не знал, что 14 asterisk нестабилен.
Попробую пересобраться на 13й.
А __TRANSFER_CONTEXT у меня задается динамически (правда, ранее я об этом не упоминал) при входящем звонке в виде отдельного контекста, в котором я задаю нужные мне переменные для CDR. И оно корректно отрабатывает, когда абонент "Б" звонит абоненту "С" (а абонент "А" слушает музычку)
На функцию Shared посмотрю, спасибо.

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 17 мар 2017, 11:16
shader
Обнаружил одну интересную вещь:
ПОменять значение accountcode (asterisk 14 пока юзаю) можно только до функции DIAL.
После DIAL команда Set(CHANNEL(accountcode)=foo) задает accountcode на нужное мне значение, в консоли печатает это значение, но ... в CDR выводит то значение, которые было установлено, до команды DIAL (или оригинальное поле accountcode абонента, если ДО dial модификаций не было)
Скажите, это так задумано? Или это asterisk 14?? :D

Re: cdr_adaptive при attended transfer

СообщениеДобавлено: 18 мар 2017, 10:00
virus_net
На оба вопроса предлагаем вам ответить самостоятельно и отписать тут.