4

基本的に、「特定の」チャットメッセージ に自動的に返信する XMPP クライアントを作成しています。

私のセットアップは次のようなものです:

  • アカウントx@xyz.comで実行するように構成されたマシンでpidginを実行しています。
  • 同じアカウントx@xyz.comで実行するように構成された独自の jabber クライアントがあります。
  • 他の XMPP クライアントが存在する可能性があります 。

    これが私の要件です:

    gtalk で受信する特定の種類のメッセージを自動化しようとしています。したがって、「お元気ですか」などの特定のメッセージを受け取るたびに、自分の XMPP クライアントは自動的に「元気です」と返信する必要があります。お元気ですか」. x@xyz.comに (クライアントが返信する前後に)送信されたすべてのメッセージは、すべてのクライアントが受信する必要があります (私のクライアントには UI がなく、特定のメッセージにしか応答できません)。

    これで、クライアントが自動的に応答するようにコーディングできました。これはうまくいきます。しかし、私が直面している問題は、返信するとすぐに (私は smack ライブラリを使用します)、x@xyz.com に送信される後続のすべてのメッセージが XMPP クライアントによってのみ受信されることです。これは明らかに問題です。私自身のクライアントは非常にダンプされており、UI がないため、送信された残りのメッセージを見ることができず、メッセージを「失う」ことになります。

    他の XMPP クライアントでも同じ動作を観察しました。問題は、これが XMPP の要件であるかということです (申し訳ありませんが、XMPP プロトコルをよく読んでいません)。XMPP クライアントをコーディングして、ユーザーに応答を送信し、現在メッセージをリッスンしているすべてのクライアントで後続のすべてのメッセージを受信できるようにすることは可能ですか? 私のクライアントを本格的な XMPP クライアントにすることは解決策ですが、その方法には行きたくありません。

    私の質問が明確であることを願っています。

  • 4

    1 に答える 1

    5

    ボットにネガティブ プレゼンス優先度を設定する必要がある場合があります。

    最初に知っておくべきことは、XMPP プロトコルでは、すべてのクライアントが完全な JID を持つことになっているということです。これは生の JID です。あなたのケースでは x@xyz.com のようにリソースが末尾に付いています (例: x@xyz.com/pidgin または x@xyz.com/home (/pidgin と /home はリソース))。これは、メッセージをさまざまなクライアントにルーティングする方法の一部です。

    次に、プレゼンススタンザがあります。オンラインになると、クライアントは通常、プレゼンス スタンザをサーバーに送信します。これにより、たとえば、クライアントがチャットに参加できるか、ランチに出かけているかが通知されます。この情報とともに、優先的に送信できます。複数のクライアントが接続されている場合、最も優先度の高いクライアントがベア JID に送信されたメッセージを受信します (例: ClientA(prio=50) と ClientB(prio=60) -> ClientB は x@xyz に送信されたメッセージを受信します。コム)。しかし、否定的な優先事項もあります。0 未満の優先度は、このクライアントにメッセージを送信してはならないことを示します。そのようなスタンザは次のようになります

    <presence from="x@xyz.com/bot">
        <priority>-1</priority>
    </presence>
    

    これはあなたのケースに合うかもしれません。アカウントが配置されている XMPP サーバーにも依存することに注意してください。これは、プロトコルのこの部分を完全に実装している場合と実装していない場合があります。

    要約すると、Smack API を参照して、接続直後にボット クライアントのプレゼンスを設定し、優先度を <0 に設定する方法を確認することをお勧めします。

    于 2010-11-08T07:55:27.907 に答える