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

技术问询:Conversations无法接收ejabberd离线消息,Gajim却可正常接收

Conversations 1.23.8无法接收ejabberd 18.01离线消息,但Gajim正常的解决方案

结合你描述的环境(Debian系统上的ejabberd 18.01,客户端Conversations 1.23.8、Gajim)和现象,这个问题的核心是两款客户端处理离线消息的机制差异,加上ejabberd的配置可能没有适配Conversations的需求。下面是具体的分析和排查步骤:

背景确认

  • 离线状态验证:Bob离线已通过ejabberdctl connected_users确认,消息成功存入离线存储(ejabberdctl get_offline_count bob example.com验证有效)
  • 异常现象:Bob上线后,Gajim可正常接收离线消息,但Conversations完全无法获取

核心原因分析

两款客户端的离线消息获取逻辑存在明显差异:

  • Gajim默认使用传统的XEP-0160离线消息拉取方式,直接请求服务器的离线消息存储
  • Conversations则更依赖**XEP-0313(消息归档管理MAM)**来获取历史/离线消息,同时也可能依赖XEP-0357推送通知,如果ejabberd的配置没跟上,就会出现收不到的情况

逐步排查与解决

  • 检查ejabberd的mod_offline完整配置
    你的ejabberd.yml里已经设置了离线消息配额,但还要确保关键配置项正确:
    打开/etc/ejabberd/ejabberd.yml,找到mod_offline模块,确认:

    modules:
      mod_offline:
        access_max_user_messages: max_user_offline_messages
        store_body: true  # 必须设置为true,否则消息内容不会被存储,Conversations无法解析
    

    如果store_body是false,即使消息被存储,Conversations也看不到内容,自然不会显示。

  • 确认mod_mam(消息归档)的配置
    Conversations默认用MAM来拉取离线消息,ejabberd 18.01需要正确配置mod_mam才能支持:
    检查ejabberd.yml中的mod_mam部分,确保:

    modules:
      mod_mam:
        default: always  # 自动为所有用户启用MAM
        store_messages: true  # 存储所有消息(包括离线消息)
        max_age: 365  # 可选,设置消息保留天数
    

    如果mod_mam没有配置,或者default设为never,Conversations就无法通过MAM获取到离线消息,而Gajim用传统方式不受影响。

  • 检查Conversations的客户端设置
    有时候是客户端自身的设置导致的:

    • 打开Conversations,进入设置 -> 消息获取
    • 确保获取离线消息选项是开启状态
    • 如果开启了仅通过推送接收消息,要么关闭这个选项(让客户端主动拉取),要么在ejabberd上配置XEP-0357推送服务(这个配置相对复杂,优先建议关闭推送-only模式)
  • 查看ejabberd日志找错误线索
    如果上面的配置都没问题,查看ejabberd的日志(默认路径/var/log/ejabberd/ejabberd.log),搜索Bob上线时的相关日志:
    用命令过滤关键内容:

    grep "bob\|offline\|mam" /var/log/ejabberd/ejabberd.log
    

    看看有没有类似"拒绝MAM查询"、"离线消息推送失败"的错误,这些日志能帮你定位具体的配置或权限问题。

  • 版本兼容性调整(可选)
    ejabberd 18.01是2018年的老版本,而Conversations 1.23.8是较新的客户端,可能存在协议实现的兼容性问题:

    • 可以尝试用更旧版本的Conversations(比如1.20.x系列)测试,看是否能正常接收
    • 或者考虑升级ejabberd到较新的稳定版(比如23.x或更高),新版本对现代XMPP协议的支持更完善,能更好适配Conversations的需求

总结

最常见的解决场景是:ejabberd没有配置mod_mam或者配置不正确,导致Conversations无法通过MAM获取离线消息,而Gajim用传统方式正常。按照上面的步骤排查,应该能快速解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:55