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

How do I create bot user with webhook on server side in MongooseIM?

这就是我想要的

  1. 始终显示状态的用户(机器人)Online
  2. 当用户收到消息时,我将点击与用户关联的网络钩子
  3. webhook 请求的响应将作为对发件人的回复发送
  4. 此用户将能够截取任何消息(假设不雅内容审核)
  5. 此用户将能够向任何人发送消息(比方说广播)
  6. 该用户将默认进入每个用户名册(如 skype 的 echo bot)

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

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


有多种方法可以实现这一点。实现这一点的最简单方法取决于您对 Erlang 的熟悉程度,Erlang 是编写 MongooseIM 的编程语言。

  1. 您不需要任何 Erlang 来使用 the event pusher module with its HTTP backend and the default settings, but you'd need some Erlang to control what messages get forwarded to the HTTP service or to make more complex setups. To send messages back, you'd either need to use 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 库。 XMPP 库可用于 iOS(ObjC 和 Swift)、Android(Java 和 Kotlin)、Python、JavaScript、C ,甚至还有一些新兴的 Rust、Dart 等。