会話をボットから人間に移行するTransition conversations from bot to human

適用対象: SDK v4APPLIES TO: SDK v4

ボットがどれくらいの人工知能を持っているかにかかわらず、会話を人間に引き継ぐ必要があるときがあります。Regardless of how much artificial intelligence a bot possesses, there may still be times when it needs to hand off the conversation to a human being. これが必要になるのは、ボットがユーザーを理解しないため (AI の限界のため) か、要求を自動化できず、人間の操作が必要とされる場合のいずれかである可能性があります。This can be necessary either because the bot does not understand the user (because of an AI limitation), or if the request cannot be automated and requires a human action. そのような場合、ボットは、いつ引き継ぎが必要であるかを認識し、ユーザーにスムーズな移行を提供する必要があります。In such cases the bot should recognize when it needs to hand off and provide the user with a smooth transition.

Microsoft Bot Framework は、開発者がさまざまなエージェント エンゲージメント プラットフォームと統合できるオープン プラットフォームです。Microsoft Bot Framework is an open platform that allows developers to integrate with a variety of agent engagement platforms.

ハンドオフ統合モデルHandoff integration models

Microsoft Bot Framework では、エージェント エンゲージメント プラットフォームとの統合のため、2 つのモデルがサポートされています。Microsoft Bot Framework supports two models for integration with agent engagement platforms. ハンドオフ プロトコルはどちらのモデルでも同じですが、オンボードの詳細は、モデル間やエージェント エンゲージメント プラットフォーム間で異なります。The handoff protocol is identical for both models, however the onboarding details differ between the models and the agent engagement platforms.

この目標は、お客様のシステムと統合するためのユニバーサルソリューションを提供することではなく、ループ内で人間との対話 AI システムを構築する bot 開発者やシステムインテグレーターに 共通の言語ベストプラクティス を提供することではありません。The goal is not to offer a universal solution for integration with any customer's system, but rather to provide a common language and best practices for bot developers and system integrators building conversational AI systems with human in the loop.

エージェントとしてのボットBot as an agent

"エージェントとしてのボット" と呼ばれる最初のモデルでは、ボットはエージェント ハブに接続されているライブ エージェントのランクに参加し、要求がその他の Bot Framework チャネルから着信したかのようにユーザー要求に応答します。In the first model, known as "Bot as an agent", the bot joins the ranks of the live agents connected to the agent hub and responds to user requests as if the requests came from any other Bot Framework channel. ユーザーとボットとの間の会話は、人間のエージェントにエスカレートすることができます。この時点で、ボットはアクティブな会話から離脱します。The conversation between the user and the bot can be escalated to a human agent, at which point the bot disengages from the active conversation.

このモードの主な利点は単純さです。既存のボットは最小限の労力でエージェント ハブにオンボードすることができ、メッセージ ルーティングの複雑さはすべて、エージェント ハブによって処理されます。The main advantage of this mode is in its simplicity – an existing bot can be onboarded to the agent hub with minimal effort, with all of the complexity of message routing taken care of by the agent hub.

エージェントとしてのボットのシナリオ

プロキシとしてのボットBot as a proxy

2 番目のモデルは "プロキシとしてのボット" と呼ばれます。The second model is known as "Bot as a proxy". ユーザーは、人間のエージェントからの支援が必要であるとボットで判断されるまで、ボットに直接話しかけます。The user talks directly to the bot, until the bot decides that it needs help from a human agent. 会話は、ボットのメッセージ ルーター コンポーネントによってエージェント ハブにリダイレクトされ、そこから適切なエージェントにディスパッチされます。The message router component in the bot redirects the conversation to the agent hub, which dispatches it to the appropriate agent. ボットはこのループ内に留まって、会話のトランスクリプトを収集したり、メッセージをフィルター処理したり、エージェントとユーザーの両方に追加のコンテンツを提供したりすることができます。The bot stays in the loop and can collect the transcript of the conversation, filter messages, or provide additional content to both the agent and the user.

このモデルの主な利点は、柔軟性と制御です。Flexibility and control are the main advantages of this model. ボットでは、さまざまなチャネルをサポートし、ユーザー、ボット、エージェント ハブ間で会話をエスカレートしてルーティングする方法を制御することができます。The bot can support a variety of channels and have control over how the conversations are escalated and routed between the user, the bot, and the agent hub.

プロキシとしてのボットのシナリオ

ハンドオフ プロトコルHandoff protocol

このプロトコルは、チャネルからボットに送信される開始、ボットによってチャネルに送信されるイベント、およびステータスの更新のイベントを中心にしています。The protocol is centered around events for initiation, sent by the bot to the channel, and status update, sent by the channel to the bot.

ハンドオフの開始Handoff initiation

ハンド オフ開始イベントは 、ハンドオフを開始するために bot によって作成されます。The Handoff Initiation event is created by the bot to initiate handoff.

イベントには 2 つのコンポーネントが含まれています。The event contains two components:

  • メッセージ交換を適切なエージェントにルーティングするために必要な、 ハンドオフ要求のコンテキストThe context of the handoff request that is necessary to route the conversation to the right agent.
  • メッセージ交換のトランスクリプトThe transcript of the conversation. エージェントは、ハンドオフが開始される前に顧客とボットとの間で行われた会話を読み取ることができます。The agent can read the conversation that took place between the customer and the bot before the handoff was initiated.

