Xmpp 如何获取已发送消息的MAM消息ID?

Xmpp 如何获取已发送消息的MAM消息ID?,xmpp,Xmpp,我正在使用eJabberd服务器(启用MAM)和客户端库Strophe.js。客户端应用程序正在本地存储中存储固定数量的消息 我从服务器收到的所有消息都包括元素和,它们提供服务器端生成的ID: <message xmlns="jabber:client" to="aaa@example.net/8667085700924567016834" from="aaa@example.net"> <result xmlns="urn:xmpp:mam

我正在使用eJabberd服务器(启用MAM)和客户端库Strophe.js。客户端应用程序正在本地存储中存储固定数量的消息

我从服务器收到的所有消息都包括元素
,它们提供服务器端生成的ID:

<message 
    xmlns="jabber:client" to="aaa@example.net/8667085700924567016834" from="aaa@example.net">
    <result 
        xmlns="urn:xmpp:mam:2" id="1520510373346685">
        <forwarded 
            xmlns="urn:xmpp:forward:0">
            <message 
                xmlns="jabber:client" xml:lang="en" to="bbb@example.net" from="aaa@example.net/60965696931000870402419" type="chat">
                <archived 
                    xmlns="urn:xmpp:mam:tmp" by="aaa@example.net" id="1520510373346685"/>
                <stanza-id 
                    xmlns="urn:xmpp:sid:0" by="aaa@example.net" id="1520510373346685"/>
                <body>asdf</body>
            </message>
            <delay 
                xmlns="urn:xmpp:delay" from="example.net" stamp="2018-03-08T11:59:33.346685Z"/>
        </forwarded>
    </result>
</message>

asdf
我使用这些ID在每个MAM调用上获取固定数量的消息(使用RSM分页-before/after/max属性)。例如:

params = {
    "before": "1520510373346685",
    "max": 10,
    onMessage: <some handler>,
    onComplete: <some handler>,
}
this.connection.mam.query(Strophe.getBareJidFromJid(this.myJid), params);
params={
“之前”:“1520510373346685”,
“最大”:10,
onMessage:,
未完成:,
}
this.connection.mam.query(Strophe.getBareJidFromJid(this.myJid),params);
这将在节id为1520510373346685的消息之前获取10条消息

但是,在我发送消息并从MAM检索之前,我发送的消息本质上没有此ID

我没有找到任何从服务器获取当前发送的消息ID的示例,Strophe也没有在消息从客户端发送并由服务器接收后提供任何回调

那么,问题是——有没有办法为当前发送的消息获取服务器生成的消息ID(节ID/已存档)


也许我自己的方法是错误的-我应该生成自己的ID并将其添加到来自客户端的每条消息中吗?

除了查询存档之外,目前没有指定任何机制。XMPP社区中未来解决这一问题的一个突出想法是将发送的碳反射回原始发送者,这将包括一个节id元素,其id由存档分配。

谢谢,@Flow。作为一个解决方案,我可以在每条消息上使用我自己的ID作为属性(在内部消息节中)?或者不建议这样做?这是一个怎样的解决方案?您想知道存档分配的ID,但您事先不知道(当前规范中的ID)。很抱歉,它肯定不是:D,但它解决了在缓存和存档之间避免重复消息的问题(我没有提到),直到我再次查询存档。你知道发送碳反射是否会很快实施吗?或者它只是目前XMPP标准中的一个TODO?这是一个正在进行的讨论,尚未(明确)指定。请鼓励您接触XMPP社区并参与进来。:)一个好的起点是xmpp.org和xsf@muc.xmpp.org muc。