Тебе тоже спасибо, за упоминание ${DIALEDPEERNUMBER}
thunderamur ( 2013-04-24 18:37:49 +0400 )редактироватьМногоканальная линия, вызов падает на экстенш s, звонят сразу куча телефонов, в cdr получаю информацию о том, кто звонил (все верно - номер) и куда (s), хочу получить информацию о том, какой номер ответил на вызов.
проверить ${DIALEDPEERNUMBER} для Dial или ${MEMBERINTERFACE} для Queue
Тебе тоже спасибо, за упоминание ${DIALEDPEERNUMBER}
thunderamur ( 2013-04-24 18:37:49 +0400 )редактироватьЗависит от провайдера. Датагрупп, например, посылает оригинальный номер в SIP-заголовках, Sitel - по-другому раньше извращался. Пример:
Set(DNID=${SIP_HEADER(To):5});
Set(DNID=${CUT(DNID,@,1)});
goto mycontext,${DNID},1;
ему надо не DNID а extension который ответил. перечитайте.
meral ( 2013-04-20 01:47:12 +0400 )редактироватьиспользуйте SIP-заголовки. У меня приблизительно так:
[dg]
exten => s,1,Noop(Fixing DID using information from SIP TO header)
exten => s,n,Set(pseudodid=${SIP_HEADER(To)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,@,1)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,:,2)})
exten => s,n,Set(dialednumber=${pseudodid:-7})
ну и в переменной ${dialednumber} находится номер на который реально позвонили. Думаю что в Вашем случае будет приблизительно так же.
получаю номер куда звонят, т.е. внешний номер, а мне нужно получить внутрений номер, который ответил на вызов
thunderamur ( 2013-04-23 05:00:07 +0400 )редактироватьдело в том, что там несколько каналов и несколько cdr. соответсвенно один на s а остальные на екстеншены. можно написать скрипт который будет искать соответвие отвеченого звонка по времени ответа и cid и апдейтить основную запись.
сложность средняя.
либо переписать диалплан, выставлять переменную во внешнем канале(сложность высокая)
2-й вариант вроде лучше, покажи куда читать про переменную во внешнем канале :)
thunderamur ( 2013-04-23 05:05:08 +0400 )редактироватьфункция MASTER_CHANNEL либо DB либо через AMI. надо пробывать,говорю сложность высокая.
meral ( 2013-04-23 09:47:47 +0400 )редактироватьСложность заключается в том, что информация о том, кто взял трубку поступает после отработки Dial(), а данные для CDR я выбираю и пишу до? AMI, эт да, не работал ещё напрямую.
Что думаешь про возможность загнать всех в очередь и попробовать ${MEMBERINTERFACE} Может сработать?
thunderamur ( 2013-04-23 11:00:15 +0400 )редактироватьвсе правильо. вы должны выставить внешнюю переменную в макросе по ответу. но это неточно,надо пробывать. за вас попробывать?любой каприз за ваши деньги. MEMBERINTERFACE как и DIALLERPEER будет доступно после конца звонка. тоесть по h екстеншену. можно и так. но все равно пробывать надо.
meral ( 2013-04-23 13:01:16 +0400 )редактироватьНу зачем же так... Я же не просил пробовать за меня, я сделал предположение и спросил о его теоритической возможности, как у более опытного в этом деле коллеги.
В итоге, ты напомнил про h, что вылилось в решение проблемы
После Dial()
Добавляем
exten => h,1,Set(CDR(dialedpeernumber)=${DIALEDPEERNUMBER})
Все, имеем в базе инфу, о том, кто ответил на звонок. Решение низкой сложности.
Спасибо.
thunderamur ( 2013-04-24 18:35:21 +0400 )редактироватьсложность средняя. надо помнить про h ;) и кстати не всегда почемуто отрабатывает.
meral ( 2013-04-24 20:25:35 +0400 )редактироватьвозможно оно не всегда отрабатывает там, где перед h, нет Hangup?
thunderamur ( 2013-04-25 03:53:32 +0400 )редактироватьоно не всегда отрабатывает в некоторых странных случаях + не отрабатывает когда include вообще никогда.
meral ( 2013-04-25 08:54:37 +0400 )редактироватьЗадан: 2013-04-19 19:53:35 +0400
Просмотрен: 1,587 раз
Обновлен: Apr 20 '13
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.