本指南說明如何使用執行要求整合您的代理程式與服務。整合服務可讓您根據使用者表達內容來採取行動,並將動態回應傳回給使用者。
事前準備
如果您不打算使用執行要求,那麼可略過此快速入門導覽課程。
這些步驟會使用 Cloud Functions,並假設您具備基本的 Node.js 知識。如果您想使用自己的伺服器或其他程式語言來建立執行要求,請參閱更詳細的執行要求說明文件。
閱讀本指南之前,請先完成下列工作:
- 詳閱 Dialogflow 基本概念。
- 執行設定步驟。
- 執行建構代理程式快速入門指南中的步驟。以下步驟將繼續處理同一個代理程式。如果您不再擁有該代理程式,可以下載
build-agent-quickstart.zip
並匯入檔案。
內嵌編輯器
Dialogflow 主控台內建程式碼編輯器「內嵌編輯器」,可用來建立執行要求程式碼,並將程式碼部署至 Cloud Functions。Cloud Functions 會產生相關費用,但每月大量呼叫的服務不會產生費用。請注意,您仍必須註冊並提供有效的帳單帳戶。可隨時取消訂閱。
初次啟用內嵌編輯器時,系統會預先填入針對預設意圖的預設處理常式做為 Node.js 執行要求程式碼,供所有代理程式使用。該程式碼還加註了說明,以方便您瞭解如何為開發人員定義的意圖新增處理常式。
內嵌編輯器適用於簡單的執行測試和原型設計。準備好建構正式版應用程式後,請建立Webhook 服務。
以內嵌編輯器啟用及部署執行要求
如要使用內嵌編輯器來啟用及部署預設的執行要求程式碼,請如下操作:
- 按一下左側欄選單中的 [Fulfillment] (執行要求)。
- 將「Inline Editor」(內嵌編輯器) 切換到「Enabled」(啟用)。
- 如果您尚未在設定步驟中啟用帳單功能,系統會提示您立即啟用帳單功能。Cloud Functions 會產生相關費用,但每月大量呼叫的服務不會產生費用。請注意,您仍必須註冊並提供帳單帳戶。您隨時可取消訂閱。
- 按一下表單底部的「Deploy」,等待對話方塊顯示已部署。
對於需要執行要求的每個意圖,您都必須啟用該意圖的執行要求。如要為預設的歡迎意圖啟用執行要求,請如下操作:
- 按一下左側欄選單中的 [Intents] (意圖)。
- 點選 [Default Welcome Intent] (預設的歡迎意圖)。
向下捲動到「Fulfillment」(執行要求) 區段,並開啟「Enable webhook call for this intent」(為這個意圖啟用 Webhook 呼叫)。
按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。
現在,您可在模擬工具中測試您的執行要求。在模擬工具中輸入 Hi
,則模擬工具會回應 Welcome to my agent!
。這個回應就是來自您剛剛部署的執行要求 Webhook。
更具體地說該回應是來自以下程式碼:
function welcome(agent) { agent.add(`Welcome to my agent!`); }
建立自訂執行要求處理常式
以上步驟使用由預設內嵌編輯器程式碼提供的處理常式。如要建立自訂處理常式,請執行下列操作:
- 針對您在先前步驟中建立的
get-agent-name
意圖啟用執行要求。 - 按一下左側欄選單中的 [Fulfillment] (執行要求),然後在內嵌編輯器中檢查程式碼。
尋找以下這行程式碼:
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
onRequest
函式會處理來自 Dialogflow 的所有要求。 在這個函式的主體內,會定義特定的處理常式函式。 當關聯的意圖相符時,系統就會叫用這些處理常式函式。 例如,上一節中使用的函式為function welcome(agent)
。在現有處理常式的下方,為
get-agent-name
意圖新增這個函式:function getAgentNameHandler(agent) { agent.add('From fulfillment: My name is Dialogflow!'); }
在處理常式函式定義的下方,有
intentMap.set()
呼叫。 這些呼叫會依「name」(名稱) 將特定處理常式與意圖建立關聯。 例如,intentMap.set('Default Welcome Intent', welcome)
會將welcome
處理常式與名為Default Welcome Intent
的意圖建立關聯。在現有的
intentMap.set
呼叫下方,為get-agent-name
意圖新增下面這一行:intentMap.set('get-agent-name', getAgentNameHandler);
按一下表單最下方的 [Deploy] (部署)。
在模擬工具中輸入
What's your name?
,新的處理常式會傳送From fulfillment: My name is Dialogflow!
回應。
存取參數值
在先前的步驟中,您建立了 set-language
意圖來識別人類和程式設計語言。該意圖使用 language
和 language-programming
參數。
而在本節裡,您將在執行要求處理常式中存取這些參數的值。
如要新增處理常式,請執行下列操作:
- 啟用
set-language
意圖的執行要求。 - 按一下左側欄選單中的 [Fulfillment] (執行要求)。
與前面的步驟類似,新增以下處理常式和
intentMap
呼叫:function languageHandler(agent) { const language = agent.parameters.language; const programmingLanguage = agent.parameters['language-programming']; if (language) { agent.add(`From fulfillment: Wow! I didn't know you knew ${language}`); } else if (programmingLanguage) { agent.add(`From fulfillment: ${programmingLanguage} is cool`); } else { agent.add(`From fulfillment: What language do you know?`); } }
intentMap.set('set-language', languageHandler);
按一下 [Deploy] (部署)。
此處理常式會擷取參數 language
和 language-programming
,然後將它們存儲在變數中。這個處理常式會從 agent.parameters
屬性擷取這些值,這個屬性是一個物件,包含了使用者在要求中指定的所有參數名稱和值。
如要測試,請在模擬器中輸入 I know how to speak German
。