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

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

事前準備

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

這些步驟會使用 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 意圖,用於識別人類和程式設計語言。該意圖使用 language 和 language-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」(部署)。

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

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