Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

Как получить номер телефона, ответившего на вызов?

0

Многоканальная линия, вызов падает на экстенш s, звонят сразу куча телефонов, в cdr получаю информацию о том, кто звонил (все верно - номер) и куда (s), хочу получить информацию о том, какой номер ответил на вызов.

удалить закрыть спам изменить тег редактировать

спросил 2013-04-19 19:53:35 +0400

thunderamur Gravatar thunderamur
444 70 12 38

4 Ответа

0

Зависит от провайдера. Датагрупп, например, посылает оригинальный номер в SIP-заголовках, Sitel - по-другому раньше извращался. Пример:

Set(DNID=${SIP_HEADER(To):5});
Set(DNID=${CUT(DNID,@,1)});
goto mycontext,${DNID},1;

ссылка удалить спам редактировать

ответил 2013-04-20 00:25:21 +0400

rad Gravatar rad flag of Ukraine
106 5
http://www.pearlpbx.com/

обновил 2013-04-20 00:26:00 +0400

Comments

ему надо не DNID а extension который ответил. перечитайте.

meral ( 2013-04-20 01:47:12 +0400 )редактировать

А я его понял, что он хочет узнать именно номер Б.

rad ( 2013-04-20 10:44:59 +0400 )редактировать
0

дело в том, что там несколько каналов и несколько cdr. соответсвенно один на s а остальные на екстеншены. можно написать скрипт который будет искать соответвие отвеченого звонка по времени ответа и cid и апдейтить основную запись.

сложность средняя.

либо переписать диалплан, выставлять переменную во внешнем канале(сложность высокая)

ссылка удалить спам редактировать

ответил 2013-04-19 23:12:05 +0400

meral Gravatar meral flag of Ukraine
23347 24 20 177
http://pro-sip.net/

Comments

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 )редактировать
1

все правильо. вы должны выставить внешнюю переменную в макросе по ответу. но это неточно,надо пробывать. за вас попробывать?любой каприз за ваши деньги. 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 )редактировать
1

проверить ${DIALEDPEERNUMBER} для Dial или ${MEMBERINTERFACE} для Queue

ссылка удалить спам редактировать

ответил 2013-04-19 22:36:29 +0400

komrad123 Gravatar komrad123
3810 5 3 44

Comments

К сожалению в переменной пусто.

thunderamur ( 2013-04-22 12:01:02 +0400 )редактировать

Тебе тоже спасибо, за упоминание ${DIALEDPEERNUMBER}

thunderamur ( 2013-04-24 18:37:49 +0400 )редактировать
0

используйте 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} находится номер на который реально позвонили. Думаю что в Вашем случае будет приблизительно так же.

ссылка удалить спам редактировать

ответил 2013-04-19 20:48:35 +0400

artefackt Gravatar artefackt flag of Ukraine
1 3 5

Comments

Попробую :)

thunderamur ( 2013-04-22 12:02:47 +0400 )редактировать

получаю номер куда звонят, т.е. внешний номер, а мне нужно получить внутрений номер, который ответил на вызов

thunderamur ( 2013-04-23 05:00:07 +0400 )редактировать

Ваш ответ

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[скрыть предварительный просмотр]

Закладки и информация

Добавить закладку

подписаться на rss ленту новостей

Статистика

Задан: 2013-04-19 19:53:35 +0400

Просмотрен: 1,541 раз

Обновлен: Apr 20 '13

Похожие вопросы:

Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией GNU GPL.