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

Attended transfer и variable inheritance

Проблемы Asterisk без вэб-оболочек и их решения

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

Ответить
kanavis
Сообщения: 3
Зарегистрирован: 15 окт 2013, 17:45

Attended transfer и variable inheritance

Сообщение kanavis »

Всем хорошего настроения!
Есть задача сделать так, чтобы при сохранении логов звонков в базу все звонки, которые были выполнены друг за другом при помощи transfer в очередь (как blind, так и attended), были связаны при помощи одного общего id для логов во внешней БД. Назовём его callchain.

Я попробовал решить эту задачу при помощи наследуемой переменной (__CALLCHAIN).
Вот тестовый вариант, который выводит и назначает одинаковый ID для проверки наследуемости переменных, в финальном будет использоваться AMI:

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

[macro-callchain]
exten   =>  s,1,NoOp(CALLCHAIN)
exten   =>  s,2,Set(__CALLCHAIN=1234)

[queues]
exten   =>  2803,1,Macro(callchain)
exten   =>  2803,2,Queue(noc,tT,,,600)
exten   =>  2804,1,Macro(callchain)
exten   =>  2804,2,Queue(support,tT,,,600)
Далее я звоню в очередь 2804, беру трубку с агента этой очереди и трансферю звонок в очередь 2803
Так вот, если я делаю blind transfer - всё хорошо:

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

тут мы звоним в 2804:
NoOp("")
....
тут мы трансферим в 2803:
NoOp(1234)
А если я делаю attended transfer - то переменная не передаётся:

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

тут мы звоним в 2804:
NoOp("")
....
тут мы трансферим в 2803:
NoOp("")
Нормальное ли это поведение и это как-то связано с тем, что канал звонка агента из 2804 в очередь 2803 не имеет отношения к предыдущему, и надо использовать какие-то внешние состояния типа asterisk db, либо у меня что-то не так настроено и есть способ заставить переменную передаваться при attended transfer в канал-супервизор?
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Attended transfer и variable inheritance

Сообщение Vlad1983 »

переменные могут наследоваться при создании одного канала другим, чего не происходит при Attended transfer
ЛС: @rostel
kanavis
Сообщения: 3
Зарегистрирован: 15 окт 2013, 17:45

Re: Attended transfer и variable inheritance

Сообщение kanavis »

Спасибо за ответ.
Правильно ли я понимаю, что если абонент A звонит абоненту B, а тот делает attended transfer на абонента C - то выглядит это так:
- Создаётся канал A->B
(начали transfer)
- Канал A->B ставится на hold
- Создаётся совершенно независимый от A->B канал B->C
(окончили transfer, например положили трубку)
- Bridge A->B B->C

Если так, то верно ли я понимаю, что связку между A->B и B->C можно получить только по callerid(B)?
Vlad1983
Сообщения: 4251
Зарегистрирован: 09 авг 2011, 11:51

Re: Attended transfer и variable inheritance

Сообщение Vlad1983 »

что там и как создается при трансфере - мутная тема

тарификация трехсторонних сервисов всегда была проблемой не только для астериска

посмотрите на CEL
позволит отследить путь вызова при сложной логике обработки
ЛС: @rostel
kanavis
Сообщения: 3
Зарегистрирован: 15 окт 2013, 17:45

Re: Attended transfer и variable inheritance

Сообщение kanavis »

У меня даже получается N-сторонний сервис.
Спасибо большое за CEL, я про него не знал.
Аватара пользователя
Wapo
Сообщения: 795
Зарегистрирован: 02 мар 2011, 17:53

Re: Attended transfer и variable inheritance

Сообщение Wapo »

Очень рекомендую дать команду Dumpchan и посмотреть КАКИЕ переменные появляются-называются при atxfer - убежден, что вам понравится.
Ответить
© 2008 — 2025 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH