2013-05-05 3 views
0

Я пытаюсь заставить мой сервер ejabberd отправлять уведомления о офлайн-push с помощью настраиваемого модуля 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

+0

Я пробовал приоритет 80, но все равно не повезло: / – Firefly

1

Пропустить хост или глобально на крючок, а не на _Host. Крюк должен быть зарегистрирован для конкретного хоста или глобального крючка.

Смежные вопросы