检索历史聊天 Openfire XMPP 框架

Posted

技术标签:

【中文标题】检索历史聊天 Openfire XMPP 框架【英文标题】:Retrieve history chat Openfire XMPP framework 【发布时间】:2017-01-02 23:19:41 【问题描述】:

我使用 Robbie Hanson 的 XMPPframwork 和 Openfire 服务器开发了一个聊天应用程序。 我可以一对一聊天并成功聊天。但是当我获得聊天历史时,我无法获得整个历史。我使用 XEP-0136 来归档历史记录:

发送智商:

 <iq type="get" id="hichic@macintosh">
    <retrieve
        xmlns="urn:xmpp:archive" with="group12@conference.macintosh">
        <set
            xmlns="http://jabber.org/protocol/rsm">
            <max>100</max>
        </set>
    </retrieve>
</iq>

接收:

<iq type="result" id="hichic@macintosh" to="admin@macintosh/Macintosh">
    <chat
        xmlns="urn:xmpp:archive" with="group12@conference.macintosh" start="2016-08-23T08:42:55.777Z">
        <to secs="0">
            <body>asdf</body>
        </to>
        <to secs="5">
            <body>aafs</body>
        </to>
        <from secs="2" jid="haha@macintosh">
            <body>sax</body>
        </from>
        <set
            xmlns="http://jabber.org/protocol/rsm">
            <first index="0">0</first>
            <last>2</last>
            <count>3</count>
        </set>
    </chat>
</iq>

但是当我打开数据库时,ofMessageArchive 表,我可以看到更多带有 group12 的消息(约 20 条消息),而结果中,我只有 3 条。我会错过什么吗?

【问题讨论】:

您是否只收到您在群组中发送的那些消息? @ShoaibAhmadGondal 没有。正如你所看到的结果,其中两个是我发送的,另一个是 haha​​@macintosh 发送的 XEP-0136 在针对您的 IQ 数据包监控插件中的实现基本上通过查询三个表来收集数据:ofConversation、ofConParticipant、ofMessageArchive。您能否在您的数据库中检查您正在查询的房间的引用,这些数据与这三个表中的关系存在。正如您已经提到的,数据存在于 ofMessageArchive 中。 哦,我意识到消息属于不同的对话。谢谢你的回答 如果对话的 idleTime 或 maxTime 已过,则会创建新对话。因此,请尝试通过从管理控制台定义属性来覆盖默认值。需要覆盖以下两个属性的值:conversation.idleTime = 10,conversation.maxTime = 60。将10、60(小时)更改为更合适的值,然后尝试是否仍然存在问题? 【参考方案1】:

遵循这种格式,它对我很有效,

<iq id='a5sV8-21' type='set'>
    <query xmlns='urn:xmpp:mam:0' queryid="12345678">
        <x xmlns="jabber:x:data" type="submit">
            <field var="FORM_TYPE" type="hidden"><value>urn:xmpp:mam:0</value></field>
            <field var="with"><value>id@domain</value></field>
        </x>
        <set xmlns="http://jabber.org/protocol/rsm">
            <max>message_count</max>
        </set>
    </query>
</iq>

** 如果 xmpp:mam:0 不起作用,请使用 xmpp:mam:1

【讨论】:

它不工作我收到错误响应 urn:xmpp:mam:1test32_5811a995837c2@ip-172-31-4-183字段>jabber.org/protocol/rsm"><max>100</max></…code="503" type="cancel">-不可用> 表示您的服务器未启用该功能。启用它将起作用的功能。

以上是关于检索历史聊天 Openfire XMPP 框架的主要内容,如果未能解决你的问题,请参考以下文章

获取 openfire 聊天记录

如何使用 xmpp 框架和 openfire 服务器将电话簿联系人添加到 ios 中的聊天应用程序?

xmpp ios:如何从 openfire 服务器检索所有注册用户

无法使用 ruby​​ xmpp4r 获取以前的群聊历史记录

XMPP4r - 无法检索离线消息

使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]