| 字詞 | 定義 |
|---|---|
| 處理常式需求 | 如要讓處理常式對工作階段產生任何影響,必須滿足下列需求。如果處理常式符合需求並以某種方式影響工作階段,就會呼叫該處理常式。 |
| 處理常式執行要求 <0x0A | 如果呼叫處理常式,系統會使用選用的執行要求,為使用者建立回應。這些回應可以是靜態代理程式資料中定義的回應,也可以是從 Webhook 服務動態擷取的回應。 |
| 處理常式轉移目標 | 如果呼叫處理常式,系統會使用選用的轉場目標來變更目前頁面。下一頁只能是流程開始頁面,或是目前有效流程中的頁面。 |
狀態處理常式分為兩種類型,處理常式需求也不同:
| 字詞 | 定義 |
|---|---|
| 路徑介面集 <0x0A | 當使用者輸入內容符合意圖和/或滿足工作階段狀態的某些條件時,系統就會呼叫路徑。有意圖需求的路線也稱為「意圖路線」。只有條件規定的路線也稱為「條件路線」。 |
| 事件處理常式 < | 事件處理常式會在事件叫用時呼叫。 當系統收到非預期的使用者輸入內容,或發生 Webhook 錯誤時,會觸發部分內建事件。您也可以定義自訂事件,在對話以外發生事件時叫用。 |
處理狀態處理常式有三個步驟:
| 字詞 | 定義 |
|---|---|
| 1. 範圍 | 處理常式必須在範圍內,才能對工作階段產生任何影響。範圍取決於處理常式是否套用至流程、頁面或表單參數,以及相關聯的流程是否處於啟用狀態、相關聯的頁面是否處於啟用狀態,或是服務專員目前是否嘗試填寫相關聯的表單參數。 |
| 2. 評估 | 系統會依序評估範圍內的每個處理常式。如果處理常式符合規定,就會通過評估。 |
| 3. 撥打電話 | 如果處理常式在範圍內並通過評估,系統就會呼叫該處理常式。系統會呼叫任何相關聯的完成動作,並將任何相關聯的轉換目標套用至工作階段。 |
範圍
如要評估處理常式,該處理常式必須位於範圍內。處理常式範圍是重要且強大的工具,可協助您控管對話。您可以控制處理常式的範圍,藉此控制:
| X | 項目 |
|---|---|
| 意圖可比對成功時 | |
| 應檢查的狀況 | |
| 可處理特定事件時 | |
| 頁面轉換的時機 | |
| 提供靜態完成回應時 | |
| 為動態回應呼叫啟用 Webhook 的執行要求時 |
範圍取決於處理常式是否套用至流程、頁面或表單參數;以及相關聯的流程是否有效、相關聯的頁面是否有效,或是代理程式目前是否嘗試填寫相關聯的表單參數。
詳細範圍規則如下:
- 套用至有效流程的路徑:
- 如果目前頁面是流程開始頁面,則屬於範圍內。
- 如果目前頁面不是流程起始頁面,只有在有意圖需求時,這些頁面才會納入範圍。
- 套用至目前頁面的路徑屬於範圍內。
- 套用至有效流程的事件處理常式屬於範圍內。
- 套用至目前網頁的事件處理常式都在範圍內。
- 套用至代理目前嘗試填寫的表單參數的事件處理常式,都在範圍內。
路徑
路線有兩項規定,必須提供其中一項或兩項。 如果同時提供這兩項需求條件,則必須同時滿足兩者,才能呼叫路徑:
| 字詞 | 定義 |
|---|---|
| 意圖規定 | 意圖:必須與目前對話回合的使用者輸入內容相符。如果路徑有意圖需求,則稱為意圖路徑。 |
| 條件需求 | 必須符合的條件。如果路線有條件限制,則稱為條件路線。 |
您可以將路徑套用至流程 (流程層級路徑) 和頁面 (頁面層級路徑)。舉例來說,您可能會在下列情況使用路徑:
| X | 項目 |
|---|---|
| 當使用者輸入內容符合意圖時,系統應觸發靜態完成回應。 | |
| 如果使用者輸入內容與意圖相符,系統應觸發啟用 Webhook 的執行要求,以提供動態回應。 | |
| 當使用者輸入的內容提供最終的必要表單參數時,條件檢查會觸發工作階段轉換至其他頁面。 | |
| 當使用者輸入內容提供特定表單參數時,條件檢查會觸發靜態完成回應。 | |
條件檢查設為 true,強制頁面轉換。 |
意圖傳播
一般來說,如果意圖相符而呼叫路徑,意圖就會耗用。 除非新的使用者輸入內容觸發新的意圖比對,否則已使用的意圖無法再次比對。不過,在下列情況下,您可以將意圖比對結果從一個流程傳播到另一個流程:
flow F1中的路徑必須符合intent I1規定,且flow F2為轉換目標。Flow F2的路徑也將intent I1視為必要條件。
在本例中,當呼叫 flow F1 中的路徑時,系統會針對單一使用者輸入內容比對 intent I1 兩次,並呼叫這兩個路徑。
傳播意圖有助於:
| X | 項目 |
|---|---|
| 將目前頁面變更為另一個流程中的特定頁面 (轉換目標流程的路徑有特定的轉換目標頁面)。 | |
| 為流程的開始頁面建立進入訊息 (轉換目標流程的路徑有完成動作)。 |
路徑群組
建構代理程式時,您可能會發現許多網頁都有一組常見路徑。如要讓路徑可重複使用,您可以定義路徑群組。 您可以在流程或整個代理程式中,建立可重複使用的群組資源。
舉例來說,您可能希望流程處理使用者輸入的內容,例如「I want to add a topping to my pizza」(我想在披薩上加料) 和「I want to change my drink size」(我想更換飲料大小)。當流程中的任一頁面處於啟用狀態時,都應處理這些輸入內容。您可以定義兩個具有意圖的路徑,處理所有相關網頁的這些輸入內容,但這樣會重複許多工作。您只需定義一次路徑群組,然後在所有相關網頁上新增群組的參照。
流程層級路徑群組
流程層級路徑群組是以流程做為父項建立的路徑群組資源。可在流程中重複使用。
專員層級路徑群組
代理程式層級路徑群組是以代理程式做為父項建立的路徑群組資源。這些路徑可在整個代理程式中重複使用,但不允許轉換至非符號頁面的路徑做為目標。
流程層級路徑
流程層級路徑:將路徑新增至流程開始頁面,即可套用至流程。這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 處理常式必須符合意圖或條件需求,且位於流程開始頁面的範圍內。 | |
| 處理常式必須符合流程中所有網頁的意圖要求。 |
如要從主控台建立流程層級路徑,請按照下列步驟操作:
- 開啟流程開始頁面。
- 按一下「Routes」(路徑) 標題中的「新增」按鈕。
- 路線編輯面板隨即開啟。
- 提供路線欄位。
- 按一下 [儲存]。
如要從控制台重新排序流程層級路徑,請按照下列步驟操作:
- 開啟流程開始頁面。
- 按一下「路線」標題。
- 路線清單面板隨即開啟。
- 依所需順序拖曳路線。 或者,按一下「選項」選單 ,然後選取「移至」。
如要從控制台刪除流程層級路徑,請按照下列步驟操作:
- 開啟流程開始頁面。
- 按一下「路線」標題。
- 路線清單面板隨即開啟。
- 按一下選項 選單。
- 選取 [刪除]。
網頁層級路徑
網頁層級路徑是指套用至網頁的路徑。 這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 特定網頁處於啟用狀態時,範圍內有意圖或條件需求的處理常式。 |
如要透過控制台建立頁面層級路徑,請按照下列步驟操作:
- 開啟頁面 (而非流程開始頁面)。
- 按一下「Routes」(路徑) 標題中的「新增」按鈕。
- 路線編輯面板隨即開啟。
- 提供路線欄位。
- 按一下 [儲存]。
如要透過主控台重新排序網頁層級路徑,請按照下列步驟操作:
- 開啟頁面 (不是流程開始頁面)。
- 按一下「路線」標題。
- 路線清單面板隨即開啟。
- 依所需順序拖曳路線。 或者,按一下「選項」選單 ,然後選取「移至」。
如要從控制台刪除網頁層級路徑,請按照下列步驟操作:
- 開啟頁面 (不是流程開始頁面)。
- 按一下「路線」標題。
- 路線清單面板隨即開啟。
- 按一下選項 選單。
- 選取 [刪除]。
事件處理常式
事件處理常式必須符合一項條件才能呼叫:
| 字詞 | 定義 |
|---|---|
| 活動規定 <0x | 必須叫用的事件。事件是依名稱識別。 當系統收到非預期的使用者輸入內容,或發生 Webhook 錯誤時,會叫用部分內建事件。您也可以定義自訂事件,在對話以外的情況發生時叫用。 |
您可以將事件處理常式套用至流程 (流程層級事件處理常式)、 頁面 (頁面層級事件處理常式) 和參數 (參數層級事件處理常式)。 舉例來說,您可能會在下列情況使用事件處理常式:
| X | 項目 |
|---|---|
| 如果使用者輸入的內容與任何意圖都不相符,不相符事件處理常式會提供特定的靜態完成回應。 | |
| 系統中的計時器到期,您想透過特定的靜態執行要求回應,向使用者提供提醒資訊。 |
流程層級事件處理常式
流程層級事件處理常式是指套用至流程的事件處理常式。 這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 處理常式必須符合事件規定,且位於流程開始頁面的範圍內。 | |
| 處理常式,且流程中所有網頁的範圍內都有事件需求。 | |
| 處理非預期的使用者輸入內容,流程中的所有頁面都會共用。 | |
| 處理網頁流程中所有網頁共用的 Webhook 錯誤。 | |
| 處理系統叫用的自訂事件,這些事件會由流程中的所有網頁共用。 |
每個流程都有 no-match 和 no-input
內建事件的事件處理常式。建立流程時,系統會自動建立這些事件處理常式,且無法刪除。
如要從控制台建立流程層級的事件處理常式,請按照下列步驟操作:
- 開啟流程開始頁面。
- 按一下「事件處理常式」標題中的「新增」 按鈕。
- 事件處理常式面板隨即開啟。
- 提供事件處理常式欄位。
- 按一下 [儲存]。
如要從控制台刪除流程層級的事件處理常式:
- 開啟流程開始頁面。
- 按一下「事件處理常式」標題。
- 事件處理常式清單面板隨即開啟。
- 將滑鼠游標懸停在事件處理常式上,然後點選「刪除」按鈕 。
網頁層級事件處理常式
網頁層級事件處理常式是指套用至網頁的事件處理常式。 這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 當特定頁面處於有效範圍時,處理常式會符合事件需求。 | |
| 處理非預期的使用者輸入內容 (特定於網頁)。 | |
| 處理網頁專屬的 Webhook 錯誤。 | |
| 處理系統叫用的自訂事件,特定於某個網頁。 |
如要從控制台建立頁面層級的事件處理常式,請按照下列步驟操作:
- 開啟頁面 (不是流程開始頁面)。
- 如果沒有「事件處理常式」標題,請按一下「新增狀態處理常式」,選取「事件處理常式」,然後按一下「套用」。
- 按一下「事件處理常式」標題中的「新增」 按鈕。
- 事件處理常式面板隨即開啟。
- 提供事件處理常式欄位。
- 按一下 [儲存]。
如要從控制台刪除網頁層級的事件處理常式,請按照下列步驟操作:
- 開啟頁面 (不是流程開始頁面)。
- 按一下「事件處理常式」標題。
- 事件處理常式清單面板隨即開啟。
- 將滑鼠游標懸停在事件處理常式上,然後點選「刪除」按鈕 。
參數層級事件處理常式
參數層級事件處理常式是套用至表單參數的事件處理常式。也稱為重新提示處理常式。這些事件處理常式不允許自訂事件,因為它們專門用於處理表單填寫期間的無效使用者輸入內容。
這類處理常式的用途如下:
| X | 項目 |
|---|---|
| 使用者在填寫表單參數時,未提供有效輸入內容。 |
如要從控制台建立參數層級的事件處理常式,請按照下列步驟操作:
- 開啟含有表單參數的網頁。
- 按一下參數。
- 參數面板隨即開啟。
- 向下捲動至「Reprompt event handlers」(重新提示事件處理常式) 部分,然後點選「Add event handler」(新增事件處理常式)。
- 系統會開啟事件處理常式面板。
- 提供事件處理常式欄位。
- 按一下 [儲存]。
如要從控制台刪除參數層級的事件處理常式,請按照下列步驟操作:
- 開啟含有表單參數的網頁。
- 按一下參數。
- 參數面板隨即開啟。
- 向下捲動至「Reprompt event handlers」(重新提示事件處理常式) 部分。
- 將滑鼠游標懸停在事件處理常式上,然後點選「刪除」按鈕 。
內建事件
下列為內建事件,由 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 URL 無法連線,因此 webhook 呼叫失敗。只有在呼叫失敗 Webhook 的原始路徑中未設定轉移目標時,才會叫用 Webhook 事件。詳情請參閱「評估順序」一節。 | |
flow-cancelled |
✔ | ✔ | 使用者要求取消流程。這個事件是由「End Flow With Cancellation」頁面觸發,請參閱END_FLOW_WITH_CANCELLATION 符號轉換目標。 |
|
flow-failed |
✔ | ✔ | 這個流程無法完成指定工作。這個事件是由「End Flow With Failure」頁面觸發,請參閱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 |
| Ruby | 不適用 | 不適用 |
評估順序
系統會依特定順序評估處理常式。 並遵守以下通則:
- 系統只會評估 scope 中的處理常式。
- 只有滿足要求的處理常式可以呼叫。
- 如果呼叫沒有轉場目標的處理常式,系統會繼續評估處理常式清單。由於這項規則,多個完成動作可以將多則訊息新增至回應佇列。
- 如果呼叫的處理常式含有轉移目標,系統就會停止評估處理常式清單。
- 如果呼叫的處理常式包含完成動作,且完成動作導致 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」的特殊頁面。使用者下次輸入內容時,系統會從「Default Start Flow」的起始頁面重新啟動工作階段。 |
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 選項,為參數值建立簡單或複合條件。
您可以針對所有類型的條件使用任意形式的「自訂運算式」選項,包括系統函式和布林常數。
舉例來說,如要設定通過評估的機率為 10% 的條件,請選取「自訂運算式」選項,並在「條件」欄位中輸入 $sys.func.rand() < 0.1:
