当我从邮递员触发ejabberd的send_message api时,它总是返回0,这是一个肯定的响应,为什么?

问题描述 投票:0回答:1

当我触发 send_message api 时,无论客户端离线还是在线,api 的响应都是 0 表示成功。所以发送的消息就是响应告诉我们的正确内容!.

但是如果客户端离线并且我现在触发send_message api,客户端将不会收到消息,那么为什么api的响应显示0-成功。如何从 ejabberd 获得由于用户离线而未发送消息的响应

ejabberd
1个回答
0
投票

它总是返回0,即肯定响应,为什么?

是的,该命令返回的结果几乎无关紧要。

该命令返回 ejabberd_router:route 返回的结果。该函数总是返回成功,除非构建节出现问题。

该节已发送,即使它发送到离线帐户或不存在的帐户。如果该节被发送到远程服务器,我们如何知道他是否收到了它?这不是节路由的问题...这是节接收确认的问题,并且该命令不关注于此。

如何从 ejabberd 获得由于用户离线而未发送消息的响应

如果目标帐户是本地帐户,并且由 ejabberd 托管,您可以检查该帐户是否有一些具有积极优先级的在线会话。如果优先级为负,则仅当您将消息发送到正确的资源时才会传递该消息。

例如:

用户在线且优先级为正(零也是正):

$ ejabberdctl user_sessions_info admin localhost
c2s_tls ::ffff:127.0.0.1        33517   0      ejabberd@localhost      67      away    tka1

$ ejabberdctl send_message chat user@localhost admin@localhost "" HiZero1
$ ejabberdctl send_message chat user@localhost admin@localhost/tka1 "" HiZero2

用户收到这两条消息。

如果账户在线且优先级为负:

$ ejabberdctl user_sessions_info admin localhost
c2s_tls ::ffff:127.0.0.1        33517   -2      ejabberd@localhost      67      away    tka1

此消息将不会被发送:

$ ejabberdctl send_message chat user@localhost admin@localhost "" Hiii344

此消息将被传递,因为它被发送到特定资源(tka1):

$ ejabberdctl send_message chat user@localhost admin@localhost/tka1 "" Hiii344
© www.soinside.com 2019 - 2024. All rights reserved.