从 ejabberd 检索聊天记录时如何识别已发送和未发送的消息?

Posted

技术标签:

【中文标题】从 ejabberd 检索聊天记录时如何识别已发送和未发送的消息?【英文标题】:How to identify delivered and undelivered messages while retreiving chat history from ejabberd? 【发布时间】:2019-01-04 15:38:51 【问题描述】:

我正在使用以下代码检索聊天记录。在视图中,我需要显示消息的刻度,无论它们是否已传递。但是对于已传递和未传递的消息,消息节结构是相同的。那么如何在不建立外部数据库的情况下区分已投递和未投递的消息。

这是我的 service.ts 文件中的代码:

this.Connection.mam.query(from, 
    with: to,
    before: '',
    max: '10',
    onMessage: (message) = > 
        console.log(message);
    ,
    onComplete: (response) = > 
        console.log('Got all the messages');
    
);

我得到的输出是:

<message
    xmlns=​"jabber:​client" to=​"sashank@localhost/​9158846669251631426100" from=​"sashank@localhost">​

    <result
        xmlns=​"urn:​xmpp:​mam:​2" id=​"1546597812368545">​

        <forwarded
            xmlns=​"urn:​xmpp:​forward:​0">​

            <message
                xmlns=​"jabber:​client" xml:lang=​"en" 
         to="murali@localhost" from=​"sashank@localhost/​18846625227131105454610" type=​"chat" id=​"0777d27e-7238-42ba-9063-78185c05e76d">​

                <archived
                    xmlns=​"urn:​xmpp:​mam:​tmp" by=​"sashank@localhost" id=​"1546597812368545">​

                </archived>​

                <stanza-id
                    xmlns=​"urn:​xmpp:​sid:​0" by=​"sashank@localhost" id=​"1546597812368545">​

                </stanza-id>​

                <request
                    xmlns=​"urn:​xmpp:​receipts">​

                </request>​

                <body>​Hello buddy! How are you</body>​

            </message>​

            <delay
                xmlns=​"urn:​xmpp:​delay" from=​"localhost" stamp=​"2019-01-04T10:​30:​12.368545Z">​

            </delay>​

        </forwarded>​

    </result>​

</message>​

这是已传递的消息,未传递的消息在节结构中也看起来相同,没有额外的属性。提前致谢。

【问题讨论】:

【参考方案1】:

这是对的。它们看起来会一样。 MAM 存储仅存储“消息”节的提要,包括带有正文的消息、状态消息等。因此,您需要获取此提要,然后在客户端进行后处理-获取带有正文的消息,然后获取状态并将状态映射到他们的消息。然后才向最终用户显示处理后的数据。

不是一个非常干净的方法,但这就是 MAM 的工作方式

【讨论】:

是的,你说的是对的,但是当我从 MAM 查询消息时,我们无法识别已传递​​的消息和未传递的消息,所以我们如何处理消息并显示给最终用户,因为这条消息是以单勾和双勾的形式交付与否?提前致谢

以上是关于从 ejabberd 检索聊天记录时如何识别已发送和未发送的消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何记录通过 ejabberd 的消息

如何从 ejabberd 服务器向多个客户端发送消息

收件人在 Ejabberd 中突然断开连接时消息丢失

Ejabberd 聊天服务集成

如何将数据包从服务器发送到客户端(从函数)Ejabberd

如何从已发送的电子邮件中检索(google api)