1

jabber.domain.comにejabberdサーバーがあり、presence.domain.comにPythonで(sleekxmppを使用して)記述されたxmppコンポーネントがあります。

クライアントがプレゼンスを使用可能から使用不可に、またはその逆に変更するたびに、コンポーネントが通知を受け取るようにしたかったのです。

クライアント自体には連絡先がありません。

現在、利用可能なプレゼンススタンザをadmin@presence.domain.comに送信するようにクライアントを設定しており、オンライン/オフラインのプレゼンス通知を受け取ります。しかし、これは正しいアプローチではないと思います。

クライアントがpresence.domain.comのコンポーネントを認識せず、jabber.domain.comに接続するだけで、コンポーネントがサーバーからクライアントのプレゼンスについて何らかの方法で通知されることを期待していました。

それを行う方法はありますか?コンポーネントの設定は正しいですか?または、xmppプラグイン/モジュールなどの使用を検討する必要があります。

ありがとう

4

2 に答える 2

5

このためのカスタム ejabberd モジュールを作成することは難しくありません。ejabberd でプレゼンス変更フックに登録し、各プレゼンス パケット ルートで外部コンポーネントに通知する必要があります。

モジュールが登録できる「set_presence_hook」と「unset_presence_hook」のフックのペアがあり、ユーザーがセッションを開始/終了したときに通知されます。

他のプレゼンス ステータスを追跡する必要がある場合は、ユーザーから送信されたプレゼンス パケットで起動するフック「c2s_update_presence」もあります。

カスタムモジュールを使用しない他の可能性は、共有名簿を使用することです。admin@presence.domain.com をすべてのユーザーの共有名簿に追加します。ただし、この場合、この項目が名簿に反映されます。

于 2012-08-13T00:08:00.360 に答える
0

コンポーネントは、ユーザーとまったく同じ方法でユーザーのプレゼンスをサブスクライブできます。また、ユーザーがコンポーネントのプレゼンスをサブスクライブすることもできます。通常のパターンに従う必要があるだけです。つまり、コンポーネント/ユーザーは<presence/>of タイプを送信し、ユーザー/コンポーネントはof typesubscribeを送信することで受け入れることができます。<presence/>subscribed

また、ユーザーにプレゼンスをコンポーネントに直接送信させることもできます。

カスタム フックを作成したり、プロキシ ユーザーを作成したりする必要はありません。

于 2012-08-13T20:32:49.667 に答える