In dieser Anleitung erfahren Sie, wie Sie einen Webhook, damit Ihr Agent dynamischer wird. Cloud Functions werden aufgrund ihrer Einfachheit zum Hosten des Webhooks verwendet. Es gibt jedoch viele andere Möglichkeiten, einen Webhook-Dienst zu hosten. Im Beispiel wird auch die Programmiersprache Go verwendet, Sie können jedoch jede von Cloud Functions unterstützte Sprache verwenden. Sie müssen den Code für diese Anleitung nicht bearbeiten.
Der Beispielcode für den Webhook führt folgende Schritte aus:
- Liest Parameterwerte aus der Webhook-Anfrage.
- Schreibt einen Parameterwert in die Webhook-Antwort.
- Gibt eine Textantwort in der Webhook-Antwort zurück.
Hinweis
Wenn Sie keine Webhooks verwenden möchten, können Sie diese Kurzanleitung überspringen.
Bevor Sie diese Anleitung lesen, sollten Sie mit Folgendem vertraut sein:
- Grundlagen zu Abläufen
- Führen Sie Einrichtungsschritte aus.
- Die Schritte in der Kurzanleitung Agent mit Abläufen erstellen ausführen. In den folgenden Schritten wird derselbe Agent weiterverwendet. Wenn Sie diesen Agent nicht mehr haben, können Sie ihn herunterladen und wiederherstellen.
Cloud Functions-Funktion erstellen
Cloud Functions-Funktionen können mit der Google Cloud Console erstellt werden (Dokumentation ansehen, Konsole öffnen). So erstellen Sie eine Funktion für diese Anleitung:
- Ihr Dialogflow CX-Agent und die Funktion müssen sich im selben Projekt befinden. Dies ist die einfachste Möglichkeit, Dialogflow CX sicheren Zugriff auf Ihre Funktion zu gewähren. Wählen Sie Ihr Projekt in der Projektauswahl aus.
- Zur Übersichtsseite zu Cloud Functions
- Klicken Sie auf Funktion erstellen und legen Sie die folgenden Felder fest:
- Umgebung: 1. Generation
- Funktionsname: shirts-agent-webhook
- Region: Wenn Sie eine Region für Ihren Agent angegeben haben, verwenden Sie dieselbe Region.
- HTTP-Triggertyp: HTTP
- URL: Klicken Sie hier auf die Schaltfläche „Kopieren“ und speichern Sie den Wert. Sie benötigen diese URL, wenn Sie den Webhook konfigurieren.
- Authentifizierung: Authentifizierung erforderlich
- HTTPS erforderlich: aktiviert
- Klicken Sie auf Speichern.
- Klicken Sie auf Weiter (Sie benötigen keine speziellen Laufzeit-, Build-, Verbindungs- oder Sicherheitseinstellungen).
- Legen Sie die folgenden Felder fest:
- Laufzeit: Wählen Sie die neueste Go-Laufzeit aus.
- Quellcode: Inline-Editor
- Einstiegspunkt: HandleWebhookRequest
Ersetzen Sie den Code durch Folgendes:
// 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. // 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#WebhookResponse type webhookResponse struct { FulfillmentResponse fulfillmentResponse `json:"fulfillmentResponse"` SessionInfo sessionInfo `json:"sessionInfo"` } // confirm handles webhook calls using the "confirm" tag. func confirm(request webhookRequest) (webhookResponse, error) { // Create a text message that utilizes the "size" and "color" // parameters provided by the end-user. // This text message is used in the response below. t := fmt.Sprintf("You can pick up your order for a %s %s shirt in 5 days.", request.SessionInfo.Parameters["size"], request.SessionInfo.Parameters["color"]) // Create session parameters that are populated in the response. // The "cancel-period" parameter is referenced by the agent. // This example hard codes the value 2, but a real system // might look up this value in a database. p := map[string]any{"cancel-period": "2"} // Build and return the response. response := webhookResponse{ FulfillmentResponse: fulfillmentResponse{ Messages: []responseMessage{ { Text: text{ Text: []string{t}, }, }, }, }, SessionInfo: sessionInfo{ Parameters: p, }, } return response, nil } // handleError handles internal errors. func handleError(w http.ResponseWriter, err error) { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "ERROR: %v", err) } // HandleWebhookRequest handles WebhookRequest and sends the WebhookResponse. func HandleWebhookRequest(w http.ResponseWriter, r *http.Request) { var request webhookRequest var response webhookResponse var err error // Read input JSON if err = json.NewDecoder(r.Body).Decode(&request); err != nil { handleError(w, err) return } log.Printf("Request: %+v", request) // Get the tag from the request, and call the corresponding // function that handles that tag. // This example only has one possible tag, // but most agents would have many. switch tag := request.FulfillmentInfo.Tag; tag { case "confirm": response, err = confirm(request) default: err = fmt.Errorf("Unknown tag: %s", tag) } if err != nil { handleError(w, err) return } log.Printf("Response: %+v", response) // Send response if err = json.NewEncoder(w).Encode(&response); err != nil { handleError(w, err) return } }
Klicken Sie auf Bereitstellen.
Warten Sie, bis die Statusanzeige angibt, dass die Funktion erfolgreich bereitgestellt wurde. Sehen Sie sich in der Zwischenzeit den Code an, den Sie gerade bereitgestellt haben. In den Codekommentaren werden wichtige Details beschrieben.
Webhook erstellen
Nachdem der Webhook als Cloud Functions-Funktion vorhanden ist, verknüpfen Sie ihn mit Ihrem Agent. So erstellen Sie den Webhook für Ihren Agent:
- Öffnen Sie die Dialogflow CX Console.
- Wählen Sie Ihr Google Cloud-Projekt aus.
- Wählen Sie den Agent aus.
- Wählen Sie den Tab Verwalten.
- Klicken Sie auf Webhooks.
- Klicken Sie auf Erstellen.
- Füllen Sie die folgenden Felder aus:
- Anzeigename: shirts-agent-webhook
- Webhook-URL: Geben Sie die Webhook-URL an, die Sie gespeichert haben, als Sie die Funktion erstellt haben.
- Untertyp: Standard.
- Für alle anderen Felder werden die Standardwerte verwendet.
- Klicken Sie auf Speichern.
Webhook verwenden
Nachdem der Webhook für den Agent verfügbar ist, verwenden Sie ihn in der Auftragsausführung. Die Seite Bestellbestätigung enthält eine Eingabeauftragsausführung mit einer statischen Textantwort. So aktualisieren Sie die Auftragsausführung, um Ihren Webhook zu verwenden:
- Wählen Sie den Tab Erstellen.
- Klicken Sie auf die Seite Bestellbestätigung , um sie im Diagramm des Agent-Builders zu maximieren.
- Klicken Sie auf der Seite auf das Feld Eingabeauftragsausführung , um das Feld für die Auftragsausführung zu öffnen.
- Löschen Sie die vorhandene Textantwort unter der Überschrift Antwort des KI-Agenten. Wenn Sie den Mauszeiger auf den Text bewegen, wird die Schaltfläche „Löschen“ delete angezeigt.
- Klicken Sie auf Webhook aktivieren.
- Wählen Sie im Drop-down-Menü Webhook die Option
shirts-agent-webhookaus. - Geben Sie im Feld Tag
confirmein. - Klicken Sie auf Speichern.
- Schließen Sie das Feld für die Auftragsausführung.

