2013-05-05 28 views
0

我試圖讓我的ejabberd服務器通過使用自定義offline_message_hook模塊發送離線推送通知。問題是鉤子似乎永遠不會被調用。我已經嘗試將鉤子的優先級設置爲0,49和50,但仍然不起作用。ejabberd offline_message_hook不叫

這是該模塊的代碼:

% name of module must match file name 
-module(mod_offline_push). 

%% Every ejabberd module implements the gen_mod behavior 
%% The gen_mod behavior requires two functions: start/2 and stop/1 
-behaviour(gen_mod). 

%% public methods for this module 
-export([start/2, stop/1, create_message/3]). 

%% included for writing to ejabberd log file 
-include("ejabberd.hrl"). 

%% ejabberd functions for JID manipulation called jlib. 
-include("jlib.hrl"). 

start(_Host, _Opt) -> 
    ?INFO_MSG("mod_offline_push loading", []), 
    inets:start(), 
    ?INFO_MSG("HTTP client started", []), 
    ejabberd_hooks:add(offline_message_hook, _Host, ?MODULE, create_message, 0). 

stop (_Host) -> 
    ?INFO_MSG("stopping mod_offline_push", []), 
    ejabberd_hooks:delete(offline_message_hook, _Host, ?MODULE, create_message, 0). 

create_message(_From, _To, Packet) -> 
    ?INFO_MSG("creting offline message", []), 
    Type = xml:get_tag_attr_s("type", Packet), 
    FromS = xml:get_tag_attr_s("from", Packet), 
    ToS = xml:get_tag_attr_s("to", Packet), 
    if (Type == "chat") -> 
     post_offline_message(FromS, ToS) 
    end. 

post_offline_message(From, To) -> 
    ?INFO_MSG("Posting From ~p To ~p~n",[From, To]), 
    httpc:request(post, {"http://host.com/push.php",[], 
    "application/x-www-form-urlencoded", 
    lists:concat(["From=", From,"&To=", To])}, [], []), 
    ?INFO_MSG("post request sent", []). 

回答

0

最有可能你啓用mod_offline_odbc其發出調用同一個掛鉤後停止。

爲什麼不嘗試將優先級提高到50以上? 您也可以更改mod_offline_ *的實現,但它與ejabberd_sm中的其他掛鉤同步。

小語法建議 - 請從_Host中刪除下劃線。它保留給變量,這些變量不受限制以備後用。

+0

正確,我確實啓用了mod_offline_odbc。我似乎混淆了優先級,並認爲較低的值意味着更高的優先級。我會做一些挖掘,並找到優先mod_offline_ *發出停止,並把我的鉤子比它更高。我會及時向大家發佈。 – Firefly 2013-05-08 01:36:33

+0

我嘗試了80的優先級,但仍然沒有運氣:/ – Firefly 2013-05-19 06:27:34

1

傳遞主機或全局鉤子,而不是_Host。該鉤子需要註冊到特定主機或作爲全局鉤子。