次の方法で共有


グローバル変数の操作

変数は、エージェントからの質問に対する顧客の回答を保存します。 たとえば、UserName という変数に顧客の名前を保存できます。 会話が続行している間、エージェントは名前で顧客に対応できます。

既定では、変数の値は、その変数が作成されたトピックでのみ使用できます。 ただし、トピック間で同じ値を再利用することが可能です。 たとえば、「ようこそ」トピックは、顧客の名前とメール アドレスを尋ねます。 予約トピックでは、エージェントが顧客が入力した内容を記憶し、再度質問しないようにします。

変数を再利用する方法の 1 つは、あるトピックから別のトピックに 変数を渡す ことです。 もう 1 つの方法は変数をスコープ内でグローバルにすることで、この記事で説明しています。 グローバル変数は、その名の通りエージェント全体のすべてのトピックで利用できます。 また、外部ソースから設定することもできます。

グローバル変数は、単一のユーザーセッション中に適用されます。 トピック レベルの変数と区別するために、どの変数がグローバル変数であるかを指定します。

グローバル変数を作成する

トピック変数のスコープを変更して、グローバル変数を作成することができます。

注意

グローバル変数の名前は、すべてのトピックで一意である必要があります。

  1. 変数を作成する または 変数パネルを使用して 既存の変数を開きます。

  2. 変数プロパティ パネルで、グローバル (どのトピックでもアクセス可能) を選択します。

    変数名には接頭辞 Global. が与えられ、トピック レベルの変数と区別することができます。 たとえば、変数 UserName は、Global.UserName として表示されます。

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

グローバル変数を使用する

メッセージ ノードまたは 質問 ノードでメッセージを作成しているとき、{x} アイコンを選択すると、トピックで使用可能な変数が表示されます。 グローバル変数は、すべてのトピック変数と一緒にカスタム タブ内に表示されます。 変数はアルファベット順に一覧表示されます。

グローバル変数を使用してすべてのトピックを検索する

ボット変数が定義された場所と、それを使用している他のトピックを確認することができます。 この機能は、新しいエージェントに取り組んでいる場合や、複数の変数や複雑なトピックの分岐がある場合に便利です。

  1. 作成キャンバスまたは変数パネルで、必要なグローバル変数を選択します。

  2. 変数プロパティパネルの参照セクションで、すべての参照を表示するを選択します。

  3. その他 タブに切り替え、変数が使用されているトピックを選択して、そのトピックとノードに直接移動します。

グローバル変数の削除

他のトピックで使用されているグローバル変数を削除すると、トピック内のその変数への参照は Unknown としてマークされます。 操作を確定する前に、グローバル変数の削除に関する警告が表示されます。

削除されたグローバル変数への参照を含むノードは、未知の変数を含むことを示します。

削除されたグローバル変数への参照を含むノードを持つトピックが機能しなくなる場合があります。 エージェントを公開する前に、削除された変数を使用していたすべてのトピックを削除または修正してください。

グローバル変数のライフサイクル

既定では、グローバル変数の値はセッションが終了するまで持続します。 変数値のクリア ノードはグローバル変数の値をリセットし、会話をリセット システム トピックで使用されます。 リダイレクトによってそのトピックがトリガーされたとき (またはユーザーが "やり直し" などのフレーズを入力したとき)、すべてのグローバル変数がリセットされます。

外部ソースからグローバル変数を設定する

エージェントが何らかのコンテキストで会話を開始するようにするには、グローバル変数を使用して、外部ソースからその値を設定します。 利用しているサイトがユーザーのサインインを要求しているとします。 ユーザーの名前をグローバル変数に格納してエージェントに渡すと、エージェントは顧客が最初の質問を入力する前に名前で挨拶できます。 もう 1 つのシナリオ例は、Dynamics 365 Customer Service からエージェントにコンテキストを渡して、顧客が何を達成したいかについての知識を持って会話を開始できるようにすることです。

望ましくないレイテンシーを防ぐために、エージェントが値を待機できる時間を指定できます。 また、外部ソースがタイムリーに応答できない場合に使用する既定値を設定することもできます。

注意

