次の方法で共有


変数の使用

変数を使用して顧客の応答を保存し、会話の後半でコンテンツを再利用することができます。

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

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

変数を作成する

質問 ノードなど、出力として変数を選択するよう求めるノードは、適切な型の出力変数を自動で作成します。

既定の変数の名前とタイプが強調表示された質問ノードのスクリーンショット。

チップ

名前を変更し、ノードを識別しやすくします。 ノードの名前フィールドを選択して名前を直接更新するか、ノードのその他 () アイコンを選択してメニューから名前の変更を選択します。 コード エディター でノードの名前を変更することもできます。

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

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

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

既定では、質問ノードは複数選択式オプションで作成されます。 別のビルド済みエンティティまたはカスタムエンティティを使用するには、識別 ボックスを選択し、エージェントがリッスンする情報のタイプを選択します。

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

変数名を変更する

変数には、作成する時に自動的に名前が付けられます。 ベスト プラクティスは、変数に意味のある名前を付けて、エージェントを維持する必要がある他の人に目的を明確にすることです。

  1. 変数を選択し、変数プロパティ ペインで開きます。

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

変数を設定する

通常、質問 ノードを使用して、ユーザー入力を変数に保存します。 しかし、変数の値を自分で設定したい場合もあるでしょう。 このような場合、変数値の設定ノードを使用します。

  1. ノードの追加 (+) を選択してノードを追加し、変数管理>変数値の設定 を選択します。

  2. 変数の設定の下にあるボックスを選択し、新しい変数を作成するを選択します。

    「新しい変数の作成」ボタンのスクリーンショット。

    新しい変数が作成されました。 値を割り当てるまでその型は不明です。

    変数値の設定ノードに型不明の新しい変数を設定した画面。

  3. 対象値には、次のいずれかの方法で値を指定します:

    • リテラル値を入力します。
    • 同じ型の既存の変数を選択します。 このアクションにより、選択した変数と同じ値が設定されます。
    • Power Fx 式を使用します。 Power Fx 式は、Table 型や Record 型などのリテラル値を使用できない、より複雑な型に有効です。

ヒント

文字列型変数の設定中に、Set 変数To 値の不一致が発生すると、エラーメッセージと 型の不一致を修正する ボタンが表示されます。 ボタンを選択すると、不一致を解決するPower Fx数式 が Copilot Studio 自動的に生成されます。

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

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

スキル アクションの入力および出力パラメータを含むアクション ノードのスクリーンショット。

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

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

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

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

シナリオによっては (たとえば複雑な型を使用するシナリオなど)、特定の型を設定するために Power Fx 式 を使用する必要があるかもしれません。

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

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

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

Copilot Studio にこの Key Vault の閲覧を許可するには、以下の操作を行う必要があります:

  1. Key Vault Secrets User ロールを Microsoft Virtual Agents Service アプリケーションに割り当てます。

  2. 環境内のすべてのエージェントにシークレットへのアクセスを許可するには、そのシークレットにタグ AllowedEnvironments を作成し、許可する環境 ID をカンマ区切りで追加します。

  3. この環境から特定のエージェントだけにこの Key Vault の使用を許可するには、タグ AllowedAgents を作成し、エージェント識別子を {envId}/{schemaName} の形式で記述します。 複数の値を指定する場合は、カンマで区切ってください。

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

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

警告

エージェントにシークレットを追加することで、環境内でエージェントを編集できるすべてのユーザーにこのシークレットの値が公開される可能性があります。なぜなら、そのようなユーザーは SendMessage ノードで値を返すようにエージェントを編集できるためです。

変数ペイン

変数 ペインでは、どのノードで定義または使用されているかに関係なく、トピックで使用できるすべての変数を表示できます。 変数ごとに、他のトピックから値を受け取るか、その値を他のトピックに返すか、またはその両方を行うかを選択できます。 変数を選択して、変数のプロパティ ペインでプロパティを編集することもできます。

変数ウィンドウを開くには、トピックのメニュー バーで、変数を選択します。

Copilot Studio 作成キャンバスの変数ペインのスクリーンショットで、変数ボタンが強調表示されています。

