繁体   English   中英

如何在Ejabberd中过滤消息

[英]How to filter messages in Ejabberd

我让Ejabberd和测试用户一起运行,并且工作正常。 我想编写一个可以拦截消息并修改它们的模块,如下所示:

  1. 拦截“消息”
  2. 将它们发送到php文件
  3. 从同一个php文件中获取结果(立即)
  4. 修改消息节并将其发送到收件人

ejabberd文档很薄弱,教程也不存在。 你能给我一些这样做的示例代码吗? 然后我可以想出如何根据我的需要配置它。

谢谢捆绑!

阿迪尔

以下是此类模块的基本示例:

-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并返回适当修改的数据包。

gleber的例子很棒。 我还写了一个更复杂的数据包操作示例,我为Chesspark构建了一个名为mod_sunshine的数据包操作。

如何将此XML数据发送到php(通过?xml =)并检索生成的XML,然后将其传递给收件人?

如果您有使用exmpp的最新版本的ejabberd,则可以使用exmpp_xml:node_to_binary / 1或exmpp_xml:node_to_list / 1将XML的内部表示形式分别转换为二进制或字符串。

旧的ejabberd中有类似命名的函数,但在xml模块中。

看来你想要做的就是创建一个XMPP服务器组件。 在该帖子上已经说了很多东西, 哪个XMPP服务器试验开发服务器组件

我可以链接一些有用的链接:

Gleber的解决方案实际上是“面向ejabberd”(当然,在您的情况下最简单),而这个解决方案可以与其他XMPP服务器一起扩展。

有接口:

ejabberd_router:register_route(MyHost)

这是我过去使用过的,效果很好。 一旦MyHost注册到ejabberd,模块将通过info消息接收通往MyHost的通信(假设gen_server )。

如@gleber所述,不要忘记将模块添加到配置文件中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM