Страница 1 из 2

Distributed Device State: SUBSCRIBE между двумя Астерисками

Добавлено: 21 окт 2015, 07:46
Pegasus
День добрый.

Возник вопрос: может ли абонент одного Астериска подписаться на состояние абонента другого Астериска?
В теории я не вижу препятствий, возможно что-то не дочитал в RFC3265.
Установил два тестовых астера, на каждом по паре абонентов и транк между серваками. В диалплане имею строку:
exten => _XXXX,hint,SIP/{$EXTEN}
Абоненты одного сервера отлично видят состояние друг друга, а вот состояние абонентов соседнего астера недоступно.
Умные люди подсказали посмотреть https://wiki.asterisk.org/wiki/display/ ... vice+State , но что-то мне подсказывает что должно быть всё проще. Сервера должны обмениваться сообщениями subscribe, notify, publish.
Подскажите, пожалуйста, куда копать?

Re: SUBSCRIBE между двумя Астерисками

Добавлено: 21 окт 2015, 07:47
Vlad1983
копать в сторону показанную умными людьми

litnimax

Добавлено: 21 окт 2015, 14:56
litnimax
Проблема не так просто решается.
На сегодня есть такие варианты (мне известные):
- Jabber сервер и res_xmpp для Asterisk: позволяет обмениваться состояниями, требует кучу времени на установку, жрет немерянно ресурсов (тяжелое Java приложение, зачем оно нужно на сервере телефонии?)
- PJSIP: в новом канале есть распределенные состояния (res_pjsip_pubsub.so), однако от примеров конфигов дымится моск.
- Ну и третий вариант - ØMQ модуль для астериск и скрипт ØMQ Asterisk Manager Interface (AMI) Broker - https://github.com/litnimax/zmq-ami-broker/

Автором третьего вариант является Ваш покорный слуга, который за#$% от того, что для связи двух и более серверов требуются какие-то индейские пляски.

Если будут вопросы по моему модулю, создавайте там на github тикеты.

Удачи!

litnimax

Добавлено: 21 окт 2015, 15:04
litnimax
Было бы здрово если бы кто-то перевел документацию на русский.

Re: SUBSCRIBE между двумя Астерисками

Добавлено: 22 окт 2015, 09:09
virus_net
Так же подходил к данному вопросу и так же пошел по официальному пути - Jabber. Но не вышел каменный цветочек... нормально это у меня так и не заработало.

litnimax, спасибо за пост.
Вот так мысль ! И чего она мне в голову ранее не приходила.... :roll: Согласен, что официальные путь это реально пляски с бубном...
У меня же для реализации подобной схемы все есть и это все - Websocket (на PHP). Остается только команду соответствующую накалякать и все должно будет заработать.

Re: SUBSCRIBE между двумя Астерисками

Добавлено: 22 окт 2015, 13:09
Zavr2008
litnimax, идея что надо!

litnimax

Добавлено: 22 окт 2015, 13:19
litnimax
Идея если честно не моя, мы со switch в chat.asterisk-support.ru обсуждали ØMQ (я рассказывал о том что он может), а свич сказал что у него есть задача состояния разделять как-то по-простому, вот я и решил запилить на  zeromq это дело.
Доволен как слон, так как ØMQ - это мощнейшая технология.

Re: SUBSCRIBE между двумя Астерисками

Добавлено: 22 окт 2015, 14:57
virus_net
Я проверил, у меня все РАБОТАЕТ через Websocket.

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

ASTERISK-01 AMI (Websocket client) <-> Websocket SERVER <-> (Websocket client)  AMI ASTERISK-02
АААААААА !!!! УРААААА !!!! И без бубна и без плясок с Jabber ! СПАСИБО !!!!!

P.S. Простите, не могу сдержать эмоций :)
P.S.S. Вот я олень что раньше до этого не допер... ну просто олень...
P.S.S.S. А самое приятное, что оно будет работать так как я хочу и так как я накодю :) КЛАСС ! Я счастлив :) и ушел кодить.

litnimax

Добавлено: 22 окт 2015, 15:44
litnimax
Алгоритм 1-в-1 как у меня в ZMQ Broker? Я про AMI DeviceStateChange и AMI SetVar(DEVICE_STATE(Custom:XXX)=state) ?

Re: SUBSCRIBE между двумя Астерисками

Добавлено: 22 окт 2015, 16:46
virus_net
litnimax писал(а):Алгоритм 1-в-1 как у меня в ZMQ Broker?
Да.
В моем случае Asterisk 1.8 и потому у меня есть несколько НО:
  • НО 1: у него нет штатного Websocket, писали сами, под задачу "отображение/управление вызовами из браузера"
    НО 2: у него в AMI нету "Event DeviceStateChange", у него есть "Event: ExtensionStatus", так же отсутствует presence state (оно появилось начиная с Asterisk 11)
    НО 3: "Event: ExtensionStatus" приходит только по тому номеру НА который звонят, а по тому КТО звонит ничего нет, но это решаемо, решаемо через "Event: Newstate"
Т.е. нужно немного помозговать, покодить и все будет. А в целом да, схема именно такая, но основана на Websocket и PHP.