Erlang 阅读并格式化ejabberd中的消息节

Erlang 阅读并格式化ejabberd中的消息节,erlang,xmpp,ejabberd,stanza,Erlang,Xmpp,Ejabberd,Stanza,我一直在ejabberd开发一个定制模块。我需要提取出消息的正文内容,还需要检查节中是否有消息文本。这是我的代码片段 -module(mod_push_generate). -behaviour(gen_mod). -include("logger.hrl"). -include("ejabberd_sql_pt.hrl"). -include("ejabberd_http.hrl"). -include("xmpp.hrl"). %-include("jlib.hrl"). %% gen

我一直在ejabberd开发一个定制模块。我需要提取出消息的正文内容,还需要检查节中是否有消息文本。这是我的代码片段

-module(mod_push_generate).

-behaviour(gen_mod).

-include("logger.hrl").
-include("ejabberd_sql_pt.hrl").
-include("ejabberd_http.hrl").
-include("xmpp.hrl").
%-include("jlib.hrl").

%% gen_mod API callbacks
-export([start/2, stop/1, depends/2, mod_options/1, fetch_token/2, on_user_send_packet/1]).

start(Host,_Opts) ->
  ?INFO_MSG("Mod PUSH GENARATOR has been started",[]),
  inets:start(),
  ejabberd_hooks:add(user_send_packet, Host, ?MODULE, on_user_send_packet, 50),
  ok.

stop(Host) ->
  ?INFO_MSG("Module has been stopped",[]),
  ejabberd_hooks:delete(user_send_packet, Host, ?MODULE, on_user_send_packet, 50),
  ok.

depends(_Host, _Opts) ->
  [].


mod_options(_Host) ->
  [].

%-spec on_user_send_packet({stanza(), ejabberd_c2s:state()}) -> {stanza(), ejabberd_c2s:state()}.

%on_user_send_packet({From, To, XML} = Pkt) ->
on_user_send_packet({#message{to = Peer} = Pkt, #{jid := JID} = C2SState}) ->
  ?INFO_MSG("on user send packet called from  ",[Pkt]),
  Els = xmpp:get_els(Pkt),
  ?INFO_MSG("Body: ",[Els]),
  {Pkt, C2SState};

on_user_send_packet(Acc) ->
    ?INFO_MSG("Inside nothing box.",[]),
    Acc.
日志Pkt正在提供

12:41:17.956 [info] FORMAT ERROR: "on user send packet called from  " [{message,<<"2fe6c6a3-e89e-4f05-ac4d-b096b75f0f32">>,chat,<<"en">>,{jid,<<"sagar">>,<<"192.168.4.69">>,<<"sagar.webApp">>,<<"sagar">>,<<"192.168.4.69">>,<<"sagar.webApp">>},{jid,<<"tony">>,<<"192.168.4.69">>,<<>>,<<"tony">>,<<"192.168.4.69">>,<<>>},[],[{text,<<>>,<<"xasXASXAS">>}],undefined,[{xmlel,<<"request">>,[{<<"xmlns">>,<<"urn:xmpp:receipts">>}],[]}],#{ip => {0,0,0,0,0,65535,49320,1093}}}]

12:41:17.956[info]格式错误:“在用户发送数据包时,从“[{message,,chat,{jid,,,,,,,,},{jid,,,,,,,,,[{text,,,}],undefined,[{xmlel,,[{,},,][,},]},[{ip=>{0,0,0,0,065535493201093}]
而艾尔斯正在给予

14:04:25.906 [info] FORMAT ERROR: "Body: " [[{xmlel,<<"request">>,[{<<"xmlns">>,<<"urn:xmpp:receipts">>}],[]}]]
14:04:25.906[info]格式错误:“正文:[[{xmlel,,[{,}],[}]]
第二行显示,在我取出消息节的组件时,唯一检测到的xml元素是“request”元素。为什么在消息节中没有“body元素”

还请告诉我如何取出(或检查是否存在)节中的消息文本

谢谢

为什么在消息节中没有“body元素”

#message结构将正文内容保存在#message.body中,而不是保存在#message.sub\els中。请参见中的示例

我需要提取邮件的正文内容

试试这句话:

  ?INFO_MSG("Body: ~p", [ xmpp:get_text(Pkt#message.body) ]),
它将记录以下内容:

17:08:12.897 [info] Body: <<"hey, are you there?">>
17:08:12.926 [info] Body: <<>>
17:08:12.897[信息]正文:
17:08:12.926[信息]正文:
并检查节是否有消息文本

当身体是,它意味着它没有身体

为什么在消息节中没有“body元素”

#message结构将正文内容保存在#message.body中,而不是保存在#message.sub\els中。请参见中的示例

我需要提取邮件的正文内容

试试这句话:

  ?INFO_MSG("Body: ~p", [ xmpp:get_text(Pkt#message.body) ]),
它将记录以下内容:

17:08:12.897 [info] Body: <<"hey, are you there?">>
17:08:12.926 [info] Body: <<>>
17:08:12.897[信息]正文:
17:08:12.926[信息]正文:
并检查节是否有消息文本

当身体是,它意味着它没有身体