问题描述
我正在使用REST API / api / send_message 从android设备将消息发送到受阻服务器,并在服务器端成功接收,但是在收到消息后ejabberd服务器未发送给客户端。我从这样的客户端发送一条消息:
dictify(df,['n1','n2'])
{'s1': {'A': [{'C': 3,'D': 4},{'C': 5,'D': 6}],'B': {'P': 6,'Q': 3}}}
我还在ejabberd上登录on_user_send_packet列表程序,并打印数据包的数据,该数据与我从客户端发送的数据相同。
我在android中使用smack库。
我收到消息的服务器端模块部分:
192.168.1.24:5443/api/send_message?"type"= "normal",&"from"= "admin@faiqkhan-VirtualBox",&"to"= "faiq@faiqkhan-VirtualBox",&"subject"= "Restart",&"body"="In 5 minutes"
服务器日志:
on_user_send_packet({#message{from = From,body = Body,subject = Subject} = Packet,C2sstate}) ->
?INFO_MSG("mod_stanza_ack message packet: ~p~n",[Packet]),?INFO_MSG("mod_stanza_ack message subject: ~p~n",[Subject]),?INFO_MSG("mod_stanza_ack message body ignored: ~p~n",[Body])
end,{Packet,C2sstate}.
尝试使用smack库的回调在客户端接收消息
API call send_message [{<<"type">>,<<"normal">>},{<<"from">>,<<"67456efc-be57-4cbd-a176-527de2dce19d@faiqkhan-virtualBox">>},{<<"to">>,<<"e5d6d83c-ea77-4d10-aaac-4e0e38899ac2@faiqkhan-virtualBox">>},{<<"subject">>,<<"Restart">>},{<<"body">>,<<"In 5 minutes">>}] from ::ffff:192.168.1.46:51597
13:43:14.298 [info] mod_stanza_ack message packet: {message,<<"4325851467592961166">>,normal,<<>>,{jid,<<"67456efc-be57-4cbd-a176-527de2dce19d">>,<<"faiqkhan-virtualBox">>,<<>>},<<"e5d6d83c-ea77-4d10-aaac-4e0e38899ac2">>,[{text,<<"Restart">>}],<<"In 5 minutes">>}],undefined,[],#{}}
13:43:14.298 [info] mod_stanza_ack message subject: [{text,<<"Restart">>}]
13:43:14.298 [info] mod_stanza_ack message body ignored: [{text,<<"In 5 minutes">>}]
我是否想念客户端上的一些监听器?
解决方法
它对我来说正常工作。我注册帐户admin
和faiq
,并使用Tkabber客户端登录到faiq
帐户,然后发送API查询:
ejabberdctl send_message normal admin@localhost faiq@localhost Restart In5minutes
客户端完美接收消息:
<message to='faiq@localhost'
from='admin@localhost'
id='18338888910541408674'>
<archived by='faiq@localhost'
id='1599730686404819'
xmlns='urn:xmpp:mam:tmp'/>
<stanza-id by='faiq@localhost'
id='1599730686404819'
xmlns='urn:xmpp:sid:0'/>
<body>In5minutes</body>
<subject>Restart</subject>
</message>
您可以使用Gajim或Psi等著名的Jabber桌面客户端登录,以检查您的API调用是否正常运行。这样,您将知道问题出在您的客户中还是在哪里……