変数の使用

重要

Power Virtual Agents 機能は、生成 AI への多大な投資と Microsoft Copilot 全体の統合の強化により、現在 Microsoft Copilot Studio の一部となっています

ドキュメントやトレーニング コンテンツが更新される間、一部の記事やスクリーンショットで Power Virtual Agents が参照される場合があります。

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

変数を使用して、顧客を動的に別の会話パスにルーティングする論理式を作成することもできます。 たとえば、顧客の名前を UserName という変数に保存し、コパイロットは会話が継続しているときに名前で顧客に対応できます。

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

変数は、次の 3 つのレベルまたはスコープ内に存在できます。

  • トピック変数は、作成されたトピック内でのみ使用することができます。 このスコープが、作成された変数の既定値です。
  • グローバル変数はすべてのトピックで使用することができます。 トピック変数のスコープを変更し、グローバル変数にすることができます。
  • システム 変数 は、コパイロットで自動的に作成されます。 それらは、会話またはユーザーについてより多くのコンテキスト情報を提供します。 すべてのトピックで使用可能です。

変数の型

変数は基本タイプと関連付けられます。 型は、変数が含むことのできる値や、論理式を構成する際に使用できる演算子を決定します。

タイプ Description
String テキストを表すために使用される一連の文字
ブール型 true または false の論理値
回数 任意の実数
テーブル 値のリスト。ただし、すべての値は同じ型である必要があります
Record 名前と値のペアのコレクション。値は任意の型
DateTime ある時点に関する日付、時刻、曜日、または月
選択肢 関連する同義語を持つ文字列値のリスト
空白 「値がない」または「不明な値」のプレースホルダー。詳細については、Power Fx の空白を参照してください

変数の型は、値が最初に割り当てられるときに設定されます。 その後、変数の型は固定され、他の型の値を割り当てることはできなくなります。 たとえば、開始値 1 の変数には 数値 型が割り当てられます。 これを 文字列 値の "apples" に代入しようとするとエラーになります。

コパイロットをテストする際、変数が一時的に 不明 の型として表示される場合があります。 不明の変数はまだ値が割り当てられていない場合を指します。

変数の順序は、作成キャンバスの上から下に決定されます。 つまり、作成キャンバスの上部にあるノードは、下部にあるノードの前に考慮されます。 条件ノードで分岐を作成するとき、ブランチは左から右に並べられます。 つまり、一番左の分岐のノードは、一番右の分岐のノードの前に考慮されます。

エンティティ

Microsoft Copilot Studio は、エンティティ を使用して、ユーザーの応答から特定の種類の情報を識別します。 識別された情報は、情報に適した型の変数に保存されます。 次の表に、事前に構築されたエンティティに関連付けられている変数の基本型を一覧表示します。

Entity 変数の基本型
複数選択オプション 選択肢
ユーザーの応答全体 String
年齢 回数
ブール型 ブール型
都市 String
Color String
大陸 String
国または地域 String
日時 DateTime
メール String
イベント String
整数 整数
Language String
Money 回数
回数 回数
Ordinal 回数
Organization String
Percentage 回数
個人名 String
電話番号 String
注目ポイント String
速度 Number
状態 String
番地 String
温度 回数
[URL] String
重さ 回数
郵便番号 String
ユーザー定義エンティティ 選択肢

変数を作成する

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

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

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

既定では、質問ノードは複数選択式オプションで作成されます。 異なる事前構築済みエンティティまたはカスタム エンティティを使用するには、特定 ボックスを選択して、コパイロットがリッスンする情報の種類を選択します。

識別情報を選択メニューが開き、個人名エンティティが強調表示された質問ノードのスクリーンショット。

変数名を変更する

変数には、作成する時に自動的に名前が付けられます。 ベスト プラクティスは、変数にわかりやすい名前を付けて、コパイロットを管理する必要がある他のユーザーに目的を明確にすることです。

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

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

変数を設定する

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

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

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

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

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

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

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

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

リテラル値の使用

変数値を選択する代わりに、任意の変数にリテラル値を入力することができます。

productName という名前の変数のリテラル値の使用を示すスクリーンショット。

リダイレクト ノードの変数の入力にリテラル値を使用した場合のスクリーンショット。

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

いくつかのシナリオや、より複雑な型を使用する場合は、特定の型を設定するために Power Fx 式を使用します。

変数ペイン

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

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

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

変数プロパティ ペイン

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

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

変更可能なプロパティ ペインのスクリーンショット。

システム変数

すべてのコパイロットには、会話に関する追加情報を提供する組み込みシステム変数が用意されています。

コパイロット トピックのシステム変数のスクリーンショット。

すべてのシステム変数が一覧に表示されるわけではありません。 これら非表示のシステム変数にアクセスするには、Power Fx 式を使用する必要があります。

