读取ejabberd.yml模块参数失败

时间:2017-01-26 12:30:56

标签: erlang ejabberd ejabberd-module

我有一个Ejabberd模块,用于在邮件收件人离线时推送通知。原则上,它运作得相当好。一个问题是我推送通知的URL在模块中是硬编码的。直观地说,这应该可以在ejabberd.yml conf文件中配置。

ejabberd.yml中的相关代码段如下所示

modules:
  mod_fcm_fork:
    post_url: "http://xxx.xxx.xxx.xxx/notification/push/"

问题是我无法在我的模块中访问该值,至少不是我在Web上找到的方式:

push_notification(From, To, Packet) ->
  URL = gen_mod:get_module_opt(global, ?MODULE, post_url, []),
  %URL = gen_mod:get_module_opt(To#jid.lserver, ?MODULE, post_url, []),
  ?INFO_MSG("mod_fcm_fork -> push_notification: ~p~n",[URL]),
  ...

此命令抛出以下警告(甚至不是错误):

[warning] <0.5453.0>@ejabberd_config:prepare_opt_val:806 incorrect value '"http://xxx.xxx.xxx.xxx/notification/push/"' of option 'post_url', using 'undefined' as fallback

所以它找到/看到了价值。 ?INFO_MSG打印和undefined

的任何方式
2017-01-26 20:16:09.019 [info] <0.5453.0>@mod_fcm_fork:push_notification:52 mod_fcm_fork -> push_notification: undefined

有趣的是,以下效果很好:

start(Host, _Opts) ->
  URL = proplists:get_value(post_url, _Opts),
  ?INFO_MSG("HTTP client started ~p~n", [URL]),

但是在push_notification中,我无法访问_Opts,而post_url又被钩子调用。那么如何才能获得方法push_notification中的NAME=foobar PATTERN='*ob*' 值?

1 个答案:

答案 0 :(得分:1)

gen_mod:get_module_opt(global,?MODULE,post_url,fun(X) -> X end, all)