快速入門導覽課程:執行要求

本指南說明如何使用執行要求整合您的代理程式與服務。整合服務可讓您根據使用者表達內容來採取行動,並將動態回應傳回給使用者。

事前準備

如果您不打算使用執行要求,那麼可略過此快速入門導覽課程。

這些步驟會使用 Cloud Functions,並假設您具備基本的 Node.js 知識。如果您想使用自己的伺服器或其他程式語言來建立執行要求,請參閱更詳細的執行要求說明文件

閱讀本指南之前,請先完成下列工作:

  1. 詳閱 Dialogflow 基本概念
  2. 執行設定步驟
  3. 執行建構代理程式快速入門指南中的步驟。以下步驟將繼續處理同一個代理程式。如果您不再擁有該代理程式,可以下載 build-agent-quickstart.zip匯入檔案

內嵌編輯器

Dialogflow 主控台內建程式碼編輯器「內嵌編輯器」,可用來建立執行要求程式碼,並將程式碼部署至 Cloud Functions。Cloud Functions 會產生相關費用,但每月大量呼叫的服務不會產生費用。請注意,您仍必須註冊並提供有效的帳單帳戶。可隨時取消訂閱。

初次啟用內嵌編輯器時,系統會預先填入針對預設意圖的預設處理常式做為 Node.js 執行要求程式碼,供所有代理程式使用。該程式碼還加註了說明,以方便您瞭解如何為開發人員定義的意圖新增處理常式。

內嵌編輯器適用於簡單的執行測試和原型設計。準備好建構正式版應用程式後,請建立Webhook 服務

以內嵌編輯器啟用及部署執行要求

如要使用內嵌編輯器來啟用及部署預設的執行要求程式碼,請如下操作:

  1. 按一下左側欄選單中的 [Fulfillment] (執行要求)
  2. 將「Inline Editor」(內嵌編輯器) 切換到「Enabled」(啟用)
  3. 如果您尚未在設定步驟中啟用帳單功能,系統會提示您立即啟用帳單功能。Cloud Functions 會產生相關費用,但每月大量呼叫的服務不會產生費用。請注意,您仍必須註冊並提供帳單帳戶。您隨時可取消訂閱。
  4. 按一下表單底部的「Deploy」,等待對話方塊顯示已部署。

對於需要執行要求的每個意圖,您都必須啟用該意圖的執行要求。如要為預設的歡迎意圖啟用執行要求,請如下操作:

  1. 按一下左側欄選單中的 [Intents] (意圖)
  2. 點選 [Default Welcome Intent] (預設的歡迎意圖)。
  3. 向下捲動到「Fulfillment」(執行要求) 區段,並開啟「Enable webhook call for this intent」(為這個意圖啟用 Webhook 呼叫)

  4. 按一下「Save」(儲存) 按鈕,然後等候畫面上出現「Agent Training」(代理程式訓練) 對話方塊,即表示訓練已完成。

現在,您可在模擬工具中測試您的執行要求。在模擬工具中輸入 Hi,則模擬工具會回應 Welcome to my agent!。這個回應就是來自您剛剛部署的執行要求 Webhook。 更具體地說該回應是來自以下程式碼:

function welcome(agent) {
  agent.add(`Welcome to my agent!`);
}

建立自訂執行要求處理常式

以上步驟使用由預設內嵌編輯器程式碼提供的處理常式。如要建立自訂處理常式,請執行下列操作:

  1. 針對您在先前步驟中建立的 get-agent-name 意圖啟用執行要求。
  2. 按一下左側欄選單中的 [Fulfillment] (執行要求),然後在內嵌編輯器中檢查程式碼。
  3. 尋找以下這行程式碼:

    exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
    

    onRequest 函式會處理來自 Dialogflow 的所有要求。 在這個函式的主體內,會定義特定的處理常式函式。 當關聯的意圖相符時,系統就會叫用這些處理常式函式。 例如,上一節中使用的函式為 function welcome(agent)

  4. 在現有處理常式的下方,為 get-agent-name 意圖新增這個函式:

    function getAgentNameHandler(agent) {
      agent.add('From fulfillment: My name is Dialogflow!');
    }
    
  5. 在處理常式函式定義的下方,有 intentMap.set() 呼叫。 這些呼叫會依「name」(名稱) 將特定處理常式與意圖建立關聯。 例如,intentMap.set('Default Welcome Intent', welcome) 會將 welcome 處理常式與名為 Default Welcome Intent 的意圖建立關聯。

  6. 在現有的 intentMap.set 呼叫下方,為 get-agent-name 意圖新增下面這一行:

    intentMap.set('get-agent-name', getAgentNameHandler);
    
  7. 按一下表單最下方的 [Deploy] (部署)

  8. 在模擬工具中輸入 What's your name?,新的處理常式會傳送 From fulfillment: My name is Dialogflow! 回應。

存取參數值

在先前的步驟中,您建立了 set-language 意圖來識別人類和程式設計語言。該意圖使用 languagelanguage-programming 參數。 而在本節裡,您將在執行要求處理常式中存取這些參數的值。

如要新增處理常式,請執行下列操作:

  1. 啟用 set-language 意圖的執行要求。
  2. 按一下左側欄選單中的 [Fulfillment] (執行要求)
  3. 與前面的步驟類似,新增以下處理常式和 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);
    
  4. 按一下 [Deploy] (部署)

此處理常式會擷取參數 languagelanguage-programming,然後將它們存儲在變數中。這個處理常式會從 agent.parameters 屬性擷取這些值,這個屬性是一個物件,包含了使用者在要求中指定的所有參數名稱和值。

如要測試,請在模擬器中輸入 I know how to speak German