次の方法で共有


変数の使用

会話の後半でコンテンツを再利用できるように、変数を使用して顧客の応答を格納します。

変数を使用して、顧客を動的に別の会話パスにルーティングする論理式を作成することもできます。 たとえば、顧客の名前を customerName という変数に保存すると、エージェントは会話が続く際に名前で顧客に対処できます。

変数は、 他のトピックPower Automate フローに渡して返すことができます。

変数を作成する

Question ノードなどの出力を返すノードは、適切な型の出力変数を自動的に作成します。

変数の既定の名前と型が強調表示されている質問ノードのスクリーンショット。

チップ

名前を変更し、ノードを識別しやすくします。 ノードの名前フィールドを選択して直接名前を更新するか、ノードの3つの点(...)を選択してメニューから 「Rename 」を選択してください。 コード エディター でノードの名前を変更することもできます。

トリガー ノードと 手順に進む ノードの名前を変更することはできません。

ノード名の長さは 500 文字までです。

使用するエンティティを選択する

質問 ノードでは、既定で複数選択オプションが使用されます。 別の 事前構築済みエンティティまたはカスタム エンティティを使用するには、[ 識別 ] ボックスを選択し、必要な情報の種類を選択します。

「識別する情報を選択する」パネルが開いた質問ノードのスクリーンショット。

変数名を変更する

エージェントの保守を容易にするには、各変数の既定の名前をわかりやすい名前に置き換えます。

  1. 変数を選択します。 変数プロパティ パネルが表示されます。

  2. [ 変数名] に、変数の名前を入力します。

変数を設定する

通常、 質問 ノードを使用して、ユーザー入力を変数に格納します。 ただし、変数の値を自分で設定することもできます。 このような場合、変数値の設定ノードを使用します。

  1. ノードの下にある [ ノードの追加 ] アイコンを選択し、[ 変数値の設定 ] ノードを追加します。

  2. [変数の管理] を選択>変数の値を設定します。 [ 変数値の設定 ] ノードがキャンバスに表示されます。

  3. [ 変数の設定] の下のボックスを選択します。 [ 変数の選択 ] パネルが表示されます。

    • 設定する変数が既に存在する場合は、それを選択します。

    • それ以外の場合は、[ 新規作成] を選択します。 このアクションにより、新しい変数が作成されます。 値を割り当てるまでその型は不明です。

  4. [To value] には、次のいずれかのオプションを使用して値を割り当てます。

    • リテラル値を入力します。

    • 同じ型の既存の変数を選択します。

    • Power Fx 式を使用します。 Power Fx 式は、Table 型や Record 型などのリテラル値を使用できない、より複雑な型に有効です。

アクション ノードで変数を使用する

アクション ノードで変数を使用する場合、その基本型がフローまたは Bot Framework スキルに指定されたパラメーター型と一致する場合は、そのパラメーターに渡すことができます。 Action ノードからの出力により、新しい変数が生成されます。

詳細については、「 トピックからエージェント フローを呼び出す 」および 「入力変数と出力変数を使用して情報を渡す」のシナリオ例を参照してください。

変数の入力にリテラル値を使用する

入力パラメーターの値を設定するノードでは、値として別の変数を選択する代わりにリテラル値を入力できます。

productName という名前の変数入力パラメータにリテラル値を使用する方法を示すスクリーンショット。

ノードはリテラル値を文字列、数値、またはブール値として解釈を試みます。 たとえば、123 は数値として解釈されます。 代わりに文字列値として解釈する場合は、 "123" のように値を二重引用符で囲みます。

複合型を使用するシナリオなど、一部のシナリオでは、 Power Fx 数式 を使用して特定の型を設定することが必要になる場合があります。

Azure Key Vault シークレットに環境変数を使用する

環境変数は、Key Vault 内のシークレットを参照できます。 シークレット環境変数は、独自の考慮事項がある環境変数の特殊なケースです。

Power Apps でシークレット環境変数を作成するには、 Key Vault コンテナーを構成する必要があります。

