如何在MongooseIM的服务器端通过webhook创建bot用户?

问题描述

这就是我想要的

  1. 始终显示状态Online用户(机器人)
  2. 当有消息发给用户时,我会点击与该用户相关联的Webhook
  3. webhook请求的响应将作为回复发送给发件人
  4. 用户将能够截获任何消息(例如,亵渎行为的审核)
  5. 用户将能够向任何人发送消息(例如广播)
  6. 用户认进入每个用户名单(例如skype的echo bot)

我似乎找不到有关如何实现此目标的任何资源。我找到了一种在openfire中拦截传入数据包的方法,但是我看不到使用MongooseIM进行此操作的任何简便方法。我还没有开始深入研究源代码,仍然在寻找一种方法来做到这一点而不接触源代码并将自己锁定在特定版本的MongooseIM上。

解决方法

免责声明:我是MongooseIM核心团队的成员。


有多种方法可以实现。实现此目标的最简单方法取决于您对Erlang的熟悉程度,该语言是用MongooseIM编写的。

  1. 使用the event pusher module with its HTTP backend and the default settings不需要任何Erlang,但是需要一些Erlang来控制将哪些消息转发到HTTP服务或进行更复杂的设置。要发回邮件,您要么需要使用the MongooseIM REST API,要么使用那里可用的许多XMPP库之一作为普通XMPP客户端连接到服务器。这可能是实现目标的最佳方法。
  2. 您可以跳过使用事件推送程序,而只需将您的漫游器连接为以任何语言编写的XMPP客户端即可。该漫游器可能具有您的业务逻辑,或者可以将获取的消息转发到HTTP服务。
  3. 如果您习惯使用Erlang,则扩展服务器的机制称为Hooks and handlers and is described in the official MongooseIM documentation。这需要用Erlang编写代码并从源代码构建,但不一定需要修改上游MongooseIM代码。
  4. 您可以使用XMPP component protocol,它可以扩展XMPP服务器的功能,但可以将其构造为多个服务。可以使用任何所需的技术来编写组件,并且最受欢迎的XMPP库应该开箱即用地支持组件协议。

根据您从上述列表中选择的内容以及您喜欢的语言和环境,您可能必须选择一个XMPP库来使用。有适用于iOS(ObjC和Swift),Android(Java和Kotlin),Python,JavaScript,C的XMPP库,甚至还有一些针对Rust,Dart以及可能更多的新兴库。