ВидеоКонф(ВКС)  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

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

Проблемы и их решения Asterisk как такового

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

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

Сообщение sergio » 28 июн 2023, 11:07

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

Может кто-нибудь имеет опыт? Может есть более очевидное решение или функционал о котором я не знаю/не заметил/не понял?
sergio
 
Сообщений: 58
Зарегистрирован: 09 сен 2014, 12:13

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

Сообщение ded » 28 июн 2023, 13:23

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

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

Сообщение sergio » 28 июн 2023, 15:02

Это немного не то. 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, то можно получить сообщение и двигаться дальше по контексту.

Но что-то мне кажется гиблое это дело, прихожу к мнению что проще использовать отдельно запущенного клиента.
sergio
 
Сообщений: 58
Зарегистрирован: 09 сен 2014, 12:13

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

Сообщение ded » 28 июн 2023, 18:59

Мысль понятна, но, к сожалению, я не глубок в этой технологии. Ничего кроме базовых описаний протокола, типа
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? Регулярное выражение будет выдёргивать нужное совершенно точно.
ded
 
Сообщений: 15902
Зарегистрирован: 26 авг 2010, 19:00


Вернуться в Конфигурация и настройка Asterisk

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH