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

Posted

技术标签:

【中文标题】在不开始聊天的情况下发送 XMPP 消息【英文标题】:Send XMPP message without starting a chat 【发布时间】:2010-11-06 07:15:10 【问题描述】:

我基本上是在编写一个 XMPP 客户端来自动回复“specific”聊天消息。

我的设置是这样的:

我的计算机上运行了 pidgin,配置为使用帐户 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 客户端是一种解决方案,但我不想走这条路。

我希望我的问题很清楚。

【问题讨论】:

【参考方案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 的优先级表示永远不应向该客户端发送任何消息。这样的节可能看起来像这样

<presence from="x@xyz.com/bot">
    <priority>-1</priority>
</presence>

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

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

【讨论】:

谢谢,我会检查并回复评论

以上是关于在不开始聊天的情况下发送 XMPP 消息的主要内容,如果未能解决你的问题,请参考以下文章

多用户聊天 XMPP

无服务器群消息(聊天)Xmpp

有啥方法可以在不使用 XMPP 协议的情况下连接到 Facebook 聊天服务?

如何在 XMPP 中阻止匿名用户

XMPP:只读多用户聊天

iphone xmpp 相关!