我让 Ejabberd 与测试用户一起运行,并且运行良好。我想写一个可以拦截消息并修改它们的模块,如下:
- 拦截“消息”
- 将它们发送到 php 文件
- 从同一个 php 文件中获取结果(立即)
- 修改消息节并将其通过线路发送给收件人
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 服务器来试验开发服务器组件。
我可以给你一些有用的链接:
来自 metajack.im的 Python 中的 Echo-Bot,来自 XMPP 大师的一个非常好的博客。该机器人侦听任何消息节并回复其中一些。
Gleber 的解决方案确实是面向“ejabberd”的(在您的情况下肯定是最简单的),而这个解决方案可以与其他 XMPP 服务器一起扩展。
有界面:
ejabberd_router:register_route(MyHost)
我过去使用过并且效果很好。一旦在MyHost
ejabberd 中注册,模块将MyHost
通过info
消息(假设gen_server
)接收预期的通信。
正如@gleber 所指出的,不要忘记将您的模块添加到配置文件中。