2015-04-23 58 views
0

我有简单的ejabebrd插件,我需要从它发送消息。在这里,我张贴我的代码示例和错误,我得到了。请给我你的反馈。使用Erlang从ejabberd发送消息

我的代码:

-module(mod_final). 
-on_load(send_message/0). 
-behaviour(gen_mod). 
-export([start/2, stop/1]). 

-include("ejabberd.hrl"). 
-include("logger.hrl"). 
-include("jlib.hrl"). 

start(_Host, _Opt) -> 
     ?INFO_MSG("mod_final starting", []), 
     ok. 

stop(_Host) -> 
    ?INFO_MSG("mod_final stoping", []), 
     ok. 

send_message() -> 
    LUser = "test1", 
    LServer = "localhost", 
    From = jlib:make_jid(LUser, LServer, []), 

    TUser = "test2", 
    TServer = "localhost", 
    To = jlib:make_jid(TUser, TServer, []), 

    FromAddress = jlib:jid_to_string(From), 
    ToAddress = jlib:jid_to_string(To), 

    ?INFO_MSG("send message starting", []), 

    XmlBody = {xmlelement, "message", [{"id", []},{"type", "chat"}, {"from", FromAddress}, {"to", ToAddress}], [{xmlelement, "body", [], [{xmlcdata, <<"Test Message">>}]}]}, 

    ejabberd_router:route(From, To, XmlBody). 

但我得到这个错误:

D(<0.252.0>:ejabberd_router:313) : route 
    from {jid,"test1","localhost",[],"test1", 
        "localhost",[]} 
    to {jid,"test2","localhost",[],"test2", 
       "localhost",[]} 
    packet {xmlelement,"message", 
        [{"type","error"}, 
        {"to","[email protected]"}, 
        {"from","[email protected]"}, 
        {"id",[]}], 
        [{xmlelement,"body",[],[{xmlcdata,<<"Test Message">>}]}, 
        {xmlelement,"error", 
         [{"code","503"},{"type","cancel"}], 
         [{xmlelement,"service-unavailable", 
          [{"xmlns","urn:ietf:params:xml:ns:xmpp-stanzas"}], 
          []}]}]} 

感谢你的帮助。

回答

0

我的建议是不要创建自己的XML。您可以使用此功能来捕捉数据包,然后写入错误日志

on_filter_packet({From, To, XML} = Packet) -> 
    %% does something with a packet 
    %% should return modified Packet or atom `drop` to drop the packet 

    error_logger:info_msg(XML, [a_module]), 

    %% or use error_logger:info_msg(xml:get_subtag(XML, <<"body">>), [a_module]), 
    %% to take a body 
    Packet. 

然后,你可以使用相同的XML,但改变xmlcdata