在 XMPP 中,如何让实际上 "virtual bots" 继承自单个物理 "super bot" 的联系 JID?

In XMPP How to have contact JIDs that are actually "virtual bots" that inherit from a single physical "super bot"?

如何创建一个通用机器人(称为 SUPER BOT),它会根据指定的 JID 采取不同的行为?

我的意思不是XMPP中常见的单一bot JID策略,即mybot@host对每个用户的响应不同,我的意思是:

  1. 超级机器人应该有不同的行为,这取决于分配给联系人的 JID。机器人本身是唯一的("SUPER BOT"),单一实现/单一脚本,机器人本身没有 JID,不能添加到任何人的联系人。
  2. 公司联系人应该有自己的 JID,例如:store1@host 将具有 SUPER BOT 行为。 SUPER BOT 将知道它在 store1 数据下行动,它也会知道它正在与之交互的用户。
  3. 公司联系人必须像普通联系人一样通过 Web 界面创建,但是 linked 到 SUPER BOT(实际上继承 SUPER BOT?一种新型联系人?)。

公司联系人在服务器中不能每个都有自己的file/script,而必须是普通联系人,服务器中唯一的file/script将是超级机器人.

示例:根据我的需要,store1@host 必须是 inherits/implements 单身超级机器人的联系人,然后机器人将根据 JID 检测到它是 store1,从而对 store1 采取相应行动。

user1 将 store1@host 添加到他的名册中,当进行对话时,SUPER BOT 将知道对话是在 store1 和 user1 之间进行的。

问题

  1. SUPER BOT 必须是一个组件?模块?协议?什么?

  2. 最重要的问题:stores/companies JID 如何充当超级机器人?如何link像这样把所有东西放在一起?

  3. 如何禁用直接用户 <-> 公司对话,而是始终与用户 <-> 公司创建 MUC room/group?

帮助说明预期流程的图表:

到目前为止我的发现

我在想一些事情,比如破解联系人并分配 groups/roles:(1) 用户,(2) 公司,然后使用 Ejabberd 过滤器挂钩,我将拦截发送给公司用户的消息。这个拦截模块实际上就是超级机器人。但这在我眼中感觉不对或无法扩展。

PS:虽然我说的是 Ejabberd,但我正在寻找类似 XMPP 的方式,因为我还没有决定去哪个服务器。

您需要的只是一个组件,它可以为他们的 subjids(单个机器人)路由所有流量。

最好的方法是创建一个符合 XEP-0114 的组件并将其连接到 ejabberd。它将能够处理 jid@superbot.domain.net.

形式下的任意数量的 jid