使用XEP-0313获取每个对话的最后一条消息?

时间:2016-02-01 11:53:25

标签: xmpp

我正在使用实现XEP-0313的XMPP服务器来检索对话历史记录。我想只获取每个会话的最后一条消息,以便我可以构建一个预览最后一条消息的最近会话列表。

我设法获取所有会话的所有消息,并根据我可以构建列表,但这是一个很大的数据浪费,而不是一个选项。我不确定这是否是实现此目的的正确扩展,所以如果还有其他扩展我应该关注,请指导我正确的方向。

1 个答案:

答案 0 :(得分:4)

您可以轻松完成的一件事是首先检索用户的名单,然后为每个联系人检索最新消息。

<iq from='juliet@example.com/balcony'
    id='bv1bs71f'
    type='get'>
  <query xmlns='jabber:iq:roster'/>
</iq>

结果:

<iq id='bv1bs71f'
    to='juliet@example.com/chamber'
    type='result'>
   <query xmlns='jabber:iq:roster' ver='ver7'>
     <item jid='nurse@example.com'/>
     <item jid='romeo@example.net'/>
   </query>
 </iq>

从nurse@example.com检索最后一条消息:

<iq type='set' id='juliet1'>
  <query xmlns='urn:xmpp:mam:1'>
    <x xmlns='jabber:x:data' type='submit'>
      <field var='FORM_TYPE' type='hidden'>
        <value>urn:xmpp:mam:1</value>
      </field>
      <field var='with'>
        <value>nurse@example.com</value>
      </field>
    </x>
    <set xmlns='http://jabber.org/protocol/rsm'>
      <max>1</max>
      <before/>
    </set>
  </query>
</iq>

当然,用户可以与不在名单上的人进行对话,但在实践中,这在XMPP上非常罕见。