私のジャバーロボットの連絡先の1つ、
'subscription'属性値が'to'である、
これは、jabberプロトコルによると次のことを意味します。
****ロボットは相手のオンラインステータスをサブスクライブしましたが、相手は私のロボットをサブスクライブしていません。****
しかし、相手のアカウントにログインすると、
ロボットがオンラインになっていることがわかりますが、
なんでこんな感じ?
ジャバープロトコルは今混乱していますか?
"My bot has a subscription to shore" または "Shore has a subscription FROM my bot" と言う場合、"from" と "to" の方がより意味があります。
したがって、ボットの名簿に次のものが含まれているとします。
<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」と表示されている場合、それはユーザーがロボットの存在をフォローしていることを意味し、その逆ではありません。「from」は、ロボットがユーザーアカウントをフォローしている、またはユーザーアカウントからプレゼンススタンザを受信することを意味します。
ユーザーの名簿がどのように見えるか知っていますか?同期されている場合、ユーザーの名簿にはロボットが「from」としてリストされている必要があります。