ejabberd mod_pubsub 离线消息

Posted

技术标签:

【中文标题】ejabberd mod_pubsub 离线消息【英文标题】:ejabberd mod_pubsub offline message 【发布时间】:2016-01-13 18:16:16 【问题描述】:

我想拦截mod_pubsub的离线消息,如果我在ejabberd中向离线用户发送正常消息,如果用户重新连接消息到达,我会在离线odbc表中看到该消息。

如果我发布到一个节点,并且某个用户处于脱机状态,我在脱机消息表中看不到任何内容,但如果用户重新连接项目节点,则会正确发送,因此消息会保存在某处。

我可以将项目离线发送到离线消息 odbc 表吗?或者我可以拦截mod_pubsub 的离线项目,例如消息,实际上对于来自插件的消息我可以这样做:

 start(_Host, _Opt) ->
    inets:start(),
    ejabberd_hooks:add(offline_message_hook, _Host, ?MODULE, create_message, 50).

 stop (_Host) ->
    ejabberd_hooks:delete(offline_message_hook, _Host, ?MODULE, create_message, 50).

这是我为mod_pubsub 配置的ejabberd.yml

mod_pubsub:
  access_createnode: pubsub_createnode
  ## reduces resource comsumption, but XEP incompliant
  ignore_pep_from_offline: true
  ## XEP compliant, but increases resource comsumption
  ## ignore_pep_from_offline: false
  last_item_cache: false
  db_type: odbc
  plugins:
    - "flat"
    - "hometree"
    - "pep" # pep requires mod_caps

【问题讨论】:

【参考方案1】:

默认情况下,发布订阅消息类型为headline。根据 XMPP 规范,标题消息不应存储在离线消息存储中。

但是,有一个mod_pubsub 选项可以更改默认通知类型。例如,您可以将 mod_pubsub notification_type 选项设置为 normal。普通消息存储在离线存储中。

【讨论】:

以上是关于ejabberd mod_pubsub 离线消息的主要内容,如果未能解决你的问题,请参考以下文章

具有流管理 (XEP-198) 的 Ejabberd 不使用离线消息挂钩

ejabberd 不将未确认的消息存储到离线存储

XMPP 客户端无法接收离线消息

用erlang解析ejabberd数据包

offline_message_hook:发送离线消息时不被调用

ejabberd 将客户端标记为离线所用的时间