Dial - как узнать номер по которому прошел вызов
Dial - как узнать номер по которому прошел вызов
Откуда: NiNo
Сообщений: 112
|
Re: Dial - как узнать номер по которому прошел вызов
dimas: asterisk 1.4.24
GET FULL VARIABLE - возвращает почему то на любую запрашиваемую переменную ее имя а не занчение ( то есть на запрос 'GET FULL VARIABLE cdr(dst)' возвращает 'cdr(dst)' )
через 'GET VARIABLE' на сколько я в курсе до функций не добраться... :(
GET FULL VARIABLE ${cdr(dst)}
пробовали?
из AGI без $ надо.
|
Сообщений: 1573
|
Re: Dial - как узнать номер по которому прошел вызов
мне из AGI скрипта все это надо сделать.
exten => _X., 1, AGI( /agi/script.agi )
AGI на перле если это актуально.
значения пробовал получать
$agi->get_full_variable('cdr(dst)');
Команда Dial из AGI приложения может вызываться несколько раз.
Как то сильно мы ушли от первоначального поста ... ) :
День добрый,
А как узнать по какому номеру прошел вызов при звонке вида:
Dial(SIP/agent1&SIP/agent2&LOCAL/123);
Alekz:
Поле смотрите lastdata. Прошу прощения за сумбур в своих постах - дергают меня :)
Поле lastdate будет содержать - SIP/agent1&SIP/agent2&LOCAL/123, поле dst - то что набирается для вызова этой команды (Dial), но ни как не то, что вы ждете.
Alekz:
при конструкции bill@10.1.11.1 в команде Dial в переменную BRIDGEPEER помещается SIP/10.1.11.1-0827a7a8 (например). А если 2 пользователя укажут на свои имена на одном хосте?
при таком раскладе и приведенном мной примере здесь будет только IP (10.1.11.1. Почему, описывал выше). Если все же нужно получать полный вид(bill@10.1.11.1), тогда нужно подойти по другому. Но это уже решение под ключ ... )
to gosha-regs, вы куда хотите записать полученные этим скриптом данные? Где вы собираете записи CDR (и собираете ли)?
Почему не сделать так, что ваш скрипт будет "кидать" вызов в нужную точку плана набора, а не сам вести вызов?
Пример плана написал выше ... При этом в поле accountcode у вас появится "номер" ... ) (с некоторыми издержками, которые так же можно решить)
В статистике собственно хочется видеть куда ушел звонок
Судя по всему - статистика есть
|
Откуда: NiNo
Сообщений: 112
|
Re: Dial - как узнать номер по которому прошел вызов
to: cron333
Я не сильно понимаю, что мне даст направление звонка в план набора... Приведенный выше пример с CUT(BRIDGEPEER) и в AGI отрабатывает, только нужного значения там нет.
CDR генерируются свои, то есть каждое пользовательское действие логируется (прослушал музыку, записал сообщение проголосовал, позвонил, и тд... ).
Я вот думаю если к Dial макрос добавить, который будет в astdb нечто писать. Вопрос опять в том, что писать...
Как вариант конечно распарсить логи астериска и вытащить от туда все звонки и считать успешным тот, что со статусом ANSWER но это на крайний случай наверное...
|
Сообщений: 866
|
Re: Dial - как узнать номер по которому прошел вызов
из AGI без $ надо.
ну если у вас без $ не работает... что стоит попробовать? get_full_variable имхо _выражения_ получает и их вычисляет. А значит доллар нужен.
2. Не хотите через Local-врапперы все это загнать?
То есть для каждого возможного эндпоинта генерится враппер:
exten => wrap-001234,s,Set(DEST=SIP/bill@10.1.11.1)
exten => wrap-001235,s,Set(DEST=Local/123)
...
exten => _wrap-.,2,Dial(${DEST})
и тогда Dial делать уже на Dial(Local/wrap-001234&Local/wrap-001235) - в результате у вас будет проставлена переменная который путь сработал.
список эндпоинтов лежит в базе - через вьюшку подсасывается в switch/realtime - всегда актуальная инфа....
Ну не очень прямо конечно :)
|
Сообщений: 866
|
Re: Dial - как узнать номер по которому прошел вызов
3. Можно еще наверно очередями сделать - собирать динамически очереди из всех эндпоинтов со стратегией ringall и потом смотреть на значение переменной MEMBERINTERFACE - она по идее говорит который из мемберов принял звонок. Тоже не проверял...
|
Сообщений: 1573
|
Re: Dial - как узнать номер по которому прошел вызов
Да уж ...
to: cron333
Я не сильно понимаю, что мне даст направление звонка в план набора... Приведенный выше пример с CUT(BRIDGEPEER) и в AGI отрабатывает, только нужного значения там нет.
А у меня - есть. Что не так делаю ... )
Ну в общем то ладно, главное, что вы поняли меня ...
P.S. Уверен, вашу задачу можно решить только диалпланом!
|
Откуда: NiNo
Сообщений: 112
|
Re: Dial - как узнать номер по которому прошел вызов
to cron333:
в том виде, что вы предлагали нужного значения там нет.
to dimas:
слишком сложно...
Решение нашел: в переменной DIALEDPEERNUMBER интересующее меня значение.
|
Сообщений: 1573
|
Re: Dial - как узнать номер по которому прошел вызов
Хотите верьте, хотите нет, но сохранилось сообщение, которое я корректировал, но оно не сохранилось. Вместо этого:
при таком раскладе и приведенном мной примере здесь будет только IP (10.1.11.1. Почему, описывал выше). Если все же нужно получать полный вид(bill@10.1.11.1), тогда нужно подойти по другому. Но это уже решение под ключ ... )
должно было быть:
при таком раскладе и приведенном мной примере здесь будет только IP (10.1.11.1. Почему, описывал выше). Попробуйте еще переменную ${DIALEDPEERNUMBER}
|
Сообщений: 866
|
Re: Dial - как узнать номер по которому прошел вызов
to dimas:
слишком сложно...
ну это вопрос спорный :)
Вам же откуда-то эти энжпоинты на которые для каждого юзера звонить все равно брать нужно - они наверняка уже в базе лежат...
Сделать такое через динамическую очередь это одна пара табличек или вьюшек в базе и одна строчка диалплана.
Конечно если вы реалтайм до этого не цепляли к астериску, то да, поковыряться придется. Но в любом случае результат выглядит очень простым.
|
|