Der bereitgestellte Webhook-Code sendet eine Antwort
mit der ein
Parameter
namens cancel-perioderstellt wird.
Aktualisieren Sie den Agent, um auf diesen Parameter in der endgültigen Antwort des Agent für dieselbe Seite Bestellbestätigung zu verweisen:
- Klicken Sie auf die Bedingung
route
mit der
trueBedingung, um das Routenfeld zu öffnen. - Scrollen Sie im Routenfeld nach unten zum Abschnitt Auftragsausführung und fügen Sie unter der Überschrift Antwort des KI-Agenten die folgende Textantwort hinzu:
You can cancel your order within $session.params.cancel-period days. Goodbye. - Klicken Sie auf Speichern.
- Schließen Sie das Routenfeld.

Agent im Simulator testen
Ihr Agent und Webhook können jetzt mit dem Simulator getestet werden:
- Klicken Sie auf Agent testen.
- Geben Sie
I want to buy a large red shirtein und drücken Sie die Eingabetaste.
Da Sie sowohl eine Größe als auch eine Farbe angegeben haben, hat der Agent alle Informationen, die er zum Erstellen einer Bestellung für ein T-Shirt benötigt. Er wechselt daher direkt zur Seite Bestellbestätigung.

Im Folgenden werden die Antworten des Agent beschrieben:
| Antwort | Erklärung |
|---|---|
| Okay, beginnen wir mit einer neuen Bestellung. | Als die Seite Neue Bestellung aktiv wurde, wurde die Eingabeauftragsausführung aufgerufen. Die Antwort wurde durch diese Auftragsausführung ausgelöst. |
| Sie haben ein großes rotes T-Shirt ausgewählt. | Wenn alle Formularparameter für die Seite Neue Bestellung angegeben wurden, wird die Bedingungsroute aufgerufen, die auf die Ausführung des Formulars prüft. Die Antwort wurde durch die Auftragsausführung für diese Route ausgelöst. Diese Route wechselt auch zur Seite Bestellbestätigung. |
| Sie können Ihre Bestellung für ein großes rotes T-Shirt in 5 Tagen abholen. | Die Eingabeauftragsausführung für die Seite Bestellbestätigung ruft den Webhook auf. Sehen Sie sich die Funktion confirm im Webhook-Code an. Diese Funktion erstellt diese Textantwort und verwendet die in der Webhook-Anfrage angegebenen Parameter. |
| Sie können Ihre Bestellung innerhalb von 2 Tagen stornieren. Auf Wiedersehen. | Die Seite Bestellbestätigung hat eine Bedingungsroute mit einer Bedingung, die immer wahr ist. Diese Antwort wird durch die Auftragsausführung für diese Route ausgelöst. Beachten Sie, dass in der Antwort der Parameter verwendet wird, der vom Webhook in der Webhook-Antwort festgelegt wurde. |