Hola,
Estoy empezando a hacer mis pinitos en ésto del ejabberd, y me ha surgido una necesidad complicada.
Necesito mandar alertas offline/push a un teléfono IPhone.
He visto que existe un módulo que te permite utilizar el servicio de "PROWL" para mandar las alertas (mod_offline_prowl
Compilarlo es sencillo, y la configuración es muy simple, sim embargo, al arrancar el servidor, me aperece el siguiente error:
=INFO REPORT==== 2012-04-18 12:36:31 === I(<0.37.0>:mod_offline_prowl:44) : Starting mod_offline_prowl =INFO REPORT==== 2012-04-18 12:36:31 === I(<0.37.0>:mod_offline_prowl:44) : Starting mod_offline_prowl =ERROR REPORT==== 2012-04-18 12:36:31 === E(<0.37.0>:gen_mod:73) : {badarg, [{erlang,register,[mod_offline_prowl,<0.466.0>]}, {mod_offline_prowl,start,2}, {gen_mod,start_module,3}, {lists,foreach,2}, {ejabberd_app,start,2}, {application_master,start_it_old,4}]}
Ni que decir tiene que estoy pez en eso del "erlang", pero.....
Fijaros en la sección "start(Host,opts)"
¿No faltaría algo del tipooooo?:
register(gen_mod:get_module_proc(Host, Opts, ?PROCNAME),......
¿Puede alguien echarme una manita?
(he intentado contactar con el autor, pero no parece estar muy receptivo :-( )
Os pongo todo el código, que es muy cortito ;-)
Saludos.......
-module(mod_offline_prowl).
-author('rgeorge@midnightweb.net').
-behaviour(gen_mod).
-export([start/2,
init/2,
stop/1,
send_notice/3]).
-define(PROCNAME, ?MODULE).
-include("ejabberd.hrl").
-include("jlib.hrl").
start(Host, Opts) ->
?INFO_MSG("Starting mod_offline_prowl", [] ),
register(gen_mod:get_module_proc(Host, Opts, ?PROCNAME),
spawn(?MODULE, init, [Host, Opts])),
ok.
init(Host, _Opts) ->
inets:start(),
ssl:start(),
ejabberd_hooks:add(offline_message_hook, Host, ?MODULE, send_notice, 10),
ok.
stop(Host) ->
?INFO_MSG("Stopping mod_offline_prowl", [] ),
ejabberd_hooks:delete(offline_message_hook, Host,
?MODULE, send_notice, 10),
ok.
send_notice(_From, To, Packet) ->
Type = xml:get_tag_attr_s("type", Packet),
FromS = xml:get_tag_attr_s("from", Packet),
ToS = xml:get_tag_attr_s("to", Packet),
Body = xml:get_path_s(Packet, [{elem, "body"}, cdata]),
APIKeys = gen_mod:get_module_opt(To#jid.lserver, ?MODULE, apikeys, [] ),
APIKey = lists:keyfind(string:sub_word(ToS,1,$/), 1, APIKeys),
if
(Type == "chat") and (Body /= "") and (APIKey /= false) ->
?INFO_MSG("Found API Key for ~s. Will post message to Prowl.~n", [element(1,APIKey)] ),
Sep = "&",
Post = [
"apikey=", element(2,APIKey), Sep,
"application=XMPP", Sep,
"event=New%20Chat", Sep,
"description=", string:sub_word(FromS,1,$/), "%0A", Body, Sep,
"priority=-1", Sep,
"url=xmpp:", string:sub_word(FromS,1,$/) ],
httpc:request(post, {"https://api.prowlapp.com/publicapi/add", [], "application/x-www-form-urlencoded", list_to_binary(Post)},[],[]),
ok;
true ->
ok
end.
Problema solventado! Ésta era
Problema solventado!
Ésta era la solución:
start(Host, Opts) ->
?INFO_MSG("Starting mod_offline_prowl", [] ),
register(gen_mod:get_module_proc(Host, ?PROCNAME),
spawn(?MODULE, init, [Host, Opts])),
ok.
Por si alguien lo necesita.....