共用方式為


在主題間重複使用變數

變數可儲存客戶對代理程式提出問題的回答。 例如,您可以在名為 UserName 的變數中儲存客戶名稱。 然後,代理程式可以在交談繼續時稱呼客戶的名稱。

變數的值預設只能用於建立變數所在的主題中。 不過,可以在不同的主題中重複使用這同一個值。 例如,歡迎主題會詢問客戶的名稱和電子郵件地址。 在「預約」主題中,您希望代理程式記住客戶輸入的內容,而不是再次詢問。

其中一個重複使用變數的方法是,在主題之間傳遞變數。 另一個方式是將變數設為範圍中的全域變數,這也正是本文所涵蓋的內容。 之所以這樣稱呼全域變數,是因為它們在整個代理程式的所有主題中都可用。

全域變數適用於單一使用者工作階段。 您可以指定哪些變數是全域變數,以將它們與主題層級變數區分開來。

建立全域變數

您可以變更主題變數的範圍來建立全域變數。

  1. 建立變數使用變數窗格來開啟現有變數。

  2. 變數屬性面板上,選擇全域 (任何主題都可以存取)

    變數名稱會有首碼 Global.,使其與主題層級變數有所區別。 例如,UserName 變數現在會顯示為 Global.UserName

  3. 儲存主題。

    全域變數的名稱在所有主題中必須是唯一的。

使用全域變數

當您在訊息節點或問題節點中撰寫訊息時,選擇 {x} 圖示以查看該主題可用的變數。 全域變數會與任何主題變數一起出現在自訂索引標籤中。 變數會依字母順序列出。

尋找所有使用全域變數的主題

您可以尋找定義全域變數的位置以及哪些主題正在使用此變數。 如果您正在開發新的代理程式,或者您有多個變數和複雜的主題分支,則此功能會很有用。

  1. 在製作畫布或變數面板中選擇所需的全域變數。

  2. 變數屬性面板的參考區段中,選擇查看所有參考

  3. 切換到其他索引標籤,然後選擇使用該變數的任何主題,以直接移至該主題和節點。

全域變數的生命週期

全域變數的值預設會持續存在,直到工作階段結束為止。 清除變數值節點會重設全域變數的值,並用於重設交談系統主題。 此主題可以透過重新導向或當使用者輸入「重新開始」等觸發字詞時觸發。在這種情況下,所有全域變數都會重設。

從外部來源設定全域變數的值

如果您想確保代理程式啟動與某些上下文的交談,您可以使用外部來源初始化全域變數。 假設您的網站要求使用者必須登入。 由於您的代理程式已經知道使用者的名稱,因此它可以在客戶開始輸入第一個問題之前透過名稱向他們打招呼。

  1. 選取全域變數。

  2. 變數屬性窗格中,選取外部來源可以設定值

在嵌入式代理程式中設定全域變數

如果您將代理程式嵌入到簡單的網頁中,則可以將變數及其定義附加到代理程式的 URL 中。 或者,如果您想稍微加強控制,可以使用 <script> 程式碼區塊,以程式設計方式呼叫和使用變數。

URL 查詢字串中的變數名稱必須與全域變數不含 Global. 首碼的名稱相符。 例如,全域變數 Global.UserName 在查詢中稱為 UserName

下面的範例使用變數的基本聲明。 在實際執行情境中,您可以將另一個已儲存使用者名稱的變數作為查詢參數或變數定義傳遞 (例如,如果您從登入指令碼獲得使用者名稱)。

將變數及其定義為 botURL?variableName1=variableDefinition1&variableName2=variableDefinition2 格式的查詢字串參數附加到代理程式的 URL。

例如:

參數名稱不區分大小寫。 username=Ana 也適用於此範例。

將全域變數新增至自訂畫布

您也可以將變數新增至自訂畫布

  1. 在代理程式所在頁面的 <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);
        });
    
  2. <script> 區段中,嵌入代理程式時會呼叫 store,如以下範例所示,其中呼叫 store 就在呼叫 styleOptions 之前 (您必須將 BOT_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));