アダプティブ カード を使用すると、コンテンツのスニペットを Copilot Studio エージェントに追加して、他のクラウド アプリやサービスとオープンに交換することもできます。 エージェントに豊富な会話機能を提供するために、テキスト、グラフィック、およびボタンを含めることができます。 アダプティブ カードはプラットフォームに依存しないため、ニーズに合わせて簡単にカスタマイズできます。
アダプティブ カード ノードを使用すると、エージェントは 1 つ以上の送信ボタンと、必要に応じて 1 つ以上のフォーム入力フィールドを含むアダプティブ カードを表示できます。 エージェントは、会話の後半で使用するために、ユーザー入力を変数に格納します。
注意
Copilot Studio は、アダプティブ カード スキーマのバージョン 1.6 およびそれ以前のバージョンをサポートしています。 ただし、適切なスキーマ バージョンは、ターゲットのホスト アプリによって異なります。
- Bot Framework Web チャット コンポーネント (既定の Web サイト統合パターン) はバージョン 1.6 をサポートしますが、
Action.Executeはサポートしません - ライブ チャット ウィジェット (Dynamics 365 Customer Service 用オムニチャネル) はバージョン 1.5 に制限されています
- Teams もバージョン 1.5 に制限されています
さらに、Copilot Studio は、キャンバスではなく、テスト チャットでバージョン 1.6 のカードのみをレンダリングします。
アダプティブ カード スキーマの詳細については、スキーマ エクスプローラーを参照してください。
Copilot Studio には、アダプティブ カード の最も便利な機能をする、組み込みのアダプティブ カード デザイナーが含まれています。
または、次を実行できます。
- ユーザーに表示するカードの JSON 表現を使用します。
- カードに動的な情報を含めるには、Power Fx 数式 を使用します。
ユーザーが無効な応答を入力した場合やノードが中断した場合の処理など、カードの動作をコントロールできます。
アダプティブ カード ノードは、ユーザーが応答を送信する 対話型カードを対象としています。 メッセージ および 質問 ノードは、ユーザーに情報を表示するための非対話型カードをユーザーに提示するために使用することができます。
チップ
名前を変更し、ノードを識別しやすくします。 ノードの名前フィールドを選択して直接名前を更新するか、ノードの3つの点(...)を選択してメニューから 「Rename 」を選択してください。 コード エディター でノードの名前を変更することもできます。
トリガー ノードと 手順に進む ノードの名前を変更することはできません。
ノード名の長さは 500 文字までです。
アダプティブ カード ノードを追加する
アダプティブ カード ノードを追加するノードの下にある
ノードの追加 アイコン を選択し、アダプティブ カードで質問する を選択します。ノードの3つの点(...)を選択し、その後 プロパティを選択します。
アダプティブ カード ノードのプロパティ パネルで、アダプティブ カードの編集を選択します。 アダプティブ カード デザイナー パネルが開きます。
カードに必要な要素を追加し、そのプロパティを構成します。 または、カード ペイロード エディター ウィンドウで、既定のペイロードをカードの JSON リテラルに置き換えます。
チップ
カードは、ユーザーがエージェントに情報を送り返すことができる対話型カードである必要があるため、少なくとも 1 つの送信ボタンが含まれている必要があります。 そうではなく、情報を表示することのみを目的としている場合は、アダプティブ カードをメッセージ ノードに追加する必要があります。
初期デザインが完了したら、保存 を選択し、デザイナー パネルを閉じます。 カードのプレビューがノードに表示されます。 Copilot Studio は、コードで指定された入力に基づいて出力変数を自動的に作成します。
チップ
カードに対して生成された出力変数が正しくない場合は、アダプティブ カード ノードのプロパティパネルでスキーマの編集を選択して、変数とその型の一覧を手動で更新できます。
対話型アダプティブ カードの準備が整いました。 エージェントのユーザーがカードの送信ボタンを選択すると、ユーザーがカードとの対話で提供した情報が出力変数に入力されます。
その他のプロパティ
その他のプロパティを使用すると、アダプティブ カード ノードの動作を制御できます。たとえば、次のようになります:
- エージェントが無効な応答に応答する方法
- 中断できる場合
エージェントがアダプティブ カードからの送信を待機しているときに、ユーザーが代わりにテキスト メッセージを送信した場合、メッセージによって中断がトリガーされない限り、この応答は無効と見なされます。 この場合、次のプロパティが動作を決定します。
再プロンプトの回数: エージェントがカードからの有効な送信を取得しようとした回数。 最大 2 回繰り返し が既定となります。 1 回繰り返すまたは繰り返さないを選択することもできます。 再試行のたびに、カードがユーザーに再送信されます。
プロンプトの再試行: このプロパティを使用して、カードの繰り返しとともに、再試行が発生したときに送信されるメッセージを定義します。 再試行メッセージを定義するには、カスタマイズ を選択し、新しいプロンプトを入力します。
別のトピックへの切り替えを許可: 選択すると (既定)、エージェントがカード送信を待っているときのユーザーからの受信メッセージによって中断がトリガーされ、別のトピックに切り替わります。 トピックの切り替えが発生した場合、割り込みトピックが終了すると、カードがユーザーに再送信されます。
連続するカードを持つエージェントの送信ボタンの動作
設計上、アダプティブ カードでは送信ボタンを複数回選択できます。 エージェントに連続するアダプティブ カードがあり、ユーザーが以前のカードのボタンを選択すると、予期しない動作が発生する可能性があります。
あるカードの送信アクションが別のカードに干渉しないようにするには:
送信アクションを分離する: 各アダプティブ カードに独自の一意識別子とアクション ハンドラーがあることを確認します。
固有のデータで送信アクションを使用する: カードの送信アクションを定義する場合は、ユーザーが送信ボタンを選択したときにカードを区別するのに役立つ、一意識別子またはデータ ペイロードを含めます。
堅牢なイベント処理ロジックをエージェントに追加する: 送信ボタンに関連付けられている固有の識別子またはペイロードの要素に基づいて条件を定義します。
デバッグとログ: エージェントのイベント処理コードに詳細なログを追加して、一連のアクションをキャプチャし、意図しない送信が発生した場所を特定します。
Power Fx を使用してカードを動的にする
Power Fx 数式を使用して、トピックまたはエージェントの変数を参照することで、カードに動的な情報を含めることができます。
ノードの3つの点(...)を選択し、その後 プロパティを選択します。
アダプティブ カード ノードのプロパティ パネルで、数式 に切り替え、数式 を選択すると、カードの JSON 表現が Power Fx 数式に自動的に変換されます。
たとえば、カードの次の JSON リテラルから始めます:
{ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.5", "body": [{ "type": "ColumnSet", "columns": [{ "type": "Column", "width": 2, "items": [{ "type": "TextBlock", "text": "Tell us about yourself", "weight": "Bolder", "size": "Medium", "wrap": true, "style": "heading" }, { "type": "TextBlock", "text": "We just need a few more details to get you booked for the trip of a lifetime!", "isSubtle": true, "wrap": true }, { "type": "Input.Text", "id": "myName", "label": "Your name (Last, First)", "isRequired": true, "regex": "^[A-Z][a-z]+, [A-Z][a-z]+$", "errorMessage": "Please enter your name in the specified format" } ] } ] } ], "actions": [{ "type": "Action.Submit", "title": "Submit" } ] }JSON リテラルからハードコーディングされたテキストではなく、2 つの変数 Topic.Title と Topic.Subtitle を使用した結果の Power Fx 数式を次に示します。 (この例では、変数がトピックで定義されていることを前提としています。)
{ '$schema': "http://adaptivecards.io/schemas/adaptive-card.json", type: "AdaptiveCard", version: "1.5", body: [ { type: "ColumnSet", columns: [ { type: "Column", width: "2", items: [ { type: "TextBlock", text: Topic.Title, weight: "Bolder", size: "Medium", wrap: true, style: "heading" }, { type: "TextBlock", text: Topic.Subtitle, isSubtle: true, wrap: true }, { type: "Input.Text", id: "myName", label: "Your name (Last, First)", isRequired: true, regex: "^[A-Z][a-z]+, [A-Z][a-z]+$", errorMessage: "Please enter your name in the specified format" } ] } ] } ], actions: [ { type: "Action.Submit", title: "Submit" } ] }
重要
数式パネルで編集を開始すると、元の JSON コードに戻ることはできません。 反復的な設計と変更を可能にするには、元の JSON のコピーを独自のメモに保存するか、ノードにコメントとして保存することをお勧めします。 この予防措置により、必要に応じて変更を元に戻すことができます。