我基本上是在编写一个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.
您可能必须为机器人设置负面存在优先级..
首先要知道的是,在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.