Подтвердить что ты не робот

Как фильтровать сообщения в Ejabberd

У меня есть Ejabberd и работает с тестовыми пользователями, и он работает нормально. Я хочу написать модуль, который может перехватывать сообщения и изменять их следующим образом:

  • перехватить сообщения "
  • отправить их в php файл
  • получить результат из одного и того же файла php (немедленный)
  • Измените строфу сообщения и отправьте его по проводнику получателю

Документация ejabberd слаба, а учебники отсутствуют. Можете ли вы дать мне пример кода, который делает это. Затем я могу понять, как настроить его для моих нужд.

Спасибо за комплект!

Адиль

4b9b3361

Ответ 1

Вот базовый пример такого модуля:

-module(packet_interceptor).
-behaviour(gen_mod).

-export([start/2,
         stop/1]).

-export([on_filter_packet/1]).


start(Host, _Opts) ->
    ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 0).

on_filter_packet({From, To, XML} = Packet) ->
    %% does something with a packet
    %% should return modified Packet or atom `drop` to drop the packet
    Packet.

И не забудьте добавить этот модуль в конфигурацию ejabberd в раздел module:

{modules,
 [...
  ...
  ...
  {packet_interceptor, []}
 ]}.

Просто растяните on_filter_packet/1 так, как вы хотите, и верните соответствующим образом модифицированный пакет.

Ответ 2

Пример gleber отличный. Я также написал более сложный пример обработки пакетов, который я построил для Chesspark, называемого mod_sunshine.

Как отправить эти XML-данные в php (через? xml =) и получить полученный XML файл, а затем передать его получателю?

Если у вас есть последняя версия ejabberd, которая использует exmpp, вы можете использовать exmpp_xml: node_to_binary/1 или exmpp_xml: node_to_list/1, чтобы включить внутреннее представление XML в двоичный файл или строку соответственно.

В старшем ejabberd были аналогично названные функции, но внутри xml-модуля.

Ответ 3

Похоже, что вы хотите создать серверный компонент XMPP. На этом посту уже было сказано много вещей Какой сервер XMPP должен экспериментировать с разработкой серверного компонента.

Я могу связать вам несколько полезных ссылок:

  • Jabber Component Protocol

  • Эхо-бот в Python из metajack.im, очень хороший блог от гуру XMPP. Этот бот слушает любые строфы сообщений и отвечает на некоторые из них.

Решение Gleber действительно ориентировано на "ejabberd" (конечно, самый простой в вашем случае), тогда как это можно масштабировать с другими серверами XMPP.

Ответ 4

Существует интерфейс:

ejabberd_router:register_route(MyHost)

который я использовал в прошлом и хорошо работает. После регистрации MyHost с помощью ejabberd модуль получит сообщения, предназначенные для сообщений MyHost через info (при условии gen_server).

Как отмечено @gleber, не забудьте добавить свой модуль в файл конфигурации.