我正在使用实现XEP-0313的XMPP服务器来检索对话历史记录。我想只获取每个会话的最后一条消息,以便我可以构建一个预览最后一条消息的最近会话列表。
我设法获取所有会话的所有消息,并根据我可以构建列表,但这是一个很大的数据浪费,而不是一个选项。我不确定这是否是实现此目的的正确扩展,所以如果还有其他扩展我应该关注,请指导我正确的方向。
答案 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上非常罕见。