ejabberd mod_pubsub 离线消息

ejabberd mod_pubsub offline message

我想拦截 mod_pubsub 的离线消息,如果我在 ejabberd 中向离线用户发送一条普通消息,我会在离线 odbc table 中看到该消息,如果用户重新连接消息到达.

如果我发布到一个节点,并且一些用户离线,我在离线消息中看不到任何内容 table,但是如果用户重新连接,则项目节点被正确发送,因此消息保存在某个地方。

我可以将项目离线发送到离线消息 odbc table 吗?或者我可以拦截 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).

这是我的 ejabberd.yml mod_pubsub 配置:

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

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

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