変数プロパティ ペイン

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

変数の 変数プロパティ ペインを開くには、変数 ペインで目的の変数を選択します。 任意のノードで変数を選択して、変数のプロパティ ウィンドウを開くこともできます。

トピック間で変数を渡す

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

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

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

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

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

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

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

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

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

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

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

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

他のトピックから値を受け取るようにトピックを設定する手順を見ていきましょう。 このシナリオの例では、定義済みのトピックあいさつをソーストピックとして使用し、新しいトピック顧客との会話を宛先トピックとして使用していますが、可能な限り以前のトピックの値を使用する必要があるトピックであれば、どのトピックでも同じ手順で動作します。

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

宛先トピックは、リダイレクト先のトピックであり、他のトピックから値を受け取ります。 この例では、顧客と会話するです。

  1. 新しいトピックを作成し、「顧客と会話する」という名前を付けます。

  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. トピックを保存します。

値を元のトピックに戻す

トピックがリダイレクトされる場合や、質問をすることや他の方法で変数を取得する場合、変数は元のトピックに返すことができます。 変数も元のトピックの一部となり、他の変数と同様に使用することができます。 エージェントが取得する情報がトピック全体で利用できるようにし、グローバル変数 の必要性を減らすことができます。

前のセクションからの例を継続しましょう。 顧客と会話するトピック で新しい質問をし、その回答を あいさつ トピックに返します。

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

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

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

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

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

  4. 変数を選択し、変数プロパティ ウィンドウが開きます。 customerCity という名前を付け、値を元のトピックに戻す を選択します。

    customerCity 変数とそのプロパティが強調表示された Talk to Customer トピックのスクリーンショット。

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

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

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

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

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

変数をトピックに返す場合、宛先トピックは現在のトピックから値を受け取るトピックになります。 この例では、宛先トピックは あいさつ です。

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

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

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

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

値の解析ノード

値の解析ノードを使用すると、ある型の値を別の型の値に変換することができます。 トピックにノードを追加する場合は、ノードの追加 アイコン を選択し、 変数管理をポイントして、値の解析を選択します。

変数管理、値の解析の順に選択してノードを追加するメニューのスクリーンショット。

値の解析ノードを使用する主なシナリオは、生の JSON または型なし変数 (実行時まで値や構造がわからない、ChannelData など) を具象型に変換することに重点を置いています。

プロセスは、フローが呼び出されたときに開始され、フローが API を呼び出します。 API が計算結果を返します。 通常、この応答を解析し、1 つ以上のプリミティブ変数を返す必要があります。 値の解析ノードを使用すると、API の結果全体を文字列として送信できます。 例:

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

現在使用している文字列変数は、この新しいノードを使うことで、Power Fx の完全なインテリセンス対応で、Record 変数に変換することができます。 サンプル データを使用した例は、このプロセスを説明する際に役立ちます。

値の解析ノードの使用例

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

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

  2. データ型を選択します。 この場合はサンプル データからを選択します。

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

  3. サンプル JSON からスキーマを取得 を選択し、開いたエディターに必要な JSON の例を入力します。

    サンプル JSON からのスキーマの取得を示すスクリーンショット。

  4. 最後に、解析された値をどの変数に配置するかを指定します。 通常は、これに対して新しい変数を作成します。

    解析された値のターゲット変数を選択する画面のスクリーンショット。

    出力変数が正しい型であるレコードになったことに注意してください。

    解析されたデータのターゲット変数が目的のタイプ (レコード) であることを示すスクリーンショット。

JSON 文字列のパースに加え、値の解析 ノードの主な用途は、実行時に UntypedObject を解析することです。 最も一般的な使用例は、イベントを受信し、イベント値を解析する必要がある場合です。 または、実行時にチャネルごとに変化する System.Activity.ChannelData プロパティを解析することもできます。

Teams からのイベントから情報を解析する場合は、Teams 開発者ドキュメントを使用して、予想されるイベントの例を見つけ、このセクションで前述したように、この例をサンプル データとして使用する必要があります。