VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Общение с АТС через xmpp

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
sergio
Сообщения: 58
Зарегистрирован: 09 сен 2014, 12:13

Общение с АТС через xmpp

Сообщение sergio »

Добрый день.
Иногда у меня возникает мысль предоставить пользователям возможность обращаться к астериску через сообщения xmpp, но после неудачи я бросаю это дело так надолго, что возвращаясь к ней снова уже не помню причину неудачи.
Основная проблема в том, что я не могу определить от какого buddy приходит сообщение, что бы прочитать его из JABBER_RECEIVE. Это надо делать в произвольный момент времени, без привязки к экстеншену.
Пока есть идея включить дебаг xmpp(там есть возможность разглядеть отправителя), ловить строки дебага rsyslog`ом и далее:
1 либо выполнять действие самим rsyslog`ом
2 либо выдергивать нужное из строки дебага в отдельный файл для последующего чтения из плана с помощью system

Может кто-нибудь имеет опыт? Может есть более очевидное решение или функционал о котором я не знаю/не заметил/не понял?
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: Общение с АТС через xmpp

Сообщение ded »

Есть опыт, сделали даже свой форк - asterisk-with-messages, это было 11 лет назад.
Cisco systems, например, использует свой вариант xmpp, работает (не изучали - как).
У разработчиков Linphone.org - Belledonne Communications by Simon Morlat, всё работает из коробки, софтфоны обмениваются сообщениями. Правда я не проверял этот функционал последние 3 года. Имеет сысл установить и заглянуть туда в код, как это работает.
sergio
Сообщения: 58
Зарегистрирован: 09 сен 2014, 12:13

Re: Общение с АТС через xmpp

Сообщение sergio »

Это немного не то. Cообщения через SIP пробовал, работает на многих софт и сип фонах из коробки.
У меня есть корп.мессенджер openfire. Пользователи мессенджера опционально получают уведомления от телефонной станции о вызовах. Привязка абонент-jid через database, там же хранятся опции.
Вот хотелось бы иметь возможность в произвольное время написать из мессенджера на jid телефонной станции команду и получить ответ либо файлом либо текстом либо действием. Например недельный отчет о пропущеных. Чат-бот такой.

В xmpp.conf есть такая опция:

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

sendtodialplan=yes                      ; Send incoming messages into the dialplan.  Off by default.
context=messages                        ; Dialplan context to send incoming messages to.  If not set,
                                        ; "default" will be used.
sendtodialplan отрабатывает, но прочитать сообщение можно только явно указав jid отправителя который мы не знаем: JABBER_RECEIVE(account,jid,timeout)
Я думал может есть какая-то переменная или еще какое свойство позволяющее узнать от кого пришло сообщение и кому отвечать, но не нашел ничего.
Если включить xmpp set debug on, можно увидеть и само сообщение и метаданные:

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

<--- XMPP received from 'aster_user' --->
<message type="chat" to="aster_user@ofsrv.some.local/asterisk-xmpp" id="mir1789bbf4f6d5ad20_10162" from="user@ofsrv.some.local/ITOENG2"><body>test</body></message>
<------------->
Если выдернуть значение поля from, то можно получить сообщение и двигаться дальше по контексту.

Но что-то мне кажется гиблое это дело, прихожу к мнению что проще использовать отдельно запущенного клиента.
ded
Сообщения: 15621
Зарегистрирован: 26 авг 2010, 19:00

Re: Общение с АТС через xmpp

Сообщение ded »

Мысль понятна, но, к сожалению, я не глубок в этой технологии. Ничего кроме базовых описаний протокола, типа
https://xmpp.org/extensions/xep-0184.html
5.1 Bare JID

If the sender knows only the recipient's bare JID, it cannot determine (via Service Discovery (XEP-0030) [5] or Entity Capabilities (XEP-0115) [6]) whether the intended recipient supports the Message Delivery Receipts protocol. In this case, the sender MAY request a receipt when sending a content message of type "chat", "headline", or "normal" to the recipient's bare JID. However, the sender MUST NOT depend on receiving an ack message in reply.
Почему бы не парсить значение поля from? Регулярное выражение будет выдёргивать нужное совершенно точно.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH