当前位置:  开发笔记 > 运维 > 正文

在不开始聊天的情况下发送XMPP消息

如何解决《在不开始聊天的情况下发送XMPP消息》经验,为你挑选了1个好方法。

我基本上是在编写一个XMPP客户端来自动回复" 特定 "的聊天消息.

我的设置是这样的:

我已经洋泾浜上运行我的机器配置为与帐户运行x@xyz.com.

我将自己的jabber客户端配置为使用相同的帐户x@xyz.com运行.

可能还有其他XMPP客户端 .

这是我的要求:

我试图自动化我在gtalk上收到的某些消息.因此,每当我收到一条特定的消息,例如:"你好吗"时,我自己的XMPP客户端应该自动回复说"罚款".您是如何".所有发送的消息(在我的客户回复之前和之后)都发送到x@xyz.com但应该被所有客户端接收(我自己的客户端没有UI,只能响应特定的消息.).

现在我已经将我的客户端编码为自动回复.这很好用.但我面临的问题是,只要我回复(我使用smack库),发送到x@xyz.com的所有后续消息都只能由我的XMPP客户端接收.这显然是一个问题,因为我自己的客户端非常转储并且没有UI,因此我无法看到发送给我的其余消息,从而使我"丢失"消息.

我也观察到与其他XMPP客户端相同的行为.现在的问题是,这是XMPP的要求(很抱歉,我还没有很好地阅读XMPP协议).是否可以对XMPP客户端进行编码以向用户发送回复,并且仍能够在当前正在侦听消息的所有客户端中接收所有后续消息?让我的客户端成为一个完整的XMPP客户端是一个解决方案,但我不想走那条路.

我希望我的问题很明确.

小智.. 5

您可能必须为机器人设置负面存在优先级..

首先要知道的是,在XMPP协议中,每个客户端都应该有一个完整的JID.这是一个简单的JID - 在您的情况下是x@xyz.com,最后有一个资源,例如x@xyz.com/pidgin或x@xyz.com/home(其中/ pidgin和/ home是资源).这是如何实现将消息路由到不同客户端的一部分.

然后是存在节.上线时,客户端通常会向服务器发送一个在线状态节.这通知例如客户端是否可用于聊天或远离午餐.随着这些信息可以优先发送.当连接多个客户端时,具有最高优先级的客户端将接收发送到裸JID的消息(例如,ClientA(prio = 50)和ClientB(prio = 60) - > ClientB接收发送到x @ xyz的消息. COM).但也存在负面优先事项.小于0的优先级表示永远不应该向该客户端发送任何消息.这样的节可能看起来像这样


    -1

这可能适合您的情况.请记住,它还取决于您的帐户所在的XMPP服务器,该服务器可能已经或可能没有完全实现此协议的这一部分.

总结一下:我建议您查看Smack API如何设置状态,并在连接后立即将机器人客户端的优先级设置为<0.



1> 小智..:

您可能必须为机器人设置负面存在优先级..

首先要知道的是,在XMPP协议中,每个客户端都应该有一个完整的JID.这是一个简单的JID - 在您的情况下是x@xyz.com,最后有一个资源,例如x@xyz.com/pidgin或x@xyz.com/home(其中/ pidgin和/ home是资源).这是如何实现将消息路由到不同客户端的一部分.

然后是存在节.上线时,客户端通常会向服务器发送一个在线状态节.这通知例如客户端是否可用于聊天或远离午餐.随着这些信息可以优先发送.当连接多个客户端时,具有最高优先级的客户端将接收发送到裸JID的消息(例如,ClientA(prio = 50)和ClientB(prio = 60) - > ClientB接收发送到x @ xyz的消息. COM).但也存在负面优先事项.小于0的优先级表示永远不应该向该客户端发送任何消息.这样的节可能看起来像这样


    -1

这可能适合您的情况.请记住,它还取决于您的帐户所在的XMPP服务器,该服务器可能已经或可能没有完全实现此协议的这一部分.

总结一下:我建议您查看Smack API如何设置状态,并在连接后立即将机器人客户端的优先级设置为<0.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有