Вход | Регистрация
Вы здесь: Главная / Форум / Главный форум по Asterisk / Конфигурация и настройка / Как определить существование клиента

Как определить существование клиента

Сообщений: 54

Как определить существование клиента

Добрый день.
Шлюзы прописаны в sip.conf причем в host прописаны явно IP адреса.
С внешнего мира пришел звонок на какой то из номеров.
У меня прописано правило
[incoming]
exten => _X.,n,Dial(SIP/${EXTEN})
exten => _X.,Hangup

Как определить существует ли у меня такой клиент перед тем как делать Dial ?
Т.е. : Если существует клиент с таким номером в sip.conf звоним ему, иначе просто кладем трубку.
2009-06-17 11:03

Сообщений: 1573

Re: Как определить существование клиента

Если имеется ввиду, зарегистрирован ли он на сервере, то ChanIsAvail ...
2009-06-17 11:23

Avatara of litnimax
Откуда: Москва
Сообщений: 3421

Re: Как определить существование клиента

Лучше включить qualify=yes, тогда Dial сразу выйдет если его нет выставив стутус код.
Смотри extensions.conf дистрибутива AstPbx, там увидишь как обрабатывать.
http://asteriskpbx.ru/browser/astpbx/etc/asterisk/extensions.conf
http://pbxware.ru - все для Asterisk! || Switchvox - сделано на Asterisk! Подробности на http://switchvox.ru
2009-06-17 11:47

Сообщений: 80

Re: Как определить существование клиента

Если сушествует пользователь, то команда Dial успешно выполнится, в противном случае она вернет код ошибки и exten будет выполнятся дальше, в вашем случае звязь будет прервана (Hungup). На мой взгляд функционал который вы ишете и так уже реализован в этих двух коммандах.
2009-06-17 12:28

Avatara of simax
Откуда: Нижний Новгород
Сообщений: 277

Re: Как определить существование клиента

mbyte:

Если сушествует пользователь, то команда Dial успешно выполнится, в противном случае она вернет код ошибки и exten будет выполнятся дальше, в вашем случае звязь будет прервана (Hungup). На мой взгляд функционал который вы ишете и так уже реализован в этих двух коммандах.
Не совсем - если пользователь статический (имеет host=<some IP>) то астериск будет слать INVITEs на этот адрес - если пользователя не существует (устройства с таким IP в сети нету) тогда UDP пакет с инвайтом будет повторятся 6 раз (так как UDP не гарантирует доставки пакета) и только после этого Dial завершится и произойдет Hangup звонящего. Последовательность будет такая:
- начальный пакет
- ждем ответа 0.5 сек (T1 таймер)
- повтор 1
- ждем ответа 1 sec
- повтор 2
- ждем ответа 2 sec
- повтор 3
- ждем ответа 4 sec
- повтор 4
- ждем ответа 8 sec
- повтор 5
- ждем ответа 16 sec
- повтор 6
и так далее пока в сумме не пройдет 64 * T1 = 32 секунды (INVITE transaction timeout).
Отсюда можно понять что мы узнаем о том что юзер недоступен только после 32 секунд что не есть хорошо.
2009-06-17 14:16

Сообщений: 54

Re: Как определить существование клиента

Спасибо. Вроде разобрался. Вот так сделал:

[macro-localexten]
exten => s,1,ChanIsAvail(${ARG1}/${ARG2}|j)
exten => s,n,Dial(${ARG1}/${ARG2})
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Hangup
exten => s-BUSY,1,Hangup
exten => _s-.,1,NoOp
exten => s,102,Hangup

[incoming]
exten => _XXXXXXX,1,Macro(localexten|SIP|495${EXTEN})
exten => _495XXXXXXX,1,Macro(localexten|SIP|${EXTEN})
exten => _499XXXXXXX,1,Macro(localexten|SIP|${EXTEN})
2009-06-17 16:45

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru