適用対象: SDK v4
スキル コンシューマーは、1 つ以上のスキルを呼び出すことができるボットです。 スキルに関しては、 ルート ボット はユーザー向けのボットであり、スキル コンシューマーでもあります。
ユーザーから見れば、ルートボットというのは彼らが対話しているボットです。 スキルの観点からは、スキル コンシューマーは、ユーザーと通信するチャネルです。 (詳細については、 スキルの概要を参照してください)。
スキル コンシューマーとして、ルート ボットには、そのボットとスキルの間のトラフィックを管理するための追加のロジックが含まれています。
- ルートが使用する各スキルの構成情報。
- ルートがユーザーとの会話とスキルとの会話の間を行き来できるようにする会話IDファクトリー。
- アクティビティをパッケージ化してスキル ボットに転送できるスキル クライアント 。
- スキル ボットから要求を受信し、アクティビティをアンパックできるスキル ハンドラー 。
スキルの管理
1つのスキルを開始して完了まで実行させることは、スキル コンシューマーにいくつかの機能を追加することで管理されます。 複数のスキルまたは会話スレッドを使用して、より複雑なシナリオが可能になります。
スキル コンシューマーは、少なくとも 2 つの HTTP エンドポイントを実装します。
- メッセージング エンドポイントは、ユーザーまたはチャネルからアクティビティを受信します。 これは、すべてのボットが実装する通常のメッセージング エンドポイントです。
- スキルからアクティビティを受信するためのスキル ホスト エンドポイント 。 これは、スキルが応答するサービス URL であるコールバック URL として機能します。 (スキル コンシューマーは、スキルから HTTP メソッド要求を受け取るコードをスキル ハンドラーとペアにする必要があります)。
スキルの説明
スキルごとに、 Bot Framework スキル オブジェクトをスキル コンシューマーの構成ファイルに追加します。 それぞれに、スキルの ID、アプリ ID、エンドポイントが含まれます。
| プロパティ | 説明 |
|---|---|
| 身分証明書 | スキル コンシューマーに固有のスキルの ID またはキー。 |
| アプリ ID | スキルが Azure に登録されたときにボット リソースに割り当てられた appId 。 |
| スキル エンドポイント | スキルのメッセージ送信エンドポイント。 これは、コンシューマーがスキルとの通信に使用する URL です。 |
スキル クライアントとスキル ハンドラー
スキル コンシューマーは、スキル クライアントを使用してスキルにアクティビティを送信します。 クライアント:
- ユーザーまたはコンシューマーによって生成されたスキルに送信するアクティビティを受け取ります。
- スキルに送信されたアクティビティのサービス URL をコンシューマーのスキル ホスト エンドポイントに設定します。
- 元の会話参照をコンシューマー スキル会話用の参照に置き換えます。
- ボット間認証トークンを追加します。
- 更新されたアクティビティをスキルに送信します。
スキル コンシューマーは、スキル ハンドラーを使用してスキルからアクティビティを受信します。 ハンドラー:
- チャネル サービス REST API メソッドを処理します。
- 認証と要求の検証を適用します。
- 元の会話参照を取得します。
- コンシューマーのアダプターのアクティビティを生成します。 このアクティビティは、スキルが完了したことを通知するか、ユーザーに転送するアクティビティになります。
スキルを直接管理する
アクティブなスキルを追跡するには、スキル コンシューマーにロジックを追加する必要があります。 スキル全般の管理方法、複数のアクティブなスキルを並列で維持できるかどうかなど、コンシューマー次第です。 考慮すべき具体的なシナリオは次のとおりです。
- 新しいコンシューマー スキルの会話を開始する。 (これは、特定のコンシューマーとユーザーの会話に関連付けられます)。
- スキルにパラメーターを渡すには、初期アクティビティの value プロパティをスキルに設定します。
- 既存のコンシューマー スキルの会話を継続する。
- スキルが発信する
endOfConversationアクティビティを、スキルとコンシューマーの会話の終了を示すものと見なす。- スキルから戻り値を取得するには、アクティビティの value プロパティを確認します。
- スキルが終了する理由を確認するには、アクティビティの コード パラメーターを確認します。これは、スキルでエラーが発生したことを示している可能性があります。
-
endOfConversationアクティビティをスキルに送信して、コンシューマーからスキルを取り消す。
スキルを直接管理するコンシューマー用に、スキルコンシューマーを実装する方法を参照してください。
スキル ダイアログを使用してスキルを管理する
ダイアログ ライブラリを使用している場合は、スキル ダイアログを使用してスキルを管理できます。 スキル ダイアログはアクティブなダイアログですが、関連付けられているスキルにアクティビティを転送します。
- スキル ダイアログを作成するときは、 ダイアログ オプション パラメーターを使用して、コンシューマーのアプリ ID とコールバック URL、使用する会話 ID ファクトリ、スキルのプロパティなど、ダイアログがスキルを管理するために必要なすべての情報を指定します。
- 複数のスキルをダイアログとして管理する場合は、スキルごとに個別のスキル ダイアログを作成する必要があります。
- 多くの場合、スキル ダイアログをコンポーネント ダイアログに追加します。
- スキル ダイアログを開始するには、ダイアログ コンテキストの begin メソッドを使用し、スキル ダイアログの ID を指定します。 options パラメーターを使用して、コンシューマーがスキルに最初のアクティビティとして送信するアクティビティを指定します。
- 他のダイアログと同様に、スキル ダイアログをキャンセルまたは中断できます。 例については、 ユーザーの中断を処理する 方法を参照してください。
ダイアログを利用してスキルを管理するコンシューマー向けに、ダイアログを用いてスキルを活用する方法をご覧ください。
期待応答の配信モードを使用する
ボットとスキルは、通信に HTTPS 経由で業界標準の REST と JSON を使用します。 通常のアクティビティ処理フローは、ルート ボットがその メッセージング エンドポイントでチャネルから投稿を受信すると開始されます。 その後、ルート ボットはアクティビティをスキルに送信して処理します。 スキルからの応答は、メッセージング エンドポイントではなく、ルート ボットの スキル ホスト エンドポイントにポストバックされます。 最後に、応答はさらに処理されるか、ルート ボットによってチャネルにポストバックされます。 この通常のフローは、スキルに送信されるアクティビティの 配信モード を変更することで変更できます。 配信モードが "ExpectReplies" に設定されている場合、スキルはスキル ホスト エンドポイントにポストバックされません。 代わりに、すべての応答アクティビティが応答の本文にシリアル化されます。 その後、ルート ボットはこれらのアクティビティを反復処理し、スキル ホスト エンドポイントによる処理方法と同様に処理します。
詳細については、アクティビティ仕様の 配信モード を参照してください。