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

cdr_adaptive при attended transfer

Раздел для разработчиков для обсуждения программных и аппаратных продуктов и их реализации.

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

shader
Сообщения: 117
Зарегистрирован: 09 авг 2013, 10:33

cdr_adaptive при attended transfer

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

Re: cdr_adaptive при attended transfer

Сообщение ded »

Знаете что такое CEL?
ded
Сообщения: 15618
Зарегистрирован: 26 авг 2010, 19:00

Re: cdr_adaptive при attended transfer

Сообщение ded »

поиск: audiohook inherit
shader
Сообщения: 117
Зарегистрирован: 09 авг 2013, 10:33

Re: cdr_adaptive при attended transfer

Сообщение 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.
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: cdr_adaptive при attended transfer

Сообщение virus_net »

Всегда есть возможность добавить в таблу CDR свои кастомные поля и заполнять их как угодно и когда угодно, а потом ориентироваться по ним где угодно и как угодно.
Так же есть переменная linkedid, которая вместе с uniqueid показывает какие каналы были связаны между собой.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
shader
Сообщения: 117
Зарегистрирован: 09 авг 2013, 10:33

Re: cdr_adaptive при attended transfer

Сообщение 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,...) Где я, предполагаю, должен изменять нужные переменные. Но! в этот момент мне доступны для модификации переменные канала "Б" -> "В"!
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: cdr_adaptive при attended transfer

Сообщение 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
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
shader
Сообщения: 117
Зарегистрирован: 09 авг 2013, 10:33

Re: cdr_adaptive при attended transfer

Сообщение shader »

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

Re: cdr_adaptive при attended transfer

Сообщение shader »

Обнаружил одну интересную вещь:
ПОменять значение accountcode (asterisk 14 пока юзаю) можно только до функции DIAL.
После DIAL команда Set(CHANNEL(accountcode)=foo) задает accountcode на нужное мне значение, в консоли печатает это значение, но ... в CDR выводит то значение, которые было установлено, до команды DIAL (или оригинальное поле accountcode абонента, если ДО dial модификаций не было)
Скажите, это так задумано? Или это asterisk 14?? :D
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: cdr_adaptive при attended transfer

Сообщение virus_net »

На оба вопроса предлагаем вам ответить самостоятельно и отписать тут.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH