我为Ejabberd编写了一个外部组件,但在尝试代表用户发送在线节时,我得到400错误。
该组件的名称是bot.domain.com,Ejabberd中的主机名是domain.com,我已经设置了" check_from"我的组件标记为false。
以下是我尝试代表用户从组件发送的状态节的示例:
<presence from="user@domain.com">
<status>Test status</status>
<show>dnd</show>
</presence>
这是Ejabberd返回的错误消息:
<presence type="error" to="user@domain.com">
<status>Test status</status>
<show>dnd</show>
<error code="400" type="modify">
<bad-request xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>
</presence>
如果我添加=&#34; user2@domain.com"在我发送的包裹中,目标用户实际收到包裹。
如果我添加到=&#34; domain.com&#34;,我不会再收到400错误,但不会向用户的名单中的任何人广播此状态。
实际问题似乎是Ejabberd没有向用户名单中的每个人广播在线状态数据包。
任何想法我可能会遗漏或为什么我没有指定&#34;到&#34;场?
答案 0 :(得分:0)
您无法代表用户从组件广播名册状态。组件服务不会加载用户名单。只有ejabberd_c2s
负责加载名册以广播存在。它还负责检查隐私列表和XMPP的许多重要功能。
作为旁注,我不知道您对该方法的期望是什么,但您可以在XMPP中拆分用户会话中的状态。用户首先在线,因为他在XMPP上打开会话,但仅次于因为他发送了存在。通过伪造用户组件的状态发送,您无法保证该用户将打开会话。在这种情况下,整体行为肯定不会是你期望的行为。