Erlang 读取ejabberd.yml模块参数失败

Erlang 读取ejabberd.yml模块参数失败,erlang,ejabberd,ejabberd-module,Erlang,Ejabberd,Ejabberd Module,我有一个Ejabberd模块,用于在邮件收件人脱机时推送通知。原则上,它运行得相当好。一个问题是,我将通知推送到的URL在模块中是硬编码的。直观地说,这应该可以在ejabberd.yml conf文件中配置 myejabberd.yml中的相关片段如下所示 modules: mod_fcm_fork: post_url: "http://xxx.xxx.xxx.xxx/notification/push/" 问题是,我无法在模块内访问该值,至少不能以我在Web上找到的方式: pus

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

myejabberd.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
有趣的是,以下方法很有效:

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

但是在push_通知中,我没有访问_Opts的权限,而这个选项又被钩子调用。那么如何在方法推送通知中获取post\u url值呢?

试试gen\u mod:get\u module\u optglobal,?module,post\u url,funX->X end,全部。@MarynaKrasnova,谢谢!我现在工作很好。你现在是我的救命恩人。我在哪里能找到那些东西?即使我把搜索结果限制在去年,我在谷歌上发现的一切似乎都过时了。对我来说,没有什么是现成的。现在,当我试图启用“mod_-mam”时,Ejabberd不会启动,即使是在遵循官方文档时。坦白地说,这有点令人沮丧,我会为自己再尝试1-2小时,然后在这里发布另一个问题。再次感谢您的帮助。你可能想给出一个正确的答案,这样我就可以接受了。事实上,我对ejabberd了解不够,文档也有同样的问题,所以有时候我只是使用find代码来获取示例,比如$cd src$grep-r gen_mod:get_module_opt或类似的smthk,这是不好的东西,但有时会起作用
start(Host, _Opts) ->
  URL = proplists:get_value(post_url, _Opts),
  ?INFO_MSG("HTTP client started ~p~n", [URL]),
gen_mod:get_module_opt(global,?MODULE,post_url,fun(X) -> X end, all)