變數可儲存客戶對 Agent 提出問題的回答。 例如,您可以在名為 UserName 的變數中儲存客戶名稱。 然後,代理程式可以在交談繼續時稱呼客戶的名稱。
變數的值預設只能用於建立變數所在的主題中。 不過,可以在不同的主題中重複使用這同一個值。 例如,歡迎主題會詢問客戶的名稱和電子郵件地址。 在「預約」主題中,您希望代理程式記住客戶輸入的內容,而不是再次詢問。
重複使用變數的一種方法是將變數從一個主題傳遞到另一個主題。 另一個方式是將變數設為範圍中的全域變數,這也正是本文所涵蓋的內容。 之所以這樣稱呼全域變數,是因為它們在整個代理程式的所有主題中都可用。 它們也可以從外部來源進行設定。
全域變數適用於單一使用者工作階段。 您可以指定哪些變數是全域變數,以將它們與主題層級變數區分開來。
建立全域變數
您可以變更主題變數的範圍來建立全域變數。
注意
全域變數的名稱在所有主題中必須是唯一的。
使用全域變數
尋找所有使用全域變數的主題
您可以尋找定義全域變數的位置以及哪些主題正在使用此變數。 如果您正在開發新的代理程式,或者您有多個變數和複雜的主題分支,則此功能會很有用。
在製作畫布或變數面板中選擇所需的全域變數。
在變數屬性面板的參考區段中,選擇查看所有參考。
切換到其他索引標籤,然後選擇使用該變數的任何主題,以直接移至該主題和節點。
刪除全域變數
如果您刪除其他主題中使用的全域變數,則主題中對該變數的參考將標記為 Unknown。 在確認作業之前,您會收到有關刪除全域變數的警告。
包含對已刪除全域變數的參考的節點表明它們包含未知變數。
包含對已刪除全域變數的參考的節點的主題可能會停止運作。 確保在發佈代理程式之前刪除或更正使用已刪除變數的所有主題。
全域變數的生命週期
全域變數的值預設會持續存在,直到工作階段結束為止。 清除變數值節點重設全域變數的值,並用於重設交談系統主題。 當重新導向觸發該主題時 (或當使用者輸入諸如「重新開始」之類的字詞時),所有全域變數都將重設。
從外部來源設定全域變數
為了確保 Agent 在某些上下文下開始交談,您可以使用全域變數並從外部來源設定其值。 假設您的網站要求使用者必須登入。 如果您將使用者的名稱儲存在全域變數中並將其傳遞給 Agent,則 Agent 可以在客戶開始輸入第一個問題之前以名稱問候客戶。 另一個範例情境是將上下文從 Dynamics 365 Customer Service 傳遞給 Agent,以便 Agent 可以在了解客戶想要實現的目標的情況下開始交談。
為了防止不必要的延遲,您可以指定 Agent 等待值的時間。 您也可以設定在外部來源未能及時回應時使用的預設值。
注意
發佈到 Dynamics 365 Contact Center 頻道用於 IVR 使用案例的 Agent 不支援為外部來源設定的全域變數設定逾時值。
建立一個私人主題來儲存所有需要從外部來源設定的變數的設定。 例如,您可以將該主題命名為「設定上下文變數」。 此主題不用於任何其他目的,因此不需要設定觸發字詞。
在您的私人主題中新增設定變數值節點。
在設定變數下,開啟變數選擇器,然後選擇建立新變數。
選擇新變數的預設名稱。 此時將顯示變數屬性面板。
將預設名稱替換為與從外部系統傳入的變數名稱完全相符的名稱。
在使用情況下,選擇全域 (任何主題都可以存取),外部來源可以設定值。
在參考中,選取右上角的 更多 圖示 (⋮),然後選取若為空則從此節點取得值。
(選用) 設定逾時延遲 (以毫秒為單位)。 此值決定了 Agent 在逾時之前可以等待外部來源設定變數的時間,然後繼續使用您在設定變數值節點中設定的預設值。 此設定在變數依賴長時間執行或非同步過程的情況下適用,但您的 Agent 必須遵守最大延遲以確保良好的使用者體驗。
對於來自 Omnichannel for Customer Service 的變數,我們建議最長等待時間為 10 秒 (10,000 毫秒)。
在設定變數值節點中,輸入達到逾時時使用的預設值。 在執行階段,您的 Agent 將期望具有相同資料類型的值。 如果您希望此預設值為空字串,請使用
Text("")作為公式。
對於您期望來自外部系統的任何其他值,請在私人主題中新增更多設定變數值節點,並以相同的方式設定所需的全域變數。
這樣設定後,您的 Agent 就可以進行測試了。 當叫用 Agent 時,您的 Agent 可以立即開始傳送任何不依賴傳入變數的訊息,而不是無限期地等待所有變數被填入。 當您的 Agent 嘗試存取外部設定的變數時,它會暫停,直到值到達或發生逾時。 了解有關最佳化 Agent 以最大程度減少延遲的更多資訊。
這很重要
在正常的交談過程中,如果您的 Agent 設定了原本會來自外部值的變數,則 Agent 內部設定的值將占主導地位。 上下文中傳遞的任何值都會被忽略。 此規則可防止您的 Agent 覆寫主題中故意設定的值。
在嵌入式代理程式中設定全域變數
如果您將代理程式嵌入到簡單的網頁中,則可以將變數及其定義附加到代理程式的 URL 中。 或者,如果您想稍微加強控制,可以使用 <script> 程式碼區塊,以程式設計方式呼叫和使用變數。
URL 查詢字串中的變數名稱必須與全域變數不含 Global. 首碼的名稱相符。 例如,全域變數 Global.UserName 在查詢中稱為 UserName。
下面的範例使用變數的基本聲明。 在實際執行情境中,您可以將另一個已儲存使用者名稱的變數作為查詢參數或變數定義傳遞 (例如,如果您從登入指令碼獲得使用者名稱)。
將變數及其定義為 格式的botURL?variableName1=variableDefinition1&variableName2=variableDefinition2附加到代理程式的 URL。
例如:
- 您有一個名為
Global.UserName的全域變數。 - 您的代理程式的 URL 是 https://web.powerva.microsoft.com/webchat/bots/12345。
- 若要在您的網站上啟動代理程式交談時傳遞使用者名,您可以附加
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替換為您的代理程式識別碼):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));
與驗證相關的全域變數
根據代理程式的驗證設定,您有一組與所選驗證提供者關聯的全域變數。 如需要哪些變數集可用以及如何使用的詳細資料,請參閱將使用者驗證新增至主題。