我正在构建一个监控朋友存在但不需要可见的机器人。我尝试使用所有已知值的优先级、显示、类型来设置存在,但没有成功。是否有可能是不可见的并且只接收存在通知?
谢谢!
我正在构建一个监控朋友存在但不需要可见的机器人。我尝试使用所有已知值的优先级、显示、类型来设置存在,但没有成功。是否有可能是不可见的并且只接收存在通知?
谢谢!
请参阅XEP-0126:隐形,第 3.1 节:
<iq from='bilbo@tolkien.lit/shire' type='set' id='inv1'>
<query xmlns='jabber:iq:privacy'>
<list name='invisible'>
<item action='deny' order='1'>
<presence-out/>
</item>
</list>
</query>
</iq>
看看rfc。Presence 具有订阅状态。如果您的 bot 已订阅接收来自您的用户的存在,但您的用户没有,则他们不会收到有关 bot 存在的通知。
换句话说,你的机器人应该发送:
<presence to="user@example.com" type="subscribe" />
其次是用户的授权,
<presence to="bot@example.com" type="subscribed" />
现在机器人将收到用户的存在,但不是相反。
要设置不可见状态,您必须发送类型为“不可见”的状态。
<presence type="invisible"/>
这是代码(在ios中):
XMPPPresence *presence = [XMPPPresence presenceWithType:@"invisible"];
[[self xmppStream] sendElement:presence];
我使用此代码将我的状态设置为“不可见”。有关更多详细信息,请阅读http://xmpp.org/extensions/xep-0018.html#sect-id86210上的文档
最后我从 Facebook 知道,不可能通过 XMPP 命令实现隐形: https ://developers.facebook.com/bugs/315067461919373 。另请参阅限制下的https://developers.facebook.com/docs/chat/。