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

cdr_adaptive при attended transfer

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

Модератор: april22

cdr_adaptive при attended transfer

Сообщение shader » 14 мар 2017, 14:33

Добрый день.
имею: 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
shader
 
Сообщений: 104
Зарегистрирован: 09 авг 2013, 10:33

Re: cdr_adaptive при attended transfer

Сообщение ded » 14 мар 2017, 14:40

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

Re: cdr_adaptive при attended transfer

Сообщение ded » 14 мар 2017, 15:33

поиск: audiohook inherit
ded
 
Сообщений: 14060
Зарегистрирован: 26 авг 2010, 19:00

Re: cdr_adaptive при attended transfer

Сообщение shader » 14 мар 2017, 18:41

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.
shader
 
Сообщений: 104
Зарегистрирован: 09 авг 2013, 10:33

Re: cdr_adaptive при attended transfer

Сообщение virus_net » 15 мар 2017, 09:18

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

ENUMER - звони бесплатно и напрямую.
virus_net
 
Сообщений: 2293
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: cdr_adaptive при attended transfer

Сообщение shader » 15 мар 2017, 09:55

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,...) Где я, предполагаю, должен изменять нужные переменные. Но! в этот момент мне доступны для модификации переменные канала "Б" -> "В"!
shader
 
Сообщений: 104
Зарегистрирован: 09 авг 2013, 10:33

Re: cdr_adaptive при attended transfer

Сообщение virus_net » 15 мар 2017, 12:00

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

Re: cdr_adaptive при attended transfer

Сообщение shader » 15 мар 2017, 15:07

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

Re: cdr_adaptive при attended transfer

Сообщение shader » 17 мар 2017, 11:16

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

Re: cdr_adaptive при attended transfer

Сообщение virus_net » 18 мар 2017, 10:00

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

ENUMER - звони бесплатно и напрямую.
virus_net
 
Сообщений: 2293
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

След.

Вернуться в Разработка

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

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

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