8

我正在尝试使用带有 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,因此非常感谢有关它的任何信息。

4

1 回答 1

1

据我所知,只有当该房间被配置为持久化并设置为记录转换时,您才能从房间中检索聊天历史记录。服务器返回历史记录的天数也有限制。过去的限制是 2 天,但已经进行了长期的讨论,并且有一些补丁可以解决这个限制。

根据此处关于 SO 的另一个问题,如果不首先通过单独的 XMMP 服务器代理历史记录,则无法通过直接 HTTP 请求检索历史记录,这是您尝试做的事情,还是您正在与 Openfire 服务器交谈?

最后,看起来你想要的东西是可能的。根据 XMPP 规范。任何新用户在加入时都会收到房间的完整历史记录,前提是房间被配置为发送它。因此,只需以随机创建的用户身份加入正确配置的房间,即可获得您正在寻找的历史记录。

因此,取决于这是针对您运行的服务还是您尝试归档其他人的服务器,您的里程可能会保持警惕。如果您设置服务器,它看起来是可能的,即使不是通过特定的 API 调用。如果服务不受您的控制,那么您可能会不走运,因为历史可能根本不存在......

即使我无法给出具体的解决方案,也希望对您有所帮助。

服务发现

根据服务发现的文档,您的请求不完整:

<iq type='get'
    from='romeo@montague.net/orchard'
    to='plays.shakespeare.lit'
    id='info1'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

也许您应该阅读一下如何使用 gem 与 XMPP 服务建立基本连接?这看起来是您需要开始的。他们有很多例子可以帮助你了解宝石的细节......

于 2013-02-03T17:55:14.967 回答