Проблема с протоколом Jabber
Один из контактов моего джаббер-робота,
чье значение атрибута "подписка" равно "к",
что в соответствии с протоколом Jabber означает:
**** робот подписался на онлайн-статус другой стороны, но другая сторона не подписалась на мой робот.****
Но когда я вхожу в чужую учетную запись,
Я вижу, что робот онлайн,
почему так?
Протокол Jabber сейчас в хаосе?
2 ответа
Если вы скажете "У моего бота есть подписка на берег" или "У берега есть подписка ОТ моего бота", "от" и "до" будет иметь больше смысла.
Итак, если в списке ботов есть:
<item jid='shore@example.com' subscription='to'/>
Тогда бот увидит присутствие берега, но берег не увидит присутствие бота, если предположить, что в списке берега есть:
<item jid='bot@example.com' subscription='from'/>
Эти состояния могут быть не синхронизированы из-за проблем с сетью и тому подобного. В этих случаях самый простой способ решить проблему - это удалить элемент (что должно привести к эффективному удалению элемента с другой стороны), а затем повторно добавить (см. RFC 3921bis, раздел 2.5.1 для получения подробной информации):
<iq from='bot@example.com/background'
id='delete_1'
type='set'>
<query xmlns='jabber:iq:roster'>
<item jid='shore@example.com' subscription='remove'/>
</query>
</iq>
<presence type='subscribe'
from='bot@example.com/background'
to='shore@example.com'/>
Следует иметь в виду, что, даже если подписка идет в указанном направлении, бот МОЖЕТ посылать направленное присутствие на берег, и в этом случае берег будет видеть присутствие обоих, даже если он не подписан на бот. Проверьте протокол протокола бота, и вы можете увидеть что-то вроде:
<presence to='shore@example.com'/>
Прошло много времени с тех пор, как я испортил XMPP, но быстрое перечитывание спецификации заставило меня подумать, что вы перепутали значение "to". Если пользователь указан в списке роботов как "to", то это означает, что пользователь следит за присутствием роботов, а не наоборот. "От" означает, что робот отслеживает или получает разделы присутствия от - учетной записи пользователя.
Вы знаете, как выглядит список пользователей? Если все синхронизировано, список пользователей должен иметь робота в списке "от".