【问题标题】:How to fetch archive messages from an external component如何从外部组件获取归档消息
【发布时间】:2026-01-27 21:10:01
【问题描述】:

我正在使用 node-xmpp-component 来构建一个 external-xmpp-component,我需要提取任何给定 jid 的所有存档消息。

我能够连接和发送消息,但我不知道如何构建 sanza 以请求存档消息。

注意:这不是关于如何获取归档消息的问题,而是关于如何从外部 XMPP 组件获取它们的问题。

【问题讨论】:

    标签: node.js xmpp tigase


    【解决方案1】:

    要获取邮件存档,您需要从请求存档的用户帐户中查询它。正如您在 XEP 示例 (Querying an archive) 中看到的,没有地方可以定义您所扮演的用户。应该是用户发送 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' 命名空间。 JID 的域标识符部分 'from' 属性中包含的必须与 零件。但是,这是对“发件人”地址的唯一限制, 并且组件可以从其主机名的任何用户发送节。

    这意味着出于隐私/安全原因,“Jabber 组件”不能代表主服务器用户发送数据包。

    因此,您不能伪造从组件中以用户身份查询 MAM 存档所需的 IQ 数据包,原因是隐私。

    您需要为要实现的功能找到另一种设计。

    【讨论】:

      最近更新 更多