我让Ejabberd与测试用户一起运行,并且工作正常。我想编写一个可以拦截消息并修改它们的模块,如下所示:
ejabberd文档很薄弱,教程不存在。你能给我一些这样做的示例代码吗?然后我可以想出如何根据我的需要配置它。
感谢捆绑!
阿迪尔
答案 0 :(得分:14)
以下是此类模块的基本示例:
-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
并返回适当修改的数据包。
答案 1 :(得分:1)
如何将此XML数据发送到php(通过?xml =)并检索生成的XML,然后将其传递给收件人?
如果您有使用exmpp的最新版本的ejabberd,则可以使用exmpp_xml:node_to_binary / 1或exmpp_xml:node_to_list / 1将XML的内部表示形式分别转换为二进制或字符串。
旧的ejabberd中有类似命名的函数,但在xml模块中。
答案 2 :(得分:0)
您希望在那里创建一个XMPP服务器组件。这篇文章Which XMPP server to experiment developing a server component已经说了很多话。
我可以链接一些有用的链接:
An Echo-Bot in Python,一个来自XMPP大师的非常好的博客。这个机器人听取任何消息节并回复其中一些。
Gleber的解决方案实际上是“面向ejabberd”(当然,在您的情况下最简单),而这个解决方案可以与其他XMPP服务器一起扩展。
答案 3 :(得分:0)
有界面:
ejabberd_router:register_route(MyHost)
MyHost
向ejabberd注册后,该模块将收到旨在MyHost
到info
条消息的通信(假设为gen_server
)。
正如@gleber所述,不要忘记将模块添加到配置文件中。