如何在ejabberd / XMPP中获得发送/接收消息的确认?

时间:2013-12-17 09:53:34

标签: xmpp ejabberd

如何知道该邮件是使用XMPP frameworkejabberd传递给其他用户的,我们使用XEP-0184类作为邮件传递收据,我们在发送邮件时发送收据请求但没有得到任何回应。

我的查询是否需要在服务器上配置任何内容(或ejabberd.cfg文件中的任何更改)以获取我们需要执行的任何客户端代码。

2 个答案:

答案 0 :(得分:5)

不,XEP-0184是纯粹的客户端协议,因此无需在服务器上进行设置。

在您未收到任何确认的原因中可能有:

  • 您的客户没有启用XEP-0184
  • 根据您正在使用的XMPP库(在 客户端 - 发件人和收件人),发件人可能决定甚至不请求收据如果它discovers(通过查询对等方的能力)已关闭XEP-0184

    可能更清楚:XEP通常建议实现检查是否支持XEP定义的功能,如果不支持则不尝试使用它。并非所有的库和客户都这样做,但有些人这样做。这意味着某些实现可能是这样的:好的,我被要求发送送达回执请求,所以

    1. 在我即将联系的同伴身上进行服务发现。
    2. 检查是否已启用XEP-0184
    3. 如果没有,我会默默地不附上任何收据请求。
    4. 特定的XMPP库是否单独执行 取决于“智能”的制作方式。

如果XMPP Framework表示this library,请尝试阅读其源代码以查看它是否“智能”并询问对等方的上限,然后检查是否XEP-0184已启用。

还要检查您是否可以启用客户端交换的XML流的日志记录。检查它们是调试XMPP相关问题的最佳方法。

答案 1 :(得分:2)

您可以使用XEP-0022消息事件扩展来实现此目的:

这里是你的消息节结构:

<message to='username@domain.com' id='msgId-21102012,12:12:11'>
  <body>How are you doing?</body>
  <x xmlns='jabber:x:event'>
    <offline/>
    <delivered/>
    <composing/>
  </x>
</message>

根据收据状态,开火将响应消息事件状态。一旦查看XEP-022扩展名。