この Key Vault コンテナーの読み取りを Copilot Studio に承認するには、次のアクションを実行します。

  1. Key Vault シークレット ユーザー ロールを Microsoft Copilot Studio Service アプリケーションに割り当てます。

  2. 環境のすべてのエージェントがシークレットにアクセスすることを承認するには、シークレットに AllowedEnvironments タグを作成し、許可されている環境 ID をコンマで区切って追加します。

  3. 環境の特定のエージェントのみがこのコンテナーを使用することを承認するには、タグ AllowedAgents を作成し、エージェント識別子を {envId}/{schemaName}形式で配置します。 複数の値を指定する場合は、カンマで区切ってください。

    最大文字数に達してもまだエージェントを追加する必要がある場合は、説明的で一意の名前を持つ別のタグを追加します (AllowedAgents2 など)。

ダイアログ ランタイムは、シークレット値を 5 分間キャッシュします。 失敗した読み取りは 30 秒間キャッシュされます。

警告

エージェントにシークレットを追加することで、このシークレットの値を公開できます。 環境内のエージェントを編集できるユーザーはだれでも 、メッセージ ノードを追加し、メッセージ内のシークレット環境変数の値を返すことができます。

変数パネル

[ 変数 ] パネルでは、定義または使用されているノードに関係なく、トピックで使用できるすべての変数を表示できます。

[変数] パネルを開くには、トピックのメニュー バーで [変数] を選択します。

[変数] ボタンが強調表示されている [変数] パネルのスクリーンショット。

トピック変数ごとに、他のトピックから値を受け取ることができるか、その値を他のトピックに返すことができるか、またはその両方を選択できます。 また、変数プロパティ パネルで変数を選択して、そのプロパティを編集することもできます。

変数のプロパティ パネル

[ 変数のプロパティ ] パネルでは、変数の名前を変更したり、エージェントが変数を使用する場所を確認したり、 グローバル変数に変換したりできます。 グローバル変数をトピック変数に変換することはできません。 トピック変数が他のトピックから値を受け取ったり、他のトピックに値を渡したりできるかどうかを選択することもできます。

変数の 変数プロパティ ペインを開くには、変数 パネルで目的の変数を選択します。 変数を使用する任意のノードから、目的の変数を選択して[変数 プロパティ ]パネルを開くこともできます。

トピック間で変数を渡す

あるトピックを別のトピックにリダイレクトする場合、元のトピックから宛先トピックに変数の値を渡すことができ、また宛先トピックから元のトピックに値を返すこともできます。 トピック間で変数を渡すことは、後のトピックが必要とする情報がすでに収集されている場合に特に役立ちます。 ユーザーは、同じ質問に複数回回答する必要がないことに感謝しています。

他のトピックから値を受け取る

トピックが (質問ノードなどで) 変数を定義すると、エージェントは変数の値を入力するためにユーザーに質問を行います。 すでにエージェントが前のトピックで値を取得している場合は、再度質問をする必要はありません。 このような場合、変数を 他のトピックから値を受け取る ように設定することができます。 別のトピックがこのトピックにリダイレクトされるとき、この変数に変数の値 (またはリテラル値) を渡して、質問をスキップすることができます。 ユーザーからエージェントへの会話のエクスペリエンスはシームレスです。

この例では、 GreetingTalk to Customer という 2 つのトピックを使用します。 両方のトピックが顧客の名前を尋ねます。 ただし、あいさつのトピックが最初に実行される場合、顧客と会話するトピックはその質問をスキップします。 代わりに、あいさつ トピックから渡された変数の値を使用します。

顧客と会話するトピックのフローは次のとおりです。

顧客と話す トピック 会話フローのスクリーンショット。

テスト パネルに示すように、このトピックが最初にトリガーされた場合、ユーザーに "何を呼び出すべきか" と尋ねられます。 customerNameという文字列変数に値が格納されます。 customerName変数は、他のトピックから値を取得するようにも設定されます。 トピックの最後は、「customerName様、素晴らしい一日をお過ごしください」というメッセージで締めくくられています。

あいさつトピックのフローは次のとおりです。

あいさつトピック 会話フローのスクリーンショット。

テスト パネルに示すように、このトピックが最初にトリガーされた場合は、ユーザーに "自分の名前は何ですか? customerNameという文字列変数に値が格納されます。 トピックは、「customerName様、はじめまして」というメッセージを送信します。次に、 顧客と話す トピックにリダイレクトされ、「customerName様、素晴らしい一日をお過ごしください」というメッセージが送信されます。ただし、顧客と会話する トピックでは、ユーザー名を再度尋ねる処理がスキップされていることに注意してください。 代わりに、customerName トピックから渡された変数の値を使用しました。

最後に、2 つ目の会話を再度示します。今回は顧客と会話するトピックの視点からです。

あいさつトピック が最初にトリガーされたときの顧客 トピック 会話フローのスクリーンショット。

他のトピックから値を受け取るトピックを設定する手順について説明します。 このシナリオ例では、定義済みのトピック Greeting をソース トピックとして使用し、新しいトピック「 顧客と話 す」をターゲット トピックとして使用しますが、可能な場合は、前のトピックの値を使用する必要があるトピックでも同じ手順が機能します。

宛先のトピックを設定する

宛先トピックは、他のトピックから値を受け取ります。 この例では、 "顧客に話す" です

  1. 新しいトピックを作成し、"Talk to Customer" という名前を付けます。

  2. "私に話しかけて"、"私と話して"、"私とチャットしよう" などのトリガーフレーズを追加します。

  3. 質問 ノードを追加し、メッセージに何とお呼びすればいいですか?と入力します。

  4. 特定の下で、構築済みエンティティ 個人名 を選択します。

  5. 変数名を選択します。 変数のプロパティ ペインが開きます。

  6. 既定の名前を customerNameに置き換え、他の トピックから値を受け取るを選択します。

    customerName 変数とそのプロパティを示す「変数プロパティ」パネルのスクリーンショット。

  7. メッセージ ノードを追加します。

  8. メッセージボックスに「素晴らしい一日をお過ごしください」と入力します。

  9. 変数の挿入 アイコン ({x}) を選択し、customerName を選択します。

  10. 変数の後のスペースを選択し、感嘆符 (!) を入力します。

  11. トピックを保存します。

ソース トピックを設定する

ソース トピックは、別のトピックにリダイレクトするトピックです。 値を提供し、宛先トピックに渡します。 この例では、 あいさつです。

  1. あいさつ トピックに移動し、トリガー ノードを除くデフォルトのノードを削除します。

  2. 質問 ノードを追加し、メッセージに「お名前をお伝えください」と入力します。

  3. 特定の下で、構築済みエンティティ 個人名 を選択します。

  4. 既定の名前を customerNameFromGreetingに置き換えます。

  5. メッセージ ノードを追加します。

  6. メッセージボックスに「初めまして、」と入力します。

  7. 変数の挿入 アイコン ({x}) を選択し、customerNameFromGreeting を選択します。

  8. 変数の後のスペースを選択し、感嘆符 (!) を入力します。

  9. リダイレクト ノードを追加し、宛先トピック 顧客との会話を選択します。

  10. 入力の追加を選択し、値を渡す先の宛先トピックからの変数を選択します。

    リダイレクト ノードの入力に customerName 変数が追加された Greeting トピックのスクリーンショット。

  11. > アイコンを選択し、値を渡したい変数、この例では customerNameFromGreeting を選択します。

    リダイレクト ノードは次のようになります。

    Greeting トピック内の完成したリダイレクト ノードのスクリーンショット。

  12. トピックを保存します。

値を元のトピックに戻す

エージェントでは、トピックは特定の情報を収集します。 他の複数のトピックでそれを呼び出し、情報を変数として返すように期待できます。 変数は、元のトピックの一部になり、他の変数と同様に使用できます。 エージェントが取得する情報をトピック間で使用できるようにすることで、このアプローチにより 、グローバル変数の必要性が軽減されます。

前のセクションからの例を継続しましょう。 「 顧客に話 す」トピックで新しい質問をし、その回答を 「Greeting 」トピックに戻します。

返される変数のソース トピックを設定する

トピックに変数を返す場合、ソース トピックは元のトピックに戻す値を提供するトピックです。 この例では、ソース トピックは 顧客との会話です。

  1. ソース トピックに移動します。

  2. 質問 ノードを追加し、メッセージに「お住まいの場所をお伝えください」と入力します。

  3. 特定 配下で、構築済みエンティティ 都市 を選択します。

  4. 変数を選択して 変数プロパティ パネルで開きます。 customerCity名前を付け、[元のトピックに値を返す] を選択します。

    customerCity 変数とそのプロパティが強調表示された 「顧客との会話」 トピックのスクリーンショット。

  5. メッセージ ノードを追加します。

  6. 変数の挿入 アイコン ({x}) を選択し、customerCity を選択します。

  7. メッセージ ボックスの変数の後に、「この時期はきっと素晴しいでしょうね!」と入力します。

  8. トピックを保存します。

返される変数の宛先トピックを設定する

トピックに変数を返すと、ターゲット トピックは現在のトピックから値を受け取ります。 次の例では、宛先トピックは Greeting です

  1. 宛先のトピックに移動します。

  2. ソース トピックで選択した変数は、[ リダイレクト ] ノードに出力変数として表示されます。

    Redirect ノードで返された変数を使用した Greeting トピック 会話フローのスクリーンショット。

  3. トピックを保存します。

値の解析

値の解析ノードは、ある型から別の型に値を変換します。 [値の解析] ノードの一般的なユース ケースは、生の JSON の変換です。 たとえば、エージェントは API を呼び出すフローを呼び出します。 API は結果を返します。 この結果を解析し、1 つ以上のプリミティブ変数を返す方法が必要です。 [値の解析] ノードを使用すると、API の結果全体を次のような文字列として送信できます。

{
    "Name": "Parker",
    "Position": "Product manager",
    "Company": "Contoso",
    "FormerPositions": [{
            "Position": "Customer service representative"
        }
    ]
}

値の解析ノードは、文字列変数を Record 型の変数に変換します。 Power Fx エディターは、このタイプに関するIntelliSenseのコード補完と入力候補を提供します。

JSON 文字列の解析に加えて、[ 値の解析 ] ノードの主な用途は、実行時に型指定されていないオブジェクトを解析することです。 最も一般的なユース ケースは、イベントを受信し、イベント値を解析する必要がある場合です。 または、実行時にチャネルによって異なる System.Activity.ChannelData プロパティを解析することもできます。

Teams からのイベントからの情報を解析する必要がある場合は、Teams 開発者ドキュメントを参照して、予想されるイベントの例を見つけてください。 その後、サンプル イベントをサンプル データとして使用して、このセクションの手順に従うことができます。

値の解析ノードをトピックに追加するには:

  1. 値を解析するノードの下にある [ノード追加] アイコンを選択します。 [変数の管理] をポイントし、[値の解析] を選択します。

  2. 値の解析ノードを追加し、解析する変数を選択します。

    解析する変数を選択する画面のスクリーンショット。

  3. データ型の場合は、[ サンプル データから] を選択します。

    解析値ノードのデータ型の選択を示すスクリーンショット。

  4. [ サンプル JSON からスキーマを取得] を選択し、開いたエディターで目的の JSON 例を入力して、[確認] を選択 します

    サンプル JSON データを入力するエディターを示すスクリーンショット。

  5. 解析された値を保持する変数を選択します。 通常、新しい変数を作成します。

    解析値ノードから解析された値を直接保持する変数を作成する方法を示すスクリーンショット。

    これで、出力変数に、予期される型である record が含まれるようになりました。

    解析されたデータを保持している変数が、想定される種類のレコードであることを示すスクリーンショット。