有了序列實體後,您可以建立意圖,從使用者收集序列。您至少需要三個意圖來執行以下工作:
- 主意圖意圖「序列」
- 擷取語音片段,開始收集序列。
- 由後續事件叫用,用於繼續擷取序列,直到使用者表示完成為止。
- 內容意圖「序列 - 編輯」
- 擷取語音片段,以修正上次收集到的序列。
- 以程式設計方式迴圈回「序列」意圖,收集修正過的序列。
- 內容意圖「序列 - 完成」
- 擷取表示序列已完成的語音。
在下一節中,您將瞭解 webhook 如何連結所有這些項目,但首先讓我們設定意圖。
建立「序列」意圖
這是收集序列的主要意圖。請按照下列方式設定:
- 請將輸入內容設定為空白,方便使用者在通話開始時觸發這個意圖。
- 新增輸出背景資訊「收集序列」。我們會使用這個結構定義,在流程中啟用修正和完成意圖。
- 新增輸出背景資訊「editing-sequence」,並將生命週期設為 0。我們會在下一節中,使用「序列 - 編輯」意圖的生命週期啟用這個背景資訊,因此請務必在此處清除該背景資訊,以便在觸發「編輯」意圖後,立即啟用「編輯序列」背景資訊。
新增「continue-sequence」事件,讓 webhook 循環執行這項意圖,收集所有部分序列。
新增訓練詞組,方便使用者觸發這個意圖來啟動流程。這個範例使用「我的訂單狀態為何?」、「追蹤我的訂單」、「我的訂單在哪裡?」等字詞。
新增動作名稱「handle-sequence」,讓 webhook 知道何時觸發。在設定完所有意圖後,您將在本教學課程的下一節中編寫 webhook 程式碼。
使用您在上一節建立的正規表示式實體,新增必要參數「new_sequence」,以便收集部分序列。將實體類型設為「@alphanumeric」,並將值設為「$new_sequence」。
新增選用參數「existing_sequence」,其值為「#continue-sequence.existing_sequence」,即可從事件中擷取新的現有序列。您可以將實體類型留空。
新增選用參數「previous_sequence」,其值為「#continue-sequence.previous_sequence」,即可從事件中擷取先前的序列。您可以將實體類型留空。
為這個意圖啟用 Webhook 呼叫,以便為運算單元填充資料。
建立「序列 - 編輯」意圖
這個意圖會聆聽表示服務專員聽錯先前對話內容的語句。設定方式如下:
- 新增輸入背景資訊「收集序列」,這樣系統只會在序列流程中間才呼叫這個意圖。這是由「Sequence」意圖啟用的相同背景資訊。
- 為我們的執行 Webhook 參考,新增輸出背景資訊「editing-sequence」。啟用此意圖後,webhook 會將 Dialogflow 迴圈回主要的「序列」意圖,收集下一個序列。「Sequence」意圖的運算單元填充 webhook 會檢查是否有有效的「editing-sequence」背景資訊,以便向使用者提供「try again」回應。
新增「no」、「that's not right」等訓練詞組
新增「handle-sequence」動作名稱。這與「序列」意圖的動作相同,因此我們可以重複使用相同的 webhook 邏輯。
新增參數「new_sequence」,其值為「#collecting-sequence.previous_sequence」,即可從背景資訊中擷取先前的序列,有效撤銷上次的語音輸入。我們不會在此新增「existing_sequence」參數,以便 webhook 將現有序列覆寫為先前的序列。
為這個意圖啟用 Webhook 呼叫。
建立「序列 - 完成」意圖。
- 新增輸入背景資訊「收集序列」
- 新增輸出背景資訊「collecting-sequence」,並將生命週期設為 0,即可清除背景資訊。清除後,系統就不會再觸發「編輯」和「完成」意圖,因為代理程式已完成收集序列。
新增訓練詞組,例如「that's it」、「all done」等。
新增參數「sequence」,其值為「#collecting-sequence.existing_sequence」,即可從背景資訊中擷取最終序列。
為這個意圖啟用 Webhook 呼叫。
透過 Webhook 連結意圖
您現在已擁有為這些意圖編寫邏輯所需的一切。在下一節中,您將瞭解如何編寫 Webhook 程式碼,以便使用所有這些上下文、動作、參數和事件,完成序列驗證流程。