Power Fx 式でシステム変数を使用するには、変数名の前に System. を付ける必要があります。 たとえば、式にシステム変数 User.DisplayName を含めるには、System.User.DisplayName として参照する必要があります。

件名 タイプ 非表示 Definition
Activity.Channel 選択肢 表示可 現在の会話のチャンネル ID
Activity.ChannelData 指定なし hidden チャンネル固有のコンテンツを含むオブジェクト
Activity.ChannelId string hidden 現在の会話のチャンネル ID (文字列)
Activity.From.Id string hidden 送信者のチャンネル固有の一意の ID
Activity.From.Name string hidden チャンネル固有のユーザー フレンドリーな送信者名
Activity.Name string 表示可 イベントの名前
Activity.Text string 表示可 ユーザが最後に送信したメッセージ
Activity.Type 選択肢 表示可 活動の種類
Activity.TypeId string hidden アクティビティの種類 (文字列)
Activity.Value 指定なし hidden オープン エンドの値
Bot.Name string 表示可 コパイロットの名前
Channel.DisplayName string hidden チャンネルの表示名
Conversation.Id string 表示可 現在の会話の一意の ID
LastActivity.Id string 表示可 前回送信した活動 の ID
LastMessage.Id string 表示可 ユーザが前に送信したメッセージの ID
LastMessage.Text string 表示可 ユーザーが前に送信したメッセージです
Recognizer.TriggerMessage.Id string 表示可 現在のトピックをトリガーしたユーザー メッセージの ID
Recognizer.TriggerMessage.Text string 表示可 現在のトピックをトリガーしたユーザー メッセージ
User.DisplayName string 表示可 サインイン ユーザーの表示名

トピック間で変数を渡す

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

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

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

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

「顧客と交渉する」トピックのフローは次のとおりです。

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

コパイロットのテスト ペインに示されているように、このトピックが最初にトリガーされると、ユーザーに「何とお呼びしたらよいですか?」と尋ねます。値を userName という文字列変数に格納します。 userName 変数は、他のトピックから値を取得するようにも設定されています。 トピックは「素晴らしい一日になることを願っています、{userName}!」というメッセージで締めくくります。

「グリーティング」トピックのフローは次のとおりです。

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

コパイロットのテスト ペインに示されているように、このトピックが最初にトリガーされると、ユーザーに「お名前は?」と尋ねます。値を UserName という文字列変数に格納します。 トピックは、「はじめまして、{UserName}!」というメッセージを送信します。次に、「顧客と交渉する」トピックにリダイレクトされ、「素晴らしい一日になることを願っています、{userName}!」というメッセージが送信されます。ただし、「顧客と交渉する」トピックでは、ユーザーの名前を再度尋ねることがスキップされたことに注目してください。 代わりに、「グリーティング」トピックから渡された UserName 変数の値が使用されました。

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

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

他のトピックから値を受け取るようにトピックを設定する手順を見ていきましょう。 現在の例を使用しますが、トピックが以前のトピックから値を取得する必要がある場合はいつでも同じ手順が機能します。

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

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

  1. 宛先トピックを作成するか、そこに移動します。

  2. 質問ノードを追加し、メッセージに What should I call you? を入力します。

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

  4. 変数を選択し、変数プロパティ ウィンドウが開きます。 userName という名前を付けて、他のトピックから値を受け取るを選択します。

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

  5. メッセージ ノードを追加する

  6. メッセージ ボックスに、I hope you're having a wonderful day, を入力します。

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

  8. 変数の後のスペースを選択し、! と入力します。

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

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

ソース トピックはリダイレクトを行うトピックのことで、宛先トピックに渡される値を提供します。 この例では、「グリーティング」です。

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

  2. リダイレクト ノードの追加を選択し、宛先トピックを選択します。

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

    リダイレクト ノードの入力として userName 変数が追加されたあいさつトピック のスクリーンショット。

  4. > アイコンを選択し、値を渡す変数を選択します。

    UserName 変数値を選択した Greeting トピックのスクリーンショット。

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

    Redirect ノードが完成した Greeting トピックのスクリーンショット。

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

値を元のトピックに戻す

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

前のセクションからの例を継続しましょう。 「顧客と交渉する」トピックで新しい質問をしてから、「グリーティング」トピックに回答を返します。

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

トピックに変数を返す場合、ソース トピックはリダイレクトされたトピックであり、元のトピックに戻される値を提供します。 この例では、「顧客と交渉する」です。

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

  2. 質問ノードを追加し、メッセージに What city do you live in? を入力します。

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

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

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

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

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

変数をトピックに返す場合、宛先トピックはリダイレクトを行っているトピックのことで、他のトピックから値を受け取るトピックです。 この例では、「グリーティング」です。

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

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

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

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