我基本上是在写一个XMPP客户端来自动回复“特定”聊天消息。
我的设置是这样的:
这是我的要求:
我正在尝试自动化我在gtalk上收到的某些消息。因此,每当我收到一条特定的消息,例如:“你好吗”时,我自己的XMPP客户端应该自动回复说“罚款”。你是怎么回事。所有邮件(我的客户回复之前和之后)发送到x@xyz.com但是应该被所有客户收到(我自己的客户端没有用户界面,只能回复具体信息。)。
现在我已经将客户端编码为自动回复。这很好用。但我面临的问题是,只要我回复(我使用smack库),发送到x@xyz.com的所有后续消息都只能由我的XMPP客户端接收。这显然是一个问题,因为我自己的客户端非常倾倒并且没有UI,所以我不会看到发送给我的其他消息,从而使我“丢失”消息。
我也观察到与其他XMPP客户端相同的行为。现在的问题是,这是XMPP的要求(很抱歉,我还没有很好地阅读XMPP协议)。是否可以对XMPP客户端进行编码以向用户发送回复,并且仍能够在当前正在侦听消息的所有客户端中接收所有后续消息?让我的客户端成为一个完整的XMPP客户端是一个解决方案,但我不想走那条路。
我希望我的问题很明确。
答案 0 :(得分: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的优先级表示永远不应该向该客户端发送任何消息。这样的节可能看起来像这样
<presence from="x@xyz.com/bot">
<priority>-1</priority>
</presence>
这可能适合您的情况。请记住,它还取决于您的帐户所在的XMPP服务器,该服务器可能已经或可能没有完全实现此协议的这一部分。
总结一下:我建议您查看Smack API如何设置状态,并在连接后立即为您的bot客户端设置优先级为<0。