変数は、エージェントからの質問に対する顧客の回答を保存します。 たとえば、UserName という変数に顧客の名前を保存できます。 会話が続行している間、エージェントは名前で顧客に対応できます。
既定では、変数を作成したトピックでのみ変数の値を使用できます。 ただし、複数のトピックで値を再利用したい場合があります。 たとえば、「ようこそ」トピックは、顧客の名前とメール アドレスを尋ねます。 「予約予約」トピックでは、エージェントに、顧客が既に提供した内容を記憶し、もう一度要求しないようにする必要があります。
変数を再利用するには、あるトピックから別 のトピックに変数を渡します 。 スコープ内で変数をグローバルにすることもできます。 この記事では、グローバル変数について説明します。 これらは、エージェント全体のすべてのトピックで使用できるため、グローバル変数と呼ばれます。 エージェントは、外部ソースから設定することもできます。
グローバル変数は、単一のユーザーセッション中に適用されます。 トピック レベルの変数と区別するために、どの変数がグローバル変数であるかを指定します。
グローバル変数を作成する
トピック変数のスコープを変更して、グローバル変数を作成することができます。
Note
グローバル変数の名前は、すべてのトピックで一意である必要があります。
変数を作成する または 変数パネルを使用して 既存の変数を開きます。
変数プロパティ パネルで、グローバル (どのトピックでもアクセス可能) を選択します。 変数名は、トピック レベルの変数と区別するために
Global.プレフィックスを取得します。 たとえば、変数UserNameはGlobal.UserNameになります。トピックを保存します。
グローバル変数を使用する
メッセージ ノードまたは質問ノードでメッセージを作成する場合は、{x} アイコンを選択して、トピックがアクセスできる変数を表示します。 プロンプトまたはワークフローを呼び出す ツール ノードでグローバル変数を使用することもできます。 グローバル変数は、トピック変数と共に [カスタム ] タブに表示されます。 変数はアルファベット順に一覧表示されます。
グローバル変数を使用するすべてのトピックを検索する
グローバル変数が定義されている場所と、それを使用する他のトピックを見つけることができます。 この機能は、新しいエージェントで作業している場合、または複数の変数と 複雑なトピック分岐がある場合に便利です。
作成キャンバスまたは [変数 ] パネルで、必要なグローバル変数を選択します。
変数プロパティパネルの参照セクションで、すべての参照を表示するを選択します。
その他 タブに切り替え、変数が使用されているトピックを選択して、そのトピックとノードに直接移動します。
グローバル変数の削除
他のトピックで使用されているグローバル変数を削除すると、トピック内のその変数への参照は Unknownとして表示されます。 操作を確認する前に、グローバル変数の削除に関する警告が表示されます。
削除されたグローバル変数への参照を含むノードは、未知の変数を含むことを示します。
削除されたグローバル変数への参照を含むノードを持つトピックが機能しなくなる場合があります。 エージェントを発行する前に、削除された変数を使用したすべてのトピックを削除または修正してください。
グローバル変数のライフサイクル
既定では、グローバル変数の値は セッション が終了するまで保持されます。 [ 変数値のクリア] ノードは、グローバル変数の値をリセットします。 「会話システムのリセット」トピックでは、このノードを使用します。 リダイレクトによってそのトピックがトリガーされたとき (またはユーザーが "やり直し" などのフレーズを入力したとき)、すべてのグローバル変数がリセットされます。
外部ソースからグローバル変数を設定する
エージェントが何らかのコンテキストで会話を開始できるようにするには、グローバル変数を使用し、外部ソースからその値を設定します。 サイトでユーザーがサインインする必要があるとします。 ユーザーの名前をグローバル変数に格納してエージェントに渡すと、エージェントは顧客が最初の質問を入力する前に名前で挨拶できます。 もう 1 つのシナリオ例として、Dynamics 365 Customer Serviceからエージェントにコンテキストを渡すことで、顧客が何を達成したいのかを知って会話を開始できます。
望ましくない待機時間を防ぐには、エージェントが値を待機できる時間を指定します。 また、外部ソースがタイムリーに応答できない場合に使用する既定値を設定することもできます。
Note
IVR ユース ケース用に Dynamics 365 Contact Center チャネルに発行されたエージェントは、外部ソースによって設定されたグローバル変数に対して構成されたタイムアウト値をサポートしていません。
外部ソースから設定するすべての変数の構成を保持する専用のトピックを作成します。 たとえば、このトピックに "コンテキスト変数の設定" という名前を付けることができます。 このトピックは他の目的には役立たないため、トリガー フレーズを設定する必要はありません。
専用トピックに 変数値の設定 ノードを追加します。
変数の設定 で、変数ピッカーを開いて、新規変数の作成 を選択します。
新しい変数の既定の名前を選択します。 変数プロパティ パネルが表示されます。
既定の名前を、外部システムから渡される変数の名前と 正確に 一致するものに置き換えます。
使用 で、グローバル (任意のトピックがアクセス可能) を選択して、外部ソースは値を設定できます。
参照 で、右上隅にある 3 つのドット (⋮) を選択し、空の場合はこのノードから値を取得する を選択します。
(省略可能)タイムアウト遅延をミリ秒単位で設定します。 この値は、エージェントが外部ソースによって変数が設定されるのを待機できる時間を決定します。タイムアウトすると、変数値の設定 ノードで設定したデフォルト値で続行します。 この設定は、変数が実行時間の長いプロセスまたは非同期プロセスに依存するシナリオに関連しますが、エージェントは優れたユーザーエクスペリエンスを確保するために最大レイテンシーを尊重する必要があります。
Customer Service の Omnichannel からの変数の場合は、最大待機時間として 10 秒 (10,000 ミリ秒) の値を使用します。
[ 変数値の設定 ] ノードで、タイムアウトに達した場合に使用する既定値を入力します。 実行時に、エージェントは同じデータ型の値を受け取ります。 この既定値を空の文字列にする場合は、
Text("")を数式として使用します。
外部システムから取得すると予想されるその他の値については、変数値の設定 ノードをさらに専用トピックに追加し、同じ方法で必要なグローバル変数を設定します。
この方法でエージェントを構成すると、テストする準備が整います。 エージェントが呼び出されると、すべての変数が入力されるのを無期限に待つのではなく、渡される変数に依存しないメッセージの送信をすぐに開始できます。 外部に設定されている変数にエージェントがアクセスしようとすると、値が到着するかタイムアウトになるまで一時停止します。 待機時間を最小限に抑えるためのエージェントの最適化に関するページを参照してください。
Important
会話の通常のフロー中に、エージェントが外部値から取得される変数を設定した場合、エージェント内から設定された値が優先されます。 コンテキストで渡された値はすべて無視されます。 このルールにより、エージェントはトピックに意図的に設定された値を上書きできなくなります。
組み込みエージェントのグローバル変数の設定
エージェントを単純な Web ページに埋め込む場合、変数とその定義をエージェントの URL に追加することができます。 または、もう少し制御したい場合は、<script> コード ブロックを使用して、プログラムで変数を呼び出します。
URL のクエリ文字列の変数名は、Global. 接頭辞なしで、グローバル変数の名前と一致している必要があります。 たとえば、グローバル変数の場合 Global.UserName クエリでは UserName のみを使用します。
次の例では、変数の基本宣言を使用します。 運用シナリオでは、クエリ パラメーターまたは変数定義として、ユーザーの名前を既に格納している別の変数を渡すことができます (たとえば、サインイン スクリプトのユーザー名がある場合)。
クエリ文字列パラメーター として botURL?variableName1=variableDefinition1&variableName2=variableDefinition2 の形式で、エージェントの URL に変数とその定義を追加します。
例えば次が挙げられます。
-
Global.UserNameという名前のグローバル変数があります。 - エージェントのURL は https://web.powerva.microsoft.com/webchat/bots/12345 です。
- Web サイトでエージェントの会話を開始するときにユーザー名を渡すには、
UserName=クエリ文字列を次のようにアタッチします: https://web.powerva.microsoft.com/webchat/bots/12345?UserName=Ana。
パラメーター名では大文字と小文字が区別されません。この例では、 username=Ana も機能します。
ユーザー定義キャンバスにグローバル変数を追加する
ユーザー定義キャンバスに変数を追加することができます。
ページにエージェントがある
<script>セクションで、変数名にvariableName1接頭辞を付けない形でGlobal.を使い、variableDefinition1を定義として変数を次のように定義します。 複数の変数はコンマ (,) で区切ります。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); });<script>セクションで、エージェントを埋め込む際にstoreを呼び出します。たとえば、以下の例では、storeはstyleOptionsが呼び出される直前に呼び出されます (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));
認証関連のグローバル変数
エージェントの認証設定に応じて、選択した認証プロバイダに関連するグローバル変数のセットがあります。 使用可能な変数のセットとその使用方法の詳細については、トピックへのユーザー認証の追加するを参照してください。