如何获取已发送消息的 MAM 消息 ID?
How to get MAM message ID of sent messages?
我正在使用带有客户端库的 eJabberd 服务器(启用 MAM)Strophe.js。客户端应用程序正在本地存储中存储固定数量的消息。
我从服务器收到的所有消息都包含元素 <archived/>
和 <stanza-id/>
,它们提供服务器端生成的 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>
我使用这些 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);
这让我在带有节 ID 1520510373346685
的消息之前收到了 10 条消息。
但是,我发送的消息本身没有这个 ID,直到我发送它们并从 MAM 检索它们。
我没有找到任何关于从服务器获取当前发送的消息ID的示例,并且Strophe在消息从客户端发送到服务器接收后不提供任何回调。
所以,问题是 - 有什么方法可以获取服务器为当前发送的消息生成的消息 ID (stanza-id/archived)?
也许我自己的方法是错误的 - 我应该生成自己的 ID 并将其添加到来自客户端的每条消息中吗?
目前除了查询存档外没有指定任何机制。 XMPP 社区在未来解决这个问题的一个突出想法是将 send carbon 反映给原始发件人,其中将包含一个 stanza-id 元素,其中包含存档分配的 ID。
我正在使用带有客户端库的 eJabberd 服务器(启用 MAM)Strophe.js。客户端应用程序正在本地存储中存储固定数量的消息。
我从服务器收到的所有消息都包含元素 <archived/>
和 <stanza-id/>
,它们提供服务器端生成的 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>
我使用这些 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);
这让我在带有节 ID 1520510373346685
的消息之前收到了 10 条消息。
但是,我发送的消息本身没有这个 ID,直到我发送它们并从 MAM 检索它们。
我没有找到任何关于从服务器获取当前发送的消息ID的示例,并且Strophe在消息从客户端发送到服务器接收后不提供任何回调。
所以,问题是 - 有什么方法可以获取服务器为当前发送的消息生成的消息 ID (stanza-id/archived)?
也许我自己的方法是错误的 - 我应该生成自己的 ID 并将其添加到来自客户端的每条消息中吗?
目前除了查询存档外没有指定任何机制。 XMPP 社区在未来解决这个问题的一个突出想法是将 send carbon 反映给原始发件人,其中将包含一个 stanza-id 元素,其中包含存档分配的 ID。