Многоканальная линия, вызов падает на экстенш s, звонят сразу куча телефонов, в cdr получаю информацию о том, кто звонил (все верно - номер) и куда (s), хочу получить информацию о том, какой номер ответил на вызов.
проверить ${DIALEDPEERNUMBER} для Dial или ${MEMBERINTERFACE} для Queue
Зависит от провайдера. Датагрупп, например, посылает оригинальный номер в SIP-заголовках, Sitel - по-другому раньше извращался. Пример:
Set(DNID=${SIP_HEADER(To):5});
Set(DNID=${CUT(DNID,@,1)});
goto mycontext,${DNID},1;
используйте 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 (Apr 23 '13)editдело в том, что там несколько каналов и несколько cdr. соответсвенно один на s а остальные на екстеншены. можно написать скрипт который будет искать соответвие отвеченого звонка по времени ответа и cid и апдейтить основную запись.
сложность средняя.
либо переписать диалплан, выставлять переменную во внешнем канале(сложность высокая)
2-й вариант вроде лучше, покажи куда читать про переменную во внешнем канале :)
thunderamur (Apr 23 '13)editСложность заключается в том, что информация о том, кто взял трубку поступает после отработки Dial(), а данные для CDR я выбираю и пишу до? AMI, эт да, не работал ещё напрямую.
Что думаешь про возможность загнать всех в очередь и попробовать ${MEMBERINTERFACE} Может сработать?
thunderamur (Apr 23 '13)editвсе правильо. вы должны выставить внешнюю переменную в макросе по ответу. но это неточно,надо пробывать. за вас попробывать?любой каприз за ваши деньги. MEMBERINTERFACE как и DIALLERPEER будет доступно после конца звонка. тоесть по h екстеншену. можно и так. но все равно пробывать надо.
meral (Apr 23 '13)editНу зачем же так... Я же не просил пробовать за меня, я сделал предположение и спросил о его теоритической возможности, как у более опытного в этом деле коллеги.
В итоге, ты напомнил про h, что вылилось в решение проблемы
После Dial()
Добавляем
exten => h,1,Set(CDR(dialedpeernumber)=${DIALEDPEERNUMBER})
Все, имеем в базе инфу, о том, кто ответил на звонок. Решение низкой сложности.
Спасибо.
thunderamur (Apr 24 '13)editЗадан: Apr 19 '13
Просмотрен: 1,601 раз
Обновлен: Apr 20 '13
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.