IVRユースケースのためにDynamics 365 Contact Centerチャネルに公開されるエージェントは、外部ソースによって設定されたグローバル変数に設定されたタイムアウト値をサポートしていません。

  1. 外部ソースから設定するすべての変数の構成を保持する専用のトピックを作成します。 たとえば、このトピックに "コンテキスト変数の設定" という名前を付けることができます。 このトピックは他の目的には役立たないため、トリガー フレーズを設定する必要はありません。

  2. 専用トピックに 変数値の設定 ノードを追加します。

  3. 変数の設定 で、変数ピッカーを開いて、新規変数の作成 を選択します。

  4. 新しい変数の既定の名前を選択します。 変数プロパティ パネルが表示されます。

  5. デフォルト名を、外部システムから渡される変数の名前と 完全に 一致する名前に置き換えます。

  6. 使用 で、グローバル (任意のトピックがアクセス可能) を選択して、外部ソースは値を設定できます

  7. 参照 で、右上隅にある 3 つのドット () を選択し、空の場合はこのノードから値を取得する を選択します。

  8. (オプション)タイムアウト遅延をミリ秒単位で設定します。 この値は、エージェントが外部ソースによって変数が設定されるのを待機できる時間を決定します。タイムアウトすると、変数値の設定 ノードで設定したデフォルト値で続行します。 この設定は、変数が実行時間の長いプロセスまたは非同期プロセスに依存するシナリオに関連しますが、エージェントは優れたユーザーエクスペリエンスを確保するために最大レイテンシーを尊重する必要があります。

    Customer Service 用オムニチャネルからの変数の場合、最大待機時間として 10 秒 (10,000 ミリ秒) の値を推奨します。

  9. 変数値を設定 ノードで、タイムアウトに達した場合に使用するデフォルト値を入力します。 実行時には、エージェントは同じデータ型の値を期待します。 この既定値を空の文字列にする場合は、Text("") を数式として使用します。

    外部ソースから設定するグローバル変数の構成のスクリーンショット。

  10. 外部システムから取得すると予想されるその他の値については、変数値の設定 ノードをさらに専用トピックに追加し、同じ方法で必要なグローバル変数を設定します。

このように構成すると、エージェントをテストする準備が整います。 エージェントが呼び出されると、すべての変数が入力されるのを無期限に待つのではなく、渡される変数に依存しないメッセージの送信をすぐに開始できます。 エージェントが外部で設定されている変数にアクセスしようとすると、値が到着するかタイムアウトが発生するまで一時停止します。 詳細は エージェントを最適化してレイテンシーを最小化する をご覧ください。

重要

会話の通常のフロー中に、エージェントが外部値に対して取得される変数を設定した場合、エージェント内から設定された値が優先されます。 コンテキストで渡された値はすべて無視されます。 このルールにより、エージェントはトピックに意図的に設定された値を上書きできなくなります。

組み込みエージェントのグローバル変数の設定

エージェントを単純な Web ページに埋め込む場合、変数とその定義をエージェントの URL に追加することができます。 または、もう少し制御したい場合は、<script> コード ブロックを使用して、プログラムで変数を呼び出します。

URL のクエリ文字列の変数名は、Global. 接頭辞なしで、グローバル変数の名前と一致している必要があります。 たとえば、グローバル変数 Global.UserName は、クエリでは UserName として参照されます。

この後の例では、基本的な変数宣言を使用します。 実運用シナリオでは、クエリのパラメーターや変数定義として、すでにユーザー名を格納している別の変数を渡すかもしれません (たとえば、サインイン スクリプトからユーザー名を取得している場合など)。

クエリ文字列パラメーター として botURL?variableName1=variableDefinition1&variableName2=variableDefinition2 の形式で、エージェントの URL に変数とその定義を追加します。

例:

パラメーター名は、大文字と小文字を区別しません。 username=Ana はこの例でも有効です。

ユーザー定義キャンバスにグローバル変数を追加する

ユーザー定義キャンバスに変数を追加することができます。

  1. エージェントがあるページの <script> セクションで、Global. 接頭辞および定義の variableDefinition1 がない変数について variableName1 の代わりに変数を次のように定義します。 複数の変数はコンマ (,) で区切ります。

       const store = WebChat.createStore({}, ({ dispatch }) => next => action => {
         if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
           dispatch({
              type: "WEB_CHAT/SEND_EVENT",
              payload: {
                name: "pvaSetContext",
                value: {
                   "variableName1": "variableDefinition1",
                   "variableName2": "variableDefinition2"
                }
              },
            });
          }
            return next(action);
        });
    
  2. <script> セクションで、エージェントを埋め込む際に store を呼び出します。たとえば、以下の例では、storestyleOptions が呼び出される直前に呼び出されます (BOT_IDをエージェントの ID に置き換える必要があります):

    const BOT_ID = "12345-5678";
    const theURL = "https://powerva.microsoft.com/api/botmanagement/v1/directline/directlinetoken?botId=" + BOT_ID;
    
    fetch(theURL)
        .then(response => response.json())
        .then(conversationInfo => {
            window.WebChat.renderWebChat(
                {
                    directLine: window.WebChat.createDirectLine({
                        token: conversationInfo.token,
                    }),
                    store,
                    styleOptions
                },
                document.getElementById('webchat')
            );
        })
        .catch(err => console.error("An error occurred: " + err));
    

エージェントの認証設定に応じて、選択した認証プロバイダに関連するグローバル変数のセットがあります。 使用可能な変数のセットとその使用方法の詳細については、トピックへのユーザー認証の追加するを参照してください。