Как определить extension, кторый поднимет трубку?

Для начинающих.
Всем начинающим - сюда.

Модераторы: Admins, Модераторы

Ответить
dsa046
Сообщения: 160
Зарегистрирован: 06 июл 2009, 00:04

Как определить extension, кторый поднимет трубку?

Сообщение dsa046 » 09 авг 2012, 18:10

Например такой кусок диалплана:
exten => 300,n,Dial(SIP/201&SIP/202&SIP/203,30,trm)
Трубку поднимает номер 202. Как мне это программно поймать, чтобы в дальнейшем обработать?

Аватара пользователя
koqep
Сообщения: 221
Зарегистрирован: 26 янв 2010, 09:04
Откуда: Челябинская обл.
Контактная информация:

Сообщение koqep » 09 авг 2012, 19:14

AMI?
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk

Аватара пользователя
Leon77
Сообщения: 761
Зарегистрирован: 15 сен 2008, 16:52
Откуда: Щёлково, Моск.обл.

Сообщение Leon77 » 10 авг 2012, 07:14

Макрос?
Ищу работу

dsa046
Сообщения: 160
Зарегистрирован: 06 июл 2009, 00:04

Сообщение dsa046 » 10 авг 2012, 08:04

Да, AMI, интеграция с внешним сервисом нужна.

Макрос? Это вопрос или ответ? Если ответ приведите пожалуйста пример, как получить значение ext, взявшего трубку в виде переменной.

Аватара пользователя
Leon77
Сообщения: 761
Зарегистрирован: 15 сен 2008, 16:52
Откуда: Щёлково, Моск.обл.

Сообщение Leon77 » 10 авг 2012, 09:13

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

exten => s,...,Dial(SIP/1&SIP/2&...,timeout,M(macros))
...

[macro-macros]
exten => s,1,NoOp(${CDR(channel)})
Остальное, думаю, сами допилите и поймёте. У меня по аналогичному алгоритму на трех серверах сделано, чтобы отдельно в отдельную базу информацию писать именно в момент ответа.
Ищу работу

dsa046
Сообщения: 160
Зарегистрирован: 06 июл 2009, 00:04

Сообщение dsa046 » 10 авг 2012, 11:13

ок, спасибо!

Added after 1 hours 39 minutes:

Да, инфу действительно выдергивает из звонка.

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

  -- Executing [[email protected]:1] NoOp("SIP/201-00000001", "SIP/201-00000001") in new stack
а что означает вот эта часть: "-00000001" ? может ли она меняться в зависимости от каких-то условий?

Аватара пользователя
Wapo
Сообщения: 1391
Зарегистрирован: 08 май 2009, 09:47
Откуда: СПб.
Контактная информация:

Сообщение Wapo » 10 авг 2012, 11:16

000001 - банальный счетчик
P4 3.0 + 1Gb CentOS 5.8 Aster 11.25.1
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.

dsa046
Сообщения: 160
Зарегистрирован: 06 июл 2009, 00:04

Сообщение dsa046 » 10 авг 2012, 11:33

Отлично! Отрезал кусок переменной до значения "201". Теперь надо сделать сравнение.

Нашел такой пример в книжке:

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

exten => 123,1,GotoIf($[${CALLERID(num)} = 8885551212]?reject:allow)
exten => 123,n(allow),Dial(Zap/4)
exten => 123,n,Hangup()
exten => 123,n(reject),Playback(abandon-all-hope)
exten => 123,n,Hangup()
Можно конечно и так, но у меня условия выполняется только в одном из 8 сравнений. Получится очень длинная конструкция. Т.е. мне надо проверить одно из 8 сравнений(номер может взять любой из 8 абонентов 201-208). в зависимости от этого запустить скрипт с разными параметрами. Может быть есть какой-то оператор вроде case ? Хочется красиво сделать.

Аватара пользователя
Leon77
Сообщения: 761
Зарегистрирован: 15 сен 2008, 16:52
Откуда: Щёлково, Моск.обл.

Сообщение Leon77 » 10 авг 2012, 13:49

А задача-то какая? Может просто запускать скрипт, который сам всё и сделает? К примеру, я делаю всё это внутри php-скрипта.
Ищу работу

dsa046
Сообщения: 160
Зарегистрирован: 06 июл 2009, 00:04

Сообщение dsa046 » 10 авг 2012, 15:13

Задача определить кто снял трубку и на соответствующий IP скинуть telnet команду. Сделал через GoToIf. В принципе не так уж и некрасиво получилось...))) Даже симпатишно:)

Аватара пользователя
noize
Сообщения: 913
Зарегистрирован: 29 ноя 2006, 12:51
Откуда: Москва

Сообщение noize » 11 авг 2012, 07:09

воспользуйтесь регулярным выражением

p.s.
хотя нет, поспешил с советом. Тут действительно, нужно вызвать 7 раз GotoIf

Ответить