次の方法で共有


変数を使用してトピック間でコンテンツを移動する

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

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

変数を再利用する1つの方法は、トピック間で変数を渡すことです。 もう 1 つの方法は変数をスコープ内でグローバルにすることで、この記事で説明しています。 グローバル変数 は、エージェント全体のすべてのトピックで使用できるため、そう呼ばれています。

エージェント変数は、単一のユーザー セッション中で適用されます。 トピック レベルの変数と区別するために、エージェント変数として扱う必要がある変数を指定します。

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

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

  1. 変数を作成するか、または変数ウィンドウを使用して既存の変数を開きます。

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

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

    グローバル設定が強調表示された変数プロパティ ウィンドウを示すスクリーンショット。

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

    グローバル変数の名前は、すべてのトピック間で一意である必要があります。 競合が発生した場合、トピックを保存する前に変数の名前を変更する必要があります。

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

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

グローバル変数の選択を示すスクリーンショット。

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

ボット変数が定義された場所と、それを使用している他のトピックを確認することができます。 新しいエージェントで作業している場合、または複数の変数や 複雑なトピック分岐 がある場合に役立ちます。

  1. キャンバスの作成でグローバル変数を選択するか、または変数ウィンドウを開いてグローバル変数を選択します。

  2. 変数のプロパティ ウィンドウの参照セクションで、変数を使用してそのトピックとノードに直接移動するトピックを選択します。

    変数のプロパティ ウィンドウの変数が使用するトピックの一覧を示しているスクリーンショット。

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

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

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

エージェントが何らかのコンテキストで会話を開始するようにしたい場合は、外部ソースでグローバル変数を初期化できます。 利用しているサイトがユーザーのサインインを要求しているとします。 エージェントはすでにユーザーの名前を知っているため、顧客が最初の質問を入力する前に名前で挨拶することができます。

  1. グローバル変数を選択します。

  2. 変数プロパティ ウィンドウで、外部ソースは値を設定できますを選択します。

埋め込まれた エージェント にグローバル変数を設定する

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

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

次の例では、変数に対して簡単な宣言が行われています。 実稼働シナリオでは、クエリ パラメーターまたは変数の定義として、既にユーザーの名前を格納している別の変数を渡すことができます (たとえば、サインイン スクリプトのユーザー名がある場合)。

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

例:

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

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

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

  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> セクション内で、styleOptions が呼び出されたすぐ上で store を呼び出す次の例のようにエージェントを埋め込む場合、store を呼び出します (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));