ハンドオフ開始イベントフィールドを次に示します。The following are the handoff initiation event fields:

  • Name -は name に設定されている 必須 フィールドです "handoff.initiate"Name - The name is a required field that is set to "handoff.initiate".

  • -フィールドは、エージェントの value ハブ固有の JSON コンテンツ (必要なエージェントのスキルなど) を含むオブジェクトです。Value - The value field is an object containing agent hub-specific JSON content, such as required agent skill and so on. このフィールドは 省略可能 です。This field is optional.

    { "Skill" : "credit cards" }
    
  • 添付ファイル -は、 attachments オブジェクトの一覧を含む 省略可能 なフィールドです AttachmentAttachments - The attachments is an optional field containing the list of Attachment objects. Bot Framework では、必要に応じて、メッセージ交換のトランスクリプトをエージェントハブに送信するために使用される "トランスクリプト" 添付ファイルの種類を定義します。Bot Framework defines the "Transcript" attachment type that is used to send conversation transcript to the agent hub if required. 添付ファイルは、を指定することによってインラインで (サイズ制限に従って) 送信することも、オフラインで送信することもでき ContentUrl ます。Attachments can be sent either inline (subject to a size limit) or offline by providing ContentUrl.

    handoffEvent.Attachments = new List<Attachment> {
        new Attachment {
            Content = transcript,
            ContentType = "application/json",
            Name = "Transcript",
        }};
    

    注意

    エージェントハブは、理解していない添付ファイルの種類を 無視する必要があり ます。Agent hubs must ignore attachment types they don't understand.

  • メッセージ交換-は、 conversation ConversationAccount 渡されるメッセージ交換を記述する型の必須フィールドです。Conversation - The conversation is a required field of type ConversationAccount describing the conversation being handed over. 非常に、 Id 他のイベントとの関連付けに使用できるメッセージ交換を含める必要があります。Critically, it MUST include the conversation Id that can be used for correlation with the other events.

Bot は、メッセージ交換をエージェントに渡す必要があることを検出すると、ハンドオフ開始イベントを送信することによって意図したことを通知します。When a bot detects the need to hand the conversation off to an agent, it signals its intent by sending a handoff initiation event. C# では、次の CreateHandoffInitiation コードスニペットに示すように、上位レベルの API メソッドを使用できます。In C# an higher level API CreateHandoffInitiation method can be used as demonstrated in the code snippet below.

var activities = GetRecentActivities();
var handoffContext = new { Skill = "credit cards" };
var handoffEvent =
    EventFactory.CreateHandoffInitiation(
        turnContext, handoffContext, new Transcript(activities));
await turnContext.SendActivityAsync(handoffEvent);

ハンドオフの状態Handoff status

ハンドオフステータス イベントは、エージェントハブによって bot に送信されます。The Handoff Status event is sent to the bot by the agent hub. イベントは、開始されたハンドオフ操作の状態を bot に通知します。The event informs the bot about the status of the initiated handoff operation.

注意

Bot は、イベントを処理する必要はあり ませ んが、拒否することは できませんBots are not required to handle the event, however they must not reject it.

ハンドオフステータスイベントのフィールドを次に示します。The following are the handoff status event fields:

  • Name -は name に設定されている 必須 フィールドです "handoff.status"Name - The name is a required field that is set to "handoff.status".

  • Value -は、 value ハンドオフ操作の現在の状態を説明する 必須 フィールドです。Value - The value is a required field describing the current status of the handoff operation. これは、次に state message 定義されている必須フィールドとオプションのフィールドを含む JSON オブジェクトです。It is a JSON object containing the required field state and an optional field message, as defined below.

state は、次のいずれかの値があります。The state has one of the following values:

  • accepted-エージェントが要求を受け入れ、メッセージ交換を制御しました。accepted- An agent has accepted the request and taken control of the conversation.
  • failed-ハンドオフ要求が失敗しました。failed- Handoff request has failed. には、 message エラーに関連する追加情報が含まれている場合があります。The message might contain additional information relevant to the failure.
  • completed -ハンドオフ要求が完了しました。completed - Handoff request has completed.

フィールドの形式と使用可能な値 message は指定されていません。The format and possible value of the message field are unspecified.

  • 正常なハンドオフ完了:Successful handoff completion:

    { "state" : "completed" }
    
  • タイムアウトのため、ハンドオフ操作に失敗しました:Handoff operation failed due to a timeout:

    { "state" : "failed", "message" : "Cannot find agent with requested skill" }
    
  • メッセージ交換 - Conversationは、 ConversationAccount 受理または拒否されたメッセージ交換を記述する型の必須フィールドです。Conversation -Conversationis a required field of type ConversationAccount describing the conversation that has been accepted or rejected. Idメッセージ交換のは、ハンドオフを開始した HandoffInitiation と同じである必要があります。The Id of the conversation MUST be the same as in the HandoffInitiation that initiated the handoff.

ハンドオフライブラリHandoff library

ハンドオフ ライブラリ は、ハンドオフをサポートするために Bot FRAMEWORK v4 SDK を補完するために作成されています。具体的には:The Handoff Library has been created to complement the Bot Framework v4 SDK in supporting handoff; specifically:

  • Bot Framework SDK への追加機能を実装して、エージェントへのハンドオフ ( エスカレーション とも呼ばれます) をサポートします。Implements the additions to the Bot Framework SDK to support handoff to an agent (also known as escalation.
  • ハンドオフ操作に使用する3つのイベントの種類の定義が含まれています。Contains definitions of three event types for signaling handoff operations.

注意

特定のエージェントハブとの統合は、ライブラリには含まれません。Integrations with specific agent hubs are not part of the library.

その他のリソースAdditional resources