建立 Webhook

本指南說明如何使用網路鉤子,讓代理程式更具動態性。Cloud Functions 簡單易用,因此可用於代管 Webhook,但您也可以透過許多其他方式代管 Webhook 服務。這個範例也使用 Go 程式設計語言,但您可以使用Cloud Functions 支援的任何語言。 您不需要編輯本指南的程式碼。

範例 Webhook 程式碼會執行下列作業:

  • 從 Webhook 要求讀取參數值。
  • 將參數值寫入 Webhook 回應。
  • 在 Webhook 回應中提供文字回覆。

事前準備

如果您不打算使用 Webhook,可以略過本快速入門導覽課程。

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

  1. 詳閱流程基本概念。
  2. 執行設定步驟。
  3. 執行使用流程建構代理程式快速入門導覽課程中的步驟。以下步驟將繼續處理同一個代理程式。 如果該代理程式已不存在,您可以下載代理程式並還原。

建立 Cloud 函式

您可以使用 Google Cloud 控制台建立 Cloud Functions (參閱說明文件、開啟控制台)。如要為本指南建立函式,請按照下列步驟操作:

  1. 請務必將 Dialogflow CX 服務專員和函式放在同一個專案中。這是 Dialogflow CX 安全存取函式最簡單的方式。 如要選取專案,請前往專案選取器。
  2. 前往 Cloud Functions 總覽頁面。
  3. 按一下「建立函式」,然後設定下列欄位:
    • 環境:第 1 代
    • 函式名稱:shirts-agent-webhook
    • 區域:如果您為代理程式指定區域,請使用相同區域。
    • HTTP 觸發條件類型:HTTP
    • 網址:按一下此處的複製按鈕,然後儲存值。 設定 Webhook 時會需要這個網址。
    • 驗證:需要驗證
    • 必須使用 HTTPS:已勾選
  4. 按一下 [儲存]。
  5. 按一下「下一步」 (您不需要特殊的執行階段、建構作業、連線或安全性設定)。
  6. 設定下列欄位:
    • 執行階段:選取最新的 Go 執行階段。
    • 原始碼:內嵌編輯器
    • 進入點:HandleWebhookRequest
  7. 將程式碼替換為下列內容:

    // Package cxwh contains an example Dialogflow CX webhook
    package cxwh
    
    import (
    	"encoding/json"
    	"fmt"
    	"log"
    	"net/http"
    )
    
    type fulfillmentInfo struct {
    	Tag string `json:"tag"`
    }
    
    type sessionInfo struct {
    	Session    string         `json:"session"`
    	Parameters map[string]any `json:"parameters"`
    }
    
    type text struct {
    	Text []string `json:"text"`
    }
    
    type responseMessage struct {
    	Text text `json:"text"`
    }
    
    type fulfillmentResponse struct {
    	Messages []responseMessage `json:"messages"`
    }
    
    // webhookRequest is used to unmarshal a WebhookRequest JSON object. Note that
    // not all members need to be defined--just those that you need to process.
    // As an alternative, you could use the types provided by the Dialogflow protocol buffers:
    // https://pkg.go.dev/google.golang.org/genproto/googleapis/cloud/dialogflow/cx/v3#WebhookRequest
    type webhookRequest struct {
    	FulfillmentInfo fulfillmentInfo `json:"fulfillmentInfo"`
    	SessionInfo     sessionInfo     `json:"sessionInfo"`
    }
    
    // webhookResponse is used to marshal a WebhookResponse JSON object. Note that
    // not all members need to be defined--just those that you need to process.
    //