XMPP:对话没有收到离线消息,但是来自ejabberd的Gajim没有收到

时间:2018-03-24 16:52:55

标签: xmpp ejabberd offline

基本场景

Bob离线,Alice使用Conversations 1.23.8作为客户端向他发送消息。服务器在debian上运行ejabberd 18.01。

时,Bob被视为离线
ejabberdctl connected_users

没有列出他的名字。

然后,消息将由ejabberd存储在脱机消息存储中。这可以通过以下方式检查:

ejabberdctl get_offline_count bob example.com

/etc/ejabberd/ejabberd.yml mod_offline中配置:

access:
  max_user_offline_messages:
    admin: 5000
    all: 100
...
modules:
  mod_offline:
    access_max_user_messages: max_user_offline_messages
...

案例A:

Bob使用gajim 1.0.0连接到服务器。他收到了离线消息和

ejabberdctl get_offline_count bob example.com

返回0(连接前它> 0)并且日志(/var/log/ejabberd/ejabberd.log)说:

2018-03-24 17:32:10.132 [debug] <0.4422.0>@xmpp_socket:send:218 (tls|<0.4422.0>) Send XML on stream = <<"<message xml:lang='en' to='bob@example.com/gajim.8FNGJDH5' from='alice@example.com/phone' type='chat' id='643ah4c3-8920-4c52-82b1-89s6f759vff7'><request xmlns='urn:xmpp:receipts'/><markable xmlns='urn:xmpp:chat-markers:0'/><origin-id xmlns='urn:xmpp:sid:0' id='643ah4c3-8920-4c52-82b1-89s6f759vff7'/><active xmlns='http://jabber.org/protocol/chatstates'/><delay from='example.com' stamp='2018-03-24T16:31:54.745016Z' xmlns='urn:xmpp:delay'>Offline storage</delay><body>This is my message.</body></message>">>
到目前为止,这太好了。

案例B:

Bob使用Conversations 1.23.8连接到服务器。他没有收到离线消息,但是

ejabberdctl get_offline_count bob example.com
无论如何,

返回0(在连接之前它> 0)并且日志(/var/log/ejabberd/ejabberd.log)没有像情况A那样的条目。

问题:

我现在正在研究这几天。我查看了服务器的配置以及客户端的配置。根据我的经验,我会说这是Conversations客户端的一个问题,但我不知道现在在哪里看。我应该在ejabberd.log中查找什么日志消息?

1 个答案:

答案 0 :(得分:1)

似乎Conversations 1.23.8不支持离线消息(XEP-0160),但它支持消息档案管理(MAM-XEP-0313)。

我的解决方案现在是将离线消息重定向到MAM,并且客户端在连接到服务器时与其mams同步。提示:默认情况下,在ejabberd 18.01中禁用MAM。

我的MAM配置是:

mod_mam:
  iqdisc: one_queue
  default: always
  assume_mam_usage: true

我没有更改我的mod_offline配置。

提示:执行此操作时,还需要mod_ping和mod_stream_mgmt来检测丢失的连接并终止会话,以便mod_offline捕获脱机消息并重新发送给mam。