使用變數在各主題間攜帶內容

變數可儲存客戶對副手問題的回覆。 例如,您可以在名為 UserName 的變數中儲存客戶名稱。 然後,當交談繼續進行時,副手可以依名稱來處理客戶。

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

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

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

建立全域變數

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

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

  2. 變數屬性窗格底下,選取全域 (任何主題都可以存取)

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

    螢幕擷取畫面顯示 [變數屬性] 窗格,並反白顯示 [全域設定]。

  3. 儲存主題。

    全域變數的名稱在所有主題中都必須是唯一的。 如果有衝突,則必須在儲存主題之前重新命名變數。

使用全域變數

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

螢幕擷取畫面顯示選取全域變數。

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

您可以尋找定義全域變數的位置以及哪些主題正在使用此變數。 如果您正在使用新的副手,或者如果您有多個變數和複雜的主題分支,這會很有用。

  1. 選取製作畫布中的全域變數,或開啟變數窗格並選取全域變數。

  2. 變數屬性窗格的參考區段中,選取任何使用此變數直接移至該主題和節點的主題。

    螢幕擷取畫面顯示 [變數屬性] 窗格中變數所用主題的清單。

全域變數的生命週期

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

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

如果您想確保副駕駛開始與某些內容進行交談,您可以使用外部來源初始化全域變數。 假設您的網站要求使用者必須登入。 由於您的副手已經知道使用者的姓名,因此它可以在客戶開始輸入第一個問題之前透過姓名向他們打招呼。

  1. 選取全域變數。

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

在嵌入式副手中設定全域變數

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

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

下面的範例提供變數的簡單宣告。 在實際執行案例中,您可能會傳遞另一個已經儲存了使用者名稱的變數作為查詢參數或變數定義(例如,如果您從登入指令碼取得使用者名稱)。

將變數和其定義附加到副手的 URL 做為查詢字串參數 (格式為 botURL?variableName1=variableDefinition1&variableName2=variableDefinition2)。

例如:

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

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

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

  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,如下列範例中所述,其中在呼叫 styleOptions 的位置上方呼叫 store (您需要將 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));