En esta guía, se muestra cómo usar un webhook, para que tu agente sea más dinámico. Cloud Functions se usan para alojar el webhook debido a su simplicidad, pero hay muchas otras formas de alojar un servicio de webhook. En el ejemplo, también se usa el lenguaje de programación Go, pero puedes usar cualquier lenguaje compatible con Cloud Functions. No necesitarás editar el código para esta guía.
El código de webhook de ejemplo hace lo siguiente:
- Lee los valores de los parámetros de la solicitud de webhook.
- Escribe un valor de parámetro en la respuesta del webhook.
- Proporciona una respuesta de texto en la respuesta del webhook.
Antes de comenzar
Si no planeas usar webhooks, puedes omitir esta guía de inicio rápido.
Debes hacer lo siguiente antes de leer esta guía:
- Lee los conceptos básicos del flujo.
- Realiza los pasos de configuración.
- Realiza los pasos de la guía de inicio rápido Compila un agente con flujos. Los siguientes pasos continúan el trabajo en el mismo agente. Si ya no tienes ese agente, puedes descargar el agente y restablecerlo.
Crea una Cloud Function
Las Cloud Functions se pueden crear con Google Cloud Console (consulta la documentación, abre la consola). Para crear una función para esta guía, haz lo siguiente:
- Es importante que tu agente de Dialogflow CX y la función estén en el mismo proyecto. Esta es la forma más sencilla para que Dialogflow CX tenga acceso seguro a tu función. Para seleccionar tu proyecto, ve al selector de proyectos.
- Ve a la página de descripción general de Cloud Functions.
- Haz clic en Crear función y configura los siguientes campos:
- Entorno: 1ª gen.
- Nombre de la función: shirts-agent-webhook
- Región: Si especificaste una región para tu agente, usa la misma.
- Tipo de activador HTTP: HTTP
- URL: Haz clic en el botón de copia aquí y guarda el valor. Necesitarás esta URL cuando configures el webhook.
- Autenticación: Requiere autenticación
- Requiere HTTPS: marcada
- Haz clic en Guardar.
- Haz clic en Siguiente (no necesitas configuraciones especiales de entorno de ejecución, compilación, conexiones ni seguridad).
- Configura los siguientes campos:
- Entorno de ejecución: Selecciona el entorno de ejecución de Go más reciente.
- Código fuente: Editor directo
- Punto de entrada: HandleWebhookRequest
Reemplaza el código por lo siguiente:
// 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 } }
Haz clic en Implementar.
Espera hasta que el indicador de estado muestre que la función se implementó correctamente. Mientras esperas, examina el código que acabas de implementar. Los comentarios del código describen detalles importantes.
Crea el webhook
Ahora que el webhook existe como una Cloud Function, lo asociarás con tu agente. Para crear el webhook de tu agente, haz lo siguiente:
- Abre la consola de Dialogflow CX.
- Elige tu proyecto de Google Cloud.
- Selecciona el agente.
- Selecciona la pestaña Administrar.
- Haz clic en Webhooks.
- Haz clic en Crear.
- Completa los siguientes campos:
- Nombre visible: shirts-agent-webhook
- URL de webhook: Proporciona la URL de webhook que guardaste cuando creaste la función.
- Subtipo: Estándar.
- Todos los demás campos usan valores predeterminados.
- Haz clic en Guardar.
Usa el webhook
Ahora que el webhook está disponible para el agente, lo usarás en la entrega. La página de confirmación del pedido tiene una entrega de entrada, que actualmente tiene una respuesta de texto estática. Para actualizar la entrega para usar tu webhook, haz lo siguiente:
- Selecciona la pestaña Compilar.
- Haz clic en la página de confirmación del pedido para expandir la página en el gráfico del compilador de agentes.
- Haz clic en el campo Entrega de entrada de la página para abrir el panel de entrega.
- Borra la respuesta de texto existente en el encabezado El agente dice. Cuando colocas el cursor sobre el texto, aparece el botón de eliminación delete.
- Haz clic en Habilitar webhook.
- Selecciona la opción
shirts-agent-webhooken el menú desplegable Webhook. - Ingresa
confirmen el campo Etiqueta. - Haz clic en Guardar.
- Cierra el panel de entrega.

El código de webhook implementado envía una respuesta
que crea un
parámetro
llamado cancel-period.
Actualiza el agente para hacer referencia a este parámetro en la respuesta final del agente para la misma página de confirmación del pedido:
- Haz clic en la ruta de condición
que se muestra con una condición
truepara abrir el panel de ruta. - Desplázate hacia abajo hasta la sección Entrega del panel de ruta y agrega la siguiente respuesta de texto en el encabezado El agente dice :
You can cancel your order within $session.params.cancel-period days. Goodbye. - Haz clic en Guardar.
- Cierra el panel de ruta.

Prueba el agente en el simulador
Tu agente y webhook están listos para probarse con el simulador:
- Haz clic en Test agent.
- Ingresa
I want to buy a large red shirty presiona Intro.
Como proporcionaste un tamaño y un color, le diste al agente todo lo que necesita para crear un pedido de camisa, por lo que pasa directamente a la página de confirmación del pedido.

A continuación, se describen las respuestas del agente:
| Respuesta | Explicación |
|---|---|
| Okay, let's start a new order. | Cuando se activó la página de pedido nuevo, se llamó a la entrega de entrada. La respuesta se activó desde esta entrega. |
| You have selected a large, red shirt. | Cuando se proporcionan todos los parámetros de formulario para la página de pedido nuevo, se llama a la ruta de condición que verifica la finalización del formulario. La respuesta se activó desde la entrega de esta ruta. Esta ruta también pasa a la página de confirmación del pedido. |
| You can pick up your order for a large red shirt in 5 days. | La entrega de entrada para la página de confirmación del pedido llama al webhook. Consulta la función confirm en el código de webhook. Esa función crea esta respuesta de texto y usa los parámetros proporcionados en la solicitud de webhook. |
| You can cancel your order within 2 days. Goodbye. | La página de confirmación del pedido tiene una ruta de condición con una condición que siempre es verdadera. Esta respuesta se activa mediante la entrega de esa ruta. Ten en cuenta que la respuesta usa el parámetro establecido por el webhook en la respuesta del webhook. |