我正在尝试使用带有 openfire 服务器的 ruby xmpp4r 库获取 openfire 多用户群聊天历史记录。我可以构建请求,但没有收到服务器回复。 下面是发现请求
iqr = Iq.new(:get,"example.com")
iqr.add_namespace("http://jabber.org/protocol/disco#info")
client.send(iqr)
这是请求的框架
<iq to='example.com' type='get' xmlns='http://jabber.org/protocol/disco#info'/>
但我没有收到服务器回复。我关注了 XEP-0160 和 XEP-0013。
我在这里错过了什么?
openfire是否提供房间聊天记录?有相应的 API 吗?
非常感谢任何帮助。而且我不太了解 openfire,因此非常感谢有关它的任何信息。
最佳答案
据我所知,只有当房间配置为持久 并设置为记录对话 时,您才能从该房间检索聊天记录。服务器返回历史记录的天数也有限制。过去的限制是 2 天,但现在有 a longstanding discussion and some patches修复该限制。
根据 another question因此,如果不首先通过单独的 XMMP 服务器代理历史记录,就不可能通过直接的 HTTP 请求检索历史记录,这是您尝试做的事情,还是您正在与 Openfire 服务器对话?
在结束时,看起来您想要的是可能的。 According to the XMPP spec.任何新用户在加入时都会收到房间的完整历史记录,前提是房间被配置为发送它。因此,只需以随机创建的用户身份加入正确配置的房间,即可为您提供所需的历史记录。
因此,根据这是否针对您运行的服务,或者您是否正在尝试存档其他人的服务器,您可能会谨慎行事。如果您设置服务器,它看起来是可能的,即使不是通过特定的 API 调用。如果服务不受您的控制,那么您可能就不走运了,因为历史记录可能根本不存在......
希望能对您有所帮助,即使我无法给出具体的解决方案。
服务发现
根据documentation for service discovery您的请求未完成:
<iq type='get'
from='romeo@montague.net/orchard'
to='plays.shakespeare.lit'
id='info1'>
<query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>
也许你应该 read up a bit关于如何使用 gem 与 XMPP 服务建立基本连接? This looks to be what you need开始。他们有很多示例,应该可以帮助您了解 gem 的细节......
关于ruby-on-rails - XMPP4r - 无法检索离线消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14041204/