2017-01-26 2 views
0

Ich habe ein Ejabberd-Modul, um Benachrichtigungen zu senden, falls der Empfänger einer Nachricht offline ist. Im Prinzip funktioniert es einigermaßen gut. Ein Problem ist, dass die URL, auf die ich die Benachrichtigung drücke, im Modul fest codiert ist. Intuitiv sollte dies in der ejabberd.yml Conf-Datei konfigurierbar sein.Lesen des ejabberd.yml-Modulparameters schlägt fehl

Der entsprechende Code-Schnipsel in meinem ejabberd.yml sieht wie folgt aus

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

Das Problem ist, dass ich nicht diesen Wert in meinem Modul, zumindest nicht in der Art und Weise zugreifen kann ich im Internet finden kann:

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]), 
    ... 

Dieser Befehl führt die folgende Warnung (nicht einmal ein Fehler):

[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 

So findet es den Wert. Jede Art und Weise die ?INFO_MSG Drucke und undefined:

2017-01-26 20:16:09.019 [info] <0.5453.0>@mod_fcm_fork:push_notification:52 mod_fcm_fork -> push_notification: undefined 

Interessanterweise sind die folgenden Arbeiten schön:

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

Aber in push_notification Ich habe keinen Zugriff auf _Opts, der wiederum durch einen Haken genannt. Wie kann ich also den post_url Wert in der Methode push_notification bekommen?

+1

versuchen gen_mod: get_module_opt (global,? MODUL, post_url, Spaß (X) -> X Ende, alle). –

+0

@MarynaKrasnova, danke! Ich arbeite jetzt gut. Du bist im Moment mein Lebensretter. Wo finde ich das Zeug? Alles, was ich bei Google finde, scheint veraltet zu sein, auch wenn ich die Ergebnisse auf das letzte Jahr beschränke. Nichts funktioniert für mich aus der Box. Jetzt wird Ejabberd nicht starten, wenn ich versuche "mod_mam" zu aktivieren, auch wenn ich den offiziellen Dokumenten folge. Es ist ein bisschen frustrierend, ehrlich gesagt, ich werde es für weitere 1-2h versuchen und den Beitrag hier noch eine Frage stellen. Auch hier wird Ihre Hilfe sehr geschätzt. Vielleicht möchten Sie eine richtige Antwort geben, damit ich sie akzeptieren kann. – Christian

+1

eigentlich weiß ich nicht ejabberd genug gut und die gleichen Probleme mit Docs, so habe ich manchmal nur mit find code um Beispiel zu bekommen, wie $ cd src $ grep -r "gen_mod: get_module_opt" oder smthk so, es ist schlechtes Zeug aber funktioniert manchmal –

Antwort

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