我正在使用 node-xmpp-component 来构建一个 external-xmpp-component,我需要为任何给定的 jid 提取所有存档消息。
我能够连接和发送消息,但我不知道如何构建 sanza 以请求存档消息。
注意:这不是关于如何获取归档消息的问题,而是关于如何从外部 XMPP 组件获取它们的问题。
要获取消息存档,您需要从请求存档的用户帐户中查询它。正如您在 XEP 示例(查询存档)中看到的,没有地方可以定义您所扮演的用户。它应该是发送 XMPP 数据包的用户:
<iq type='set' id='juliet1'>
<query xmlns='urn:xmpp:mam:0' queryid='f27' />
</iq>
然而,node-xmpp-component 实现了 XEP-0114: Jabber Component Protocol。组件协议基本上说,您只能充当组件或来自该组件域的任何用户名:
一旦通过身份验证,组件就可以通过服务器发送节并从服务器接收节。发送到服务器的所有节必须拥有一个“from”属性和一个“to”属性,就像在“jabber:server”命名空间中一样。'from' 属性中包含的 JID 的域标识符部分必须与组件的主机名匹配。然而,这是对“发件人”地址的唯一限制,组件可以从任何用户以它的主机名发送节。
这意味着出于隐私/安全原因,“Jabber 组件”不能代表主服务器用户发送数据包。
因此,您不能伪造从组件作为用户查询 MAM 存档所需的 IQ 数据包,原因是隐私。
您需要为要实现的功能找到另一种设计。