| 字詞 | 定義 |
|---|---|
| 處理常式需求條件 | 必須滿足這些條件,處理常式才會對工作階段產生任何影響。如果處理常式符合條件,並以某種方式影響工作階段,系統就會呼叫該處理常式。 |
| 處理常式執行要求 | 如果呼叫處理常式,系統會使用選用的執行要求,為使用者建立回覆。這些回覆可能定義於靜態代理資料,或從 Webhook 服務動態擷取。 |
| 處理常式轉換目標 | 如果呼叫處理常式,系統會使用選用的轉換目標來變更目前頁面。下一頁只能是流程開始頁面,或目前有效流程中的頁面。 |
狀態處理常式分為兩種類型,處理常式需求各有不同:
| 字詞 | 定義 |
|---|---|
| Routes | 當使用者輸入內容與意圖相符,且/或符合工作階段狀態的某些條件時,系統就會呼叫路徑。具有意圖要求的路徑也稱為「意圖路徑」。只有條件要求的路徑也稱為「條件路徑」。 |
| 事件處理常式 | 叫用事件時,系統會呼叫事件處理常式。收到非預期的使用者輸入內容,或發生 Webhook 錯誤時,系統會觸發部分內建事件。您也可以定義自訂事件,在對話以外的情況發生時叫用。 |
處理狀態處理常式有三個步驟:
| 字詞 | 定義 |
|---|---|
| 1. 範圍 | 處理常式必須在範圍內,才能對工作階段產生任何影響。範圍取決於處理常式是否套用至流程、頁面或表單參數,以及相關聯的流程是否有效、相關聯的頁面是否有效,或代理目前是否嘗試填寫相關聯的表單參數。 |
| 2. 評估 | 系統會依序評估範圍內的每個處理常式。如果符合處理常式的要求,就會通過評估。 |
| 3. 撥打電話 | 如果處理常式在範圍內且通過評估,就會受到呼叫。系統會呼叫所有相關的執行要求,並將所有相關的轉換目標套用至工作階段。 |
範圍
處理常式必須在範圍內,才能進行評估。處理常式範圍是重要且強大的工具,可協助您控制對話。控制處理常式的範圍,即可控制:
| X | 項目 |
|---|---|
| 意圖可比對時 | |
| 檢查條件的時機 | |
| 可處理特定事件時 | |
| 頁面轉換的時機 | |
| 提供靜態執行要求回覆時 | |
| 呼叫已啟用 Webhook 的執行要求,以取得動態回覆時 |
範圍取決於處理常式是否套用至流程、頁面或表單參數,以及相關聯的流程是否有效、相關聯的頁面是否有效,或代理目前是否嘗試填寫相關聯的表單參數。
詳細的範圍設定規則如下:
- 套用至有效流程的路由:
- 如果目前頁面是流程開始頁面,則在範圍內。
- 如果目前頁面不是流程開始頁面,則只有在意圖符合要求時,才會納入範圍。
- 套用至目前頁面的路徑屬於範圍內。
- 套用至有效流程的事件處理常式會納入範圍。
- 套用至目前頁面的事件處理常式都在範圍內。
- 如果事件處理常式套用至代理目前嘗試填寫的表單參數,則會納入範圍。
Routes
路徑有兩項規定,必須提供其中一項或兩項。如果同時提供這兩項要求,則必須同時滿足這兩項要求,才能呼叫路徑:
| 字詞 | 定義 |
|---|---|
| 意圖規定 | 意圖:必須與目前對話回合的使用者輸入內容相符。如果路由有意圖需求,則稱為「意圖路由」。 |
| 條件要求 | 必須符合的條件。如果路徑有條件要求,則稱為「條件路徑」。 |
您可以將路徑套用至流程 (流程層級路徑) 和頁面 (頁面層級路徑)。舉例來說,您可以在下列情況使用路徑:
| X | 項目 |
|---|---|
| 使用者輸入內容與意圖相符時,應觸發靜態執行要求回覆。 | |
| 當使用者輸入內容與意圖相符時,這項比對應觸發已啟用 Webhook 的執行要求,以提供動態回覆。 | |
| 使用者輸入內容提供最後一個必要的表單參數後,條件檢查會觸發工作階段轉換至另一個頁面。 | |
| 使用者輸入內容提供特定表單參數時,條件檢查會觸發靜態 fulfillment 回覆。 | |
條件檢查設為 true,強制轉換頁面。 |
意圖傳播
一般來說,當意圖比對成功而呼叫路徑時,系統會使用該意圖。除非新的使用者輸入內容觸發新的意圖比對,否則已使用的意圖無法再次比對。不過,在下列情況下,意圖比對可以從一個流程傳播到另一個流程:
flow F1中的路徑以intent I1為必要條件,並以flow F2為轉換目標。Flow F2的路徑也需要intent I1。
在這種情況下,當系統呼叫 flow F1 中的路徑時,intent I1 會針對單一使用者輸入內容比對兩次,並呼叫這兩條路徑。
傳播意圖有助於:
| X | 項目 |
|---|---|
| 將目前頁面變更為其他流程中的特定頁面 (轉換目標流程的路由具有特定轉換目標頁面)。 | |
| 為流程的開始頁面建立進入訊息 (轉換目標流程的路由有 fulfillment)。 |
路由群組
建構代理時,您可能會發現許多頁面都有共同的路由。如要重複使用路由,可以定義路由群組。您可以在流程或整個代理中,建立可重複使用的群組資源。
舉例來說,您可能希望流程處理使用者輸入內容,例如「我想在披薩上加配料」和「我想變更飲料大小」。當流程中有多個頁面處於啟用狀態時,應處理這些輸入內容。您可以定義兩個路徑,並使用意圖處理所有相關頁面的這些輸入內容,但這會造成大量重複工作。您可以定義一次路由群組,然後在所有相關頁面上新增該群組的參照。
流程層級路由群組
流程層級路徑群組是以流程為父項建立的路徑群組資源。可在流程中重複使用。
代理層級路由群組
代理層級路徑群組是以代理為父項建立的路徑群組資源。這些頁面可在整個代理中重複使用,但禁止轉換至非符號頁面的路徑。
流程層級路徑
流程層級路由:將路由新增至流程開始頁面,即可套用至流程。這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 流程起始頁面範圍內,有意圖或條件要求的處理常式。 | |
| 處理常式,其意圖需求範圍涵蓋流程中的所有頁面。 |
如要透過控制台建立流程層級路徑,請按照下列步驟操作:
- 開啟流程起始頁面。
- 按一下「Routes」標題中的新增 按鈕。
- 路線編輯面板隨即開啟。
- 提供路徑欄位。
- 按一下 [儲存]。
如要透過控制台重新排序流程層級路徑,請按照下列步驟操作:
- 開啟流程起始頁面。
- 按一下「Routes」(路徑) 標題。
- 路線清單面板隨即開啟。
- 依所需順序拖曳路徑。 或者,按一下選項選單 ,然後選取「Move To」(移至)。
如要透過控制台刪除流程層級路徑,請按照下列步驟操作:
- 開啟流程起始頁面。
- 按一下「Routes」(路徑) 標題。
- 路線清單面板隨即開啟。
- 按一下選項 選單。
- 選取 [刪除]。
網頁層級路徑
頁面層級路徑是套用至頁面的路徑。這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 特定頁面處於啟用狀態時,範圍內有意圖或條件要求的處理常式。 |
如要透過控制台建立頁面層級路徑,請按照下列步驟操作:
- 開啟頁面 (而非流程起始頁面)。
- 按一下「Routes」標題中的新增 按鈕。
- 路線編輯面板隨即開啟。
- 提供路徑欄位。
- 按一下 [儲存]。
如要透過控制台重新排序頁面層級路徑,請按照下列步驟操作:
- 開啟頁面 (而非流程起始頁面)。
- 按一下「Routes」(路徑) 標題。
- 路線清單面板隨即開啟。
- 按照所需順序拖曳路徑。 或者,按一下選項選單 ,然後選取「Move To」(移至)。
如要從控制台刪除頁面層級路徑,請按照下列步驟操作:
- 開啟頁面 (而非流程起始頁面)。
- 按一下「Routes」(路徑) 標題。
- 路線清單面板隨即開啟。
- 按一下選項 選單。
- 選取 [刪除]。
事件處理常式
事件處理常式必須符合一項條件才能呼叫:
| 字詞 | 定義 |
|---|---|
| 活動規定 | 必須叫用的事件。事件是依名稱識別。 收到非預期的使用者輸入內容,或發生 Webhook 錯誤時,系統會叫用部分內建事件。您也可以定義自訂事件,在對話以外的情況發生時叫用。 |
您可以將事件處理常式套用至流程 (流程層級事件處理常式)、頁面 (頁面層級事件處理常式) 和參數 (參數層級事件處理常式)。舉例來說,您可以在下列情況使用事件處理常式:
| X | 項目 |
|---|---|
| 如果使用者輸入內容與任何意圖都不相符,不相符事件處理常式會提供特定的靜態執行回覆。 | |
| 系統中的計時器到期,您想透過特定的靜態執行回應,向使用者提供提醒資訊。 |
流程層級事件處理常式
流程層級事件處理常式是套用至流程的事件處理常式。這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 流程起始頁面範圍內,有活動規定的處理常式。 | |
| 流程中所有頁面範圍內,有活動規定的處理常式。 | |
| 處理非預期的使用者輸入內容,由流程中的所有頁面共用。 | |
| 處理 Webhook 錯誤,由流程中的所有頁面共用。 | |
| 處理系統叫用的自訂事件,由流程中的所有頁面共用。 |
每個流程都有 no-match 和 no-input
內建事件的事件處理常式。建立流程時,系統會自動建立這些事件處理常式,且無法刪除。
如要透過控制台建立流程層級事件處理常式,請按照下列步驟操作:
- 開啟流程起始頁面。
- 按一下「Event handlers」標題中的「Add」 按鈕。
- 事件處理常式面板隨即開啟。
- 提供事件處理常式欄位。
- 按一下 [儲存]。
如要從控制台刪除流程層級事件處理常式,請按照下列步驟操作:
- 開啟流程起始頁面。
- 按一下「事件處理常式」標題。
- 事件處理常式清單面板隨即開啟。
- 將滑鼠游標懸停在事件處理常式上,然後按一下「Delete」(刪除) 按鈕。
網頁層級事件處理常式
頁面層級事件處理常式是套用至頁面的事件處理常式。這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 特定頁面處於啟用狀態時,範圍內有事件要求的處理常式。 | |
| 處理非預期的使用者輸入內容 (特定頁面)。 | |
| 處理特定頁面的 Webhook 錯誤。 | |
| 處理系統叫用的自訂事件 (特定網頁)。 |
如要透過控制台建立頁面層級事件處理常式,請按照下列步驟操作:
- 開啟頁面 (非流程開始頁面)。
- 如果沒有「事件處理常式」標題,請按一下「Add state handler」,選取「事件處理常式」,然後點選「Apply」。
- 按一下「Event handlers」標題中的「Add」 按鈕。
- 事件處理常式面板隨即開啟。
- 提供事件處理常式欄位。
- 按一下 [儲存]。
如要從控制台刪除頁面層級事件處理常式,請按照下列步驟操作:
- 開啟頁面 (非流程起始頁面)。
- 按一下「事件處理常式」標題。
- 事件處理常式清單面板隨即開啟。
- 將滑鼠游標懸停在事件處理常式上,然後按一下「刪除」按鈕 。
參數層級事件處理常式
參數層級事件處理常式是套用至表單參數的事件處理常式。這類處理常式也稱為重新提示處理常式。這些事件處理常式不允許自訂事件,因為其專門用於處理使用者填寫表單時輸入的無效內容。
這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 使用者在填寫表單參數時,未提供有效輸入內容。 |
如要透過控制台建立參數層級事件處理常式,請按照下列步驟操作:
- 開啟含有表單參數的頁面。
- 按一下參數。
- 參數面板隨即開啟。
- 向下捲動至「Reprompt event handlers」(重新提示事件處理常式) 部分,然後點選「Add event handler」(新增事件處理常式)。
- 事件處理常式面板隨即開啟。
- 提供事件處理常式欄位。
- 按一下 [儲存]。
如要從控制台刪除參數層級事件處理常式,請按照下列步驟操作:
- 開啟含有表單參數的頁面。
- 按一下參數。
- 參數面板隨即開啟。
- 向下捲動至「Reprompt 事件處理常式」部分。
- 將滑鼠游標懸停在事件處理常式上,然後按一下「刪除」按鈕 。
內建事件
下列事件為內建,由 Dialogflow CX 叫用。部分活動僅限特定等級參加。
事件名稱 |
流程層級 | 頁面層級 | 參數層級 | 叫用時機 |
|---|---|---|---|---|
sys.no-match-default |
✔ | ✔ | ✔ | |
sys.no-match-[1-6] |
✔ | ✔ | ✔ | 如果您為這些依數字排序的事件提供處理常式,系統會依序叫用這些處理常式,而非 sys.no-match-default:sys.no-match-1、sys.no-match-2... |
sys.no-input-default |
✔ | ✔ | ✔ | 未收到使用者輸入內容。這項功能可在下列情況下叫用:
|
sys.no-input-[1-6] |
✔ | ✔ | ✔ | 如果您為這些依數字排序的事件提供處理常式,系統會依序叫用這些處理常式,而非 sys.no-input-default:sys.no-input-1、sys.no-input-2... |
sys.invalid-parameter |
✔ | 當 Webhook 回應將 WebhookResponse.pageInfo.formInfo.parameterInfo.state 設為 INVALID,導致參數失效時,系統會叫用這個方法。 |
||
sys.long-utterance |
✔ | ✔ | ✔ | 使用者輸入內容超過非生成意圖或參數比對的長度上限 (256 個字元)。如未提供,Dialogflow CX 會將長篇使用者語句視為 no-match。如果是串流音訊輸入,只有在用戶端關閉音訊串流後,才會觸發這個事件。 |
webhook.error |
✔ | ✔ | Webhook 呼叫傳回錯誤。只有在下列情況下,系統才會叫用這個事件:1) 沒有與 Webhook 錯誤代碼相符的精細 Webhook 事件處理常式 (例如 webhook.error.timeout);2) 在呼叫執行作業的原始路徑中,沒有設定轉換目標,且 Webhook 失敗。詳情請參閱「評估順序」一節。 | |
webhook.error.timeout |
✔ | ✔ | Webhook 呼叫逾時。只有在原始路徑中未設定轉換目標,且該路徑呼叫了含有失敗 Webhook 的執行要求時,系統才會叫用 Webhook 事件。詳情請參閱「評估順序」一節。 | |
webhook.error.bad-request |
✔ | ✔ | Webhook 傳回 400 Bad Request。只有在原始路徑中未設定轉換目標,且該路徑呼叫了含有失敗 Webhook 的執行要求時,系統才會叫用 Webhook 事件。詳情請參閱「評估順序」一節。 | |
webhook.error.rejected |
✔ | ✔ | Webhook 傳回 401 Unauthorized 或 403 Forbidden。只有在原始路徑中未設定轉換目標,且該路徑呼叫了含有失敗 Webhook 的執行要求時,系統才會叫用 Webhook 事件。詳情請參閱「評估順序」一節。 | |
webhook.error.unavailable |
✔ | ✔ | Webhook 傳回 503 Service Unavailable。只有在原始路徑中未設定轉換目標,且該路徑呼叫了含有失敗 Webhook 的執行要求時,系統才會叫用 Webhook 事件。詳情請參閱「評估順序」一節。 | |
webhook.error.not-found |
✔ | ✔ | 無法連上 Webhook 網址,因此 Webhook 呼叫失敗。只有在原始路徑中未設定轉換目標,且該路徑呼叫了含有失敗 Webhook 的執行要求時,系統才會叫用 Webhook 事件。詳情請參閱「評估順序」一節。 | |
flow-cancelled |
✔ | ✔ | 使用者要求取消流程。這個事件是由「End Flow With Cancellation」頁面觸發,請參閱 END_FLOW_WITH_CANCELLATION 符號轉換目標。 |
|
flow-failed |
✔ | ✔ | 這項流程無法完成指定工作。這個事件是由「結束流程並回報失敗」頁面觸發,請參閱END_FLOW_WITH_FAILURE 符號轉換目標。 |
|
flow-failed-human-escalation |
✔ | ✔ | 使用者要求與真人服務專員交談。這個事件是由「End Flow With Human Escalation」頁面觸發,請參閱END_FLOW_WITH_HUMAN_ESCALATION 符號轉換目標。 |
自訂事件
您可以建立自訂事件和事件處理常式。自訂事件可處理使用者對話以外的情況,例如使用者點選按鈕、經過一段時間、對話期間可用庫存已變更等。
事件僅以名稱識別。請避免使用開頭為 sys. 或 webhook. 的事件名稱,以免與內建事件衝突。
如要使用 API 叫用事件,請參閱 Session 類型的 detectIntent 方法 queryInput.event 欄位。
選取工作階段參考資料的通訊協定和版本:
| 通訊協定 | V3 | V3beta1 |
|---|---|---|
| REST | 工作階段資源 | 工作階段資源 |
| RPC | 工作階段介面 | 工作階段介面 |
| C++ | SessionsClient | 不適用 |
| C# | SessionsClient | 不適用 |
| Go | SessionsClient | 不適用 |
| Java | SessionsClient | SessionsClient |
| Node.js | SessionsClient | SessionsClient |
| PHP | 不適用 | 不適用 |
| Python | SessionsClient | SessionsClient |
| 小茹 | 不適用 | 不適用 |
評估順序
系統會按照特定順序評估處理常式。並遵守以下通則:
- 系統只會評估範圍內的處理常式。
- 只有符合條件的處理常式才能呼叫。
- 如果呼叫的處理常式沒有轉換目標,系統會繼續評估處理常式清單。根據這項規則,多個執行要求可以將多則訊息新增至回覆佇列。
- 如果呼叫具有轉換目標的處理常式,系統就會停止評估處理常式清單。
- 如果呼叫了含有執行要求的處理常式,且執行要求導致 Webhook 錯誤:
- 如果處理常式已定義轉換目標,Webhook 會失敗,但不會顯示任何訊息。
- 如果事件處理常式在事件範圍內,就會處理事件,並結束評估處理常式清單。
- 如果事件範圍內沒有事件處理常式,Webhook 會失敗,但不會顯示任何訊息。
- 當意圖需求獲得滿足時,系統會使用意圖,因此只能呼叫為意圖找到的第一個路徑處理常式 (例外狀況請參閱「意圖傳播」)。
- 滿足條件要求時,條件不會消耗,因此可以呼叫多個具有該條件的路徑。
- 當事件符合條件時,系統會消耗事件,因此只能呼叫為事件找到的第一個事件處理常式。
- 處理常式呼叫堆疊可能會影響評估順序。
評估作業分為三個階段:
- 具有意圖需求的路由會依下列順序評估:
- 如果路徑只有條件要求,則會按照下列順序評估:
- 事件處理常式的評估順序如下:
- 參數層級: 套用至目前頁面表單參數的事件處理常式,代理目前嘗試填寫 (重新提示處理常式),順序與提供時相同。
- 頁面層級:套用至目前頁面的事件處理常式,按照提供的順序排列。
- 流程層級:按照提供的順序,將事件處理常式套用至有效流程。
象徵性過渡目標
輸入處理常式的轉換目標時,您可以輸入特定流程或頁面,也可以輸入符號轉換目標:
符號轉換目標 |
說明 |
|---|---|
START_PAGE |
轉換至同名有效流程的開始頁面。 |
END_FLOW |
結束目前運作中的流程,並返回導致轉換至目前流程的頁面。另請參閱「處理常式呼叫堆疊和流程堆疊限制」。 |
END_FLOW_WITH_CANCELLATION |
結束目前運作中的流程,並返回導致轉換至目前流程的頁面。呼叫頁面可以使用 flow-cancelled 內建事件處理這項轉換。另請參閱「處理常式呼叫堆疊和流程堆疊限制」。 |
END_FLOW_WITH_FAILURE |
結束目前運作中的流程,並返回導致轉換至目前流程的頁面。呼叫頁面可以使用 flow-failed 內建事件處理這項轉換。另請參閱「處理常式呼叫堆疊和流程堆疊限制」。 |
END_FLOW_WITH_HUMAN_ESCALATION |
結束目前運作中的流程,並返回導致轉換至目前流程的頁面。通話頁面可以使用 flow-failed-human-escalation 內建事件處理這項轉換。另請參閱「處理常式呼叫堆疊和流程堆疊限制」。 |
END_SESSION |
清除目前的工作階段,並轉換至名為 END_SESSION 的特殊頁面。使用者下次輸入內容時,工作階段會從預設啟動流程的起始頁面重新開始。 |
PREVIOUS_PAGE |
轉換至導致轉換至目前頁面的前一個頁面。轉換後,系統會還原前一頁的頁面狀態。 |
CURRENT_PAGE |
重新轉換至目前頁面。如果想讓代理重複某個動作,這項功能就派得上用場。 |
處理常式呼叫堆疊和流程堆疊限制
當工作階段透過特定跳轉目標從一個流程跳轉到另一個流程時,每個流程都會推送至流程堆疊。
處理常式呼叫堆疊
工作階段轉換至 END_FLOW 時,會返回導致轉換至完成流程的呼叫頁面。在這種情況下,系統會保留處理常式呼叫堆疊。系統會略過先前從呼叫頁面評估的所有處理常式,並依序評估其餘處理常式。
例如:
- 頁面 P 有三個處理常式,順序如下:H1、H2、H3。
- 系統會評估 H1,但不會觸發轉換。
- 評估 H2,並轉換至流程 F。
- 流程 F 中的頁面會轉換至
END_FLOW。 - 工作階段返回頁面 P,該頁面會再次啟用並保留狀態。
- 頁面 P 中的處理常式評估會從保留的狀態繼續,因此會評估 H3。
流程堆疊限制
流程堆疊上限為 25。如果超過堆疊上限,流程可能會從堆疊中彈出,導致使用 END_FLOW 轉換時發生非預期行為。為避免這些潛在問題,請盡量減少 END_FLOW 轉換前的流程轉換次數。
如果流程堆疊為空,END_FLOW 轉換會結束工作階段。
設定條件
如要使用控制台設定條件,請提供條件規則,並選取下列其中一個邏輯選項:
- 符合至少一項規則 (OR)
- 符合所有規則 (AND)
- 自訂運算式
為方便起見,您可以使用 AND/OR 選項,為參數值建立簡單或複合條件。
您可以使用任意形式的「Customize expression」(自訂運算式) 選項,設定所有類型的條件,包括系統函式和布林常數。
舉例來說,如要設定有 10% 機率通過評估的條件,請選取「Customize expression」(自訂運算式) 選項,然後在「Condition」(條件) 欄位中輸入 $sys.func.rand() < 0.1:
