You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过REST API获取ejabberd中两个用户的全部消息

问题:如何通过ejabberd REST API获取用户间的全部聊天消息?

我目前正在使用ejabberd将一对一聊天功能集成到Web应用中。已尝试通过send_message API从user2向user1发送消息,请求示例如下:

POST /api/send_message
{
  "type": "headline",
  "from": "user2@localhost",
  "to": "user1@localhost",
  "subject": "Testing",
  "body": "Sample message from user2"
}

打开pidgin后能看到来自user2的消息,接口返回0表示成功(文档说明此状态为成功)。在打开pidgin查看消息前,该消息被标记为离线消息,这一点我可从管理面板中查看。

现咨询:如何通过REST API端点获取user1与user2之间的全部消息?就像使用send_message端点实现跨用户发消息那样。


解决方案

首先得确认你的ejabberd实例已经启用了mod_mam模块(消息归档功能),这是获取历史消息的核心前提。如果没开,需要在ejabberd配置文件中添加或启用该模块,同时配置自动归档一对一消息的规则。

接下来,你可以通过ejabberd的REST API调用get_archive端点来拉取指定用户间的聊天记录,具体请求示例如下:

基础请求示例(带时间范围)

POST /api/get_archive
{
  "user": "user1@localhost",
  "with": "user2@localhost",
  "start": "2024-01-01T00:00:00Z",
  "end": "2024-12-31T23:59:59Z"
}

简化请求示例(无时间范围)

如果不需要限定时间,只传对话双方的账号即可:

POST /api/get_archive
{
  "user": "user1@localhost",
  "with": "user2@localhost"
}

参数说明

  • user:指定要查询消息记录的目标用户(比如要查看user1的聊天记录就填user1@localhost)
  • with:指定对话的另一方账号(此处为user2@localhost)
  • start/end:可选参数,用ISO 8601格式的时间串限定查询的时间范围

注意事项

  • 调用该API的账号需要具备访问消息归档的权限,可在ejabberd的ACL配置中设置对应权限规则。
  • 只有启用mod_mam之后发送的消息才会被归档,之前的历史消息无法通过该API获取。
  • 离线消息被用户读取后,依然会保存在归档中,除非你配置了自动删除过期消息的规则。

内容的提问来源于stack exchange,提问作者rangarajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:24:29