Webhooks

Los webhooks son servicios que alojan la lógica de tu empresa o llaman a otros servicios. Durante una sesión, los webhooks te permiten usar los datos extraídos por el procesamiento del lenguaje natural de los agentes conversacionales (Dialogflow CX) para generar respuestas dinámicas, validar los datos recogidos o activar acciones en el backend.

Un webhook puede ser un webhook estándar o un webhook flexible. Con un webhook estándar, los campos de solicitud y respuesta los definen los agentes conversacionales (Dialogflow CX). Con un webhook flexible, puedes definir los campos de solicitud y respuesta.

Webhooks estándar

Con los webhooks estándar, se usan mensajes de solicitud y respuesta definidos por Conversational Agents (Dialogflow CX). El mensaje de solicitud proporciona muchos detalles sobre la sesión. Por ejemplo, se incluyen la página activa actual, la intención coincidente reciente, los valores de los parámetros de sesión y las respuestas definidas por el agente.

Solicitud de webhook estándar

Cuando se llama a un cumplimiento con un webhook, los agentes conversacionales (Dialogflow CX) envían una solicitud de webhook HTTPS POST a tu servicio de webhook. El cuerpo de esta solicitud es un WebhookRequest objeto JSON con información sobre la sesión.

Algunas integraciones rellenan el campo WebhookRequest.payload con información adicional. Por ejemplo, la integración de la pasarela de telefonía de Dialogflow CX proporciona el identificador de llamada del usuario final.

Consulta la documentación de referencia de WebhookRequest(V3) o WebhookRequest(V3Beta1) para obtener más información.

Respuesta de webhook estándar

Una vez que tu servicio de webhook recibe una solicitud de webhook, debe enviar una respuesta de webhook. Se aplican las siguientes limitaciones a tu respuesta:

  • La respuesta debe producirse dentro del tiempo de espera que configures al crear el recurso de webhook. De lo contrario, la solicitud se agotará.
  • El tamaño de la respuesta no puede ser superior a 64 KiB.

Consulta la documentación de referencia de WebhookResponse(V3) o WebhookResponse(V3Beta1) para obtener más información.

Configuración de recursos de webhook estándar

A continuación, se describen los ajustes de recursos de webhook para webhooks estándar:

Término Definición
Nombre visible El nombre que se muestra en la consola del webhook.
Tiempo de espera de webhook Cuando los agentes conversacionales (Dialogflow CX) envían una solicitud de webhook a tu servicio de webhook, puede que se agote el tiempo de espera mientras espera una respuesta. Este ajuste controla ese tiempo de espera en segundos. Si se agota el tiempo de espera, Conversational Agents (Dialogflow CX) invoca un evento webhook.error.timeout.
Tipo Selecciona Directorio de servicios si utilizas el directorio de servicios para acceder a la red privada. De lo contrario, selecciona Servicio web genérico.
URL del webhook Proporciona la dirección URL de tu servicio de webhook.
Subtipo Selecciona Estándar.
Webhook específico del entorno Puedes proporcionar webhooks específicos de un entorno.
Autenticación Consulta la sección de autenticación.
Certificado de AC personalizado Se usa para subir certificados de AC personalizados.

Webhooks flexibles

Con los webhooks flexibles, puedes definir el método HTTP de la solicitud, los parámetros de la URL de la solicitud y los campos de los mensajes de solicitud y respuesta. La solicitud solo puede proporcionar valores de parámetros seleccionados y la respuesta solo puede proporcionar valores de anulación de parámetros. Esta limitación es beneficiosa, ya que simplifica la interfaz entre el agente y el webhook. Rara vez es necesario comunicar algo que no sean los valores de los parámetros de sesión entre un agente y un webhook. También simplifica la implementación de tu webhook, ya que los mensajes de solicitud y respuesta solo contienen lo que necesitas, y puedes proporcionar mensajes de webhook únicos para diferentes situaciones.

Solicitud de webhook flexible

Cuando crees el recurso de webhook de tu agente, puedes especificar lo siguiente para las solicitudes de webhook:

  • El método HTTP utilizado para las solicitudes de webhook enviadas a tu servicio de webhook.
  • Valores de los parámetros de sesión que Conversational Agents (Dialogflow CX) debe enviar a tu servicio de webhook mediante la URL.
  • Si eliges POST, PUT o PATCH como método, puedes especificar los valores de los parámetros de sesión que Conversational Agents (Dialogflow CX) debe enviar a tu servicio de webhook a través del cuerpo JSON de la solicitud.

Para enviar valores de parámetros de sesión mediante la URL de solicitud o el cuerpo JSON, utiliza referencias de parámetros como lo harías normalmente. No es necesario que codifique la referencia del parámetro con URL y no debe incluirla entre comillas. En el tiempo de ejecución, Conversational Agents (Dialogflow CX) escapará el valor del parámetro con URL según sea necesario. Una lista o un valor compuesto se proporcionará como JSON.

Cuando se usa una referencia de parámetro en el cuerpo JSON, debe incluir la referencia entre comillas, independientemente del tipo de parámetro. Si el parámetro es un valor escalar, una lista o un valor compuesto numérico, los agentes conversacionales (Dialogflow CX) quitarán las comillas al enviar la solicitud en el tiempo de ejecución para conservar el tipo de datos del parámetro. Los tipos escalares de cadena seguirán entre comillas. Si se hace referencia a un valor escalar numérico, una lista o un valor compuesto dentro de un valor de cadena (por ejemplo, "Este es un número: $session.params.size"), el parámetro se tratará como una cadena ("Este es un número: 3").

Por ejemplo, puede proporcionar los valores de los parámetros de sesión fruit y size a la URL de solicitud de esta forma:

https://your-webhook-service.com/handler?f=$session.params.fruit&s=$session.params.size

Y al cuerpo JSON de la solicitud de esta forma:

{
  "fruitParameter": "$session.params.fruit",
  "sizeParameter": "$session.params.size"
}

Respuesta de webhook flexible

Cuando crees el recurso de webhook de tu agente, puedes especificar los parámetros de sesión que Conversational Agents (Dialogflow CX) debe definir en campos específicos de la respuesta del webhook en el tiempo de ejecución.

Se aplican las siguientes limitaciones a tu respuesta:

  • La respuesta debe producirse dentro del tiempo de espera que configures al crear el recurso de webhook. De lo contrario, la solicitud se agotará.
  • El tamaño de la respuesta no puede ser superior a 64 KiB.

Utiliza el siguiente formato para especificar un campo escalar, de lista o compuesto:

$.fully.qualified.path.to.field

Por ejemplo, supongamos que recibe la siguiente respuesta JSON:

{
  "routes" : [
    {
      "legs" : [
        {
          "distance" : {
            "text" : "2,064 mi",
            "value" : 3321004
          }
        }
      ]
    }
  ]
}

Para especificar el campo "value", usa lo siguiente:

$.routes[0].legs[0].distance.value

Ajustes flexibles de recursos de webhook

A continuación, se describen los ajustes de recursos de webhook para webhooks flexibles:

Término Definición
Nombre visible El nombre que se muestra en la consola del webhook.
Tiempo de espera de webhook Cuando los agentes conversacionales (Dialogflow CX) envían una solicitud de webhook a tu servicio de webhook, puede que se agote el tiempo de espera mientras espera una respuesta. Este ajuste controla ese tiempo de espera en segundos. Si se agota el tiempo de espera, Conversational Agents (Dialogflow CX) invoca un evento webhook.error.timeout.
Tipo Selecciona Directorio de servicios si utilizas el directorio de servicios para acceder a la red privada. De lo contrario, selecciona Servicio web genérico.
URL del webhook Proporciona la dirección URL de tu servicio de webhook, que puede incluir referencias a parámetros de sesión.
Subtipo Elige Flexible.
Método Define el método HTTP de la solicitud de webhook.
Cuerpo de la solicitud Proporciona el cuerpo JSON de la solicitud tal como se ha descrito anteriormente.
Configuración de respuestas Proporciona los parámetros de sesión que se deben asignar a los campos de respuesta como se ha descrito anteriormente.
Webhook específico del entorno Puedes proporcionar webhooks específicos de un entorno.
Autenticación Consulta la sección de autenticación.
Certificado de AC personalizado Se usa para subir certificados de AC personalizados.

Usar una plantilla personalizada predefinida

Dialogflow ofrece plantillas personalizadas predefinidas que puedes usar para integrar webhooks flexibles con Salesforce CRM.

  1. En la pestaña Gestionar, haz clic en Webhooks y, a continuación, en + Crear.

  2. En Subtype (Subtipo), selecciona Flexible (Flexible).

  3. Haga clic en Configurar con plantilla predefinida para habilitar la función.

  4. En el menú desplegable Tipo de integración, selecciona Salesforce.

  5. En el menú desplegable Nombre de la API, selecciona un nombre de API. La plantilla rellena automáticamente el formulario de webhook en función del nombre de la API que elijas.

    1. Puedes configurar manualmente los siguientes campos, si procede, en función de tus parámetros:

      • URL del webhook
      • Método
      • JSON del cuerpo de la solicitud
      • Configuración de respuestas
    2. Los campos de OAuth obligatorios se destacarán en la sección Autenticación.

  6. Haz clic en Guardar para crear el webhook.

Requisitos del servicio webhook

Tu servicio de webhook debe cumplir los siguientes requisitos:

Autenticación

Es importante proteger tu servicio de webhook para que solo tú o tu agente de Conversational Agents (Dialogflow CX) tengáis autorización para enviar solicitudes. Se configura al crear o editar un recurso de webhook. Conversational Agents (Dialogflow CX) admite los siguientes mecanismos de autenticación:

Término Definición
Encabezados de autenticación En la configuración de webhook, puede especificar pares clave-valor de encabezado HTTP opcionales. Si se proporcionan, Conversational Agents (Dialogflow CX) añade estos encabezados HTTP a las solicitudes de webhook. Es habitual proporcionar un solo par con una clave de authorization. Los valores de los encabezados admiten referencias de parámetros de sesión y análisis de funciones del sistema, como en los mensajes de respuesta estáticos. Si usas una credencial estática para el encabezado authorization, te recomendamos que proporciones tu credencial mediante Secret Manager.
Autenticación básica con nombre de usuario y contraseña En la configuración de webhook, puedes especificar valores opcionales de nombre de usuario y contraseña para iniciar sesión. Si se proporciona, Conversational Agents (Dialogflow CX) añade un encabezado HTTP de autorización a las solicitudes de webhook. Este encabezado tiene el siguiente formato: "authorization: Basic <base 64 encoding of the string username:password>". Te recomendamos que proporciones tu nombre de usuario y contraseña mediante Secret Manager.
OAuth de terceros Puede especificar la configuración de OAuth de terceros para que Conversational Agents (Dialogflow CX) intercambie un token de acceso del sistema OAuth y lo añada al encabezado HTTP de autorización. Solo se admite el flujo de credenciales de cliente. Te recomendamos que proporciones tu secreto de cliente mediante Secret Manager.
Tokens de acceso de agentes de servicio Retirado
Cuenta de servicio Puedes usar una cuenta de servicio para la autenticación. Se puede usar para acceder a otras APIs de Google Cloud.
Tokens de ID de agente de servicio Puedes seleccionar Token de ID en Autenticación de agente de servicio para usar tokens de ID de agente de servicio para la autenticación. Se puede usar para acceder a los recursos de Cloud Run.
Autenticación TLS mutuo Consulta la documentación sobre la autenticación TLS mutua.

OAuth de terceros

Los agentes conversacionales (Dialogflow CX) pueden recoger un token de acceso de un proveedor de OAuth de terceros y añadirlo al encabezado HTTP de autorización al hacer sus solicitudes de webhook.

A continuación, se describen los ajustes de recursos para OAuth de terceros:

Término Definición
ID de cliente El ID de cliente que se debe usar al solicitar un token de OAuth.
Secreto de cliente El secreto que se debe usar al solicitar un token de OAuth. Te recomendamos que proporciones tu secreto de cliente mediante Secret Manager.
URL del endpoint de OAuth URL que se debe usar para solicitar un token de OAuth.
Permisos de OAuth Lista separada por comas de los permisos para los que se puede usar el token de OAuth.

Las solicitudes enviadas a la URL del endpoint de OAuth para recibir un token no incluyen los encabezados de solicitud personalizados configurados para la solicitud de webhook. Puedes enviar información personalizada al servidor OAuth como parámetros en la cadena de consulta de la URL del endpoint de OAuth.

Token de ID de agente de servicio

Los agentes conversacionales (Dialogflow CX) pueden generar un token de ID mediante el agente de servicio de agentes conversacionales (Dialogflow CX).

El token se añade al encabezado HTTP de autorización cuando los agentes conversacionales (Dialogflow CX) llaman a un webhook.

Un token de ID se puede usar para acceder a los recursos de Cloud Run después de conceder permisos del rol de invocador a

service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
Si los recursos de Cloud Run están en el mismo proyecto de recursos, no necesitas permisos de IAM adicionales para llamarlos.

La audiencia utilizada para generar el token de ID será la URL completa del webhook, excepto los parámetros de consulta. Si usas Cloud Run, comprueba que esta URL sea compatible con las audiencias de Cloud Run. Por ejemplo, si la URL del webhook es

https://myproject.cloudfunctions.net/my-function/method1?query=value

La siguiente URL debe estar en las audiencias personalizadas.

https://myproject.cloudfunctions.net/my-function/method1

Cualquier webhook también puede validar el token de forma opcional con bibliotecas de cliente de Google o bibliotecas de código abierto como github.com/googleapis/google-auth-library-nodejs.

Cuenta de servicio

Las cuentas de servicio se pueden usar para autenticar solicitudes de webhook en cualquier API de Google que las admita.

Si aún no lo has hecho, crea una cuenta de servicio.

Como las cuentas de servicio son principales, pueden acceder a los recursos de tu proyecto concediéndoles un rol, al igual que harías con cualquier otro principal. La dirección de correo de la cuenta de servicio se usará para generar un token de acceso que se enviará en el encabezado Authorization de la solicitud de webhook.

El usuario que configure la webhook para usar cuentas de servicio debe tener los siguientes permisos:

  • roles/iam.serviceAccountUser

Para que Conversational Agents (Dialogflow CX) genere tokens, el agente de servicio de Dialogflow debe tener los siguientes permisos:

  • roles/iam.serviceAccountTokenCreator

La cuenta de servicio también debe tener permisos para acceder al servicio que aloja el webhook.

Autenticación de Secret Manager

Si usas encabezados de autenticación, autenticación básica con nombre de usuario y contraseña, o OAuth de terceros, puedes almacenar las credenciales como secretos mediante Secret Manager. Estos son los pasos necesarios para autenticar tu webhook mediante secretos:

  1. Crea tu secreto si aún no tienes uno.
  2. Asigna el rol Permiso para acceder a los recursos de Secret Manager (roles/secretmanager.secretAccessor) al agente de servicio de Dialogflow en el nuevo secreto.
  3. Copia tus credenciales en el portapapeles.
  4. Añade una nueva versión del secreto al secreto. Pega tu credencial como valor del secreto.
    • Si usas encabezados de autenticación, introduce Bearer <YOUR_CREDENTIAL>.
    • Si usas la autenticación básica con nombre de usuario y contraseña, introduce <YOUR_USERNAME>:<YOUR_PASSWORD>.
    • Omite cualquier carácter de nueva línea al final.
  5. Copia el nombre de la versión del secreto que acabas de añadir. El formato del nombre es projects/{project_id}/secrets/{secret_id}/versions/{version_id}".
  6. Abre la pantalla de edición del webhook y haz lo siguiente:
    • Si usas encabezados de autenticación, crea un encabezado de solicitud de versión de secreto. Escribe "Authorization" en el campo Clave y pega el nombre de la versión del secreto en el cuadro de entrada Versión del secreto.
    • Si usas la autenticación básica con nombre de usuario y contraseña, haz clic en Versión del secreto en Autenticación básica y pega el nombre de la versión del secreto en el cuadro de entrada Versión del secreto.
    • Si usas OAuth de terceros, haz clic en Versión del secreto en OAuth de terceros y pega el nombre de la versión del secreto en el cuadro de entrada Versión del secreto.
  7. Haz clic en Guardar.

Verificación de certificados HTTPS

De forma predeterminada, Conversational Agents (Dialogflow CX) usa el almacén de confianza predeterminado de Google para verificar los certificados HTTPS. Si tienes previsto usar certificados que no reconoce el almacén de confianza predeterminado de Google para tu servidor HTTPS (por ejemplo, certificados autofirmados o certificados raíz personalizados), consulta Certificados de AC personalizados.

Webhooks específicos del entorno

Si utiliza entornos para aislar los sistemas de producción de los de desarrollo (opción recomendada), puede configurar sus webhooks para que sean específicos de cada entorno. Por cada recurso de webhook que definas, puedes proporcionar una URL y una configuración de autenticación únicas para cada entorno que hayas definido para el agente.

De esta forma, puedes desarrollar y probar de forma segura las actualizaciones del código de tu webhook antes de implementarlas en producción.

Crear o editar recursos de webhook

Una vez que tengas un servicio de webhook en funcionamiento, debes crear un recurso de webhook en tu agente que tenga información de conectividad y autenticación. Después de crear un recurso de webhook, también puedes editar su configuración en cualquier momento.

Para crear o editar un recurso de webhook, sigue estos pasos:

Consola

  1. Abre la consola de Dialogflow CX.
  2. Elige tu proyecto de Google Cloud.
  3. Selecciona tu agente.
  4. Selecciona la pestaña Gestionar.
  5. Haz clic en Webhooks.
  6. Haz clic en Crear o en un recurso de webhook de la lista para editarlo.
  7. Introduzca la configuración de recursos de webhook estándar o la configuración de recursos de webhook flexible.
  8. Haz clic en Guardar.

API

Para crear un recurso de webhook, consulta el método create del tipo Webhook. Para editar un recurso de webhook (excepto los ajustes específicos del entorno), consulta el método patch o update del tipo Webhook.

Selecciona un protocolo y una versión para la referencia de Webhook:

Protocolo V3 V3beta1
REST Recurso de webhook Recurso de webhook
RPC Interfaz de webhook Interfaz de webhook
C++ WebhooksClient No disponible
C# WebhooksClient No disponible
Go WebhooksClient No disponible
Java WebhooksClient WebhooksClient
Node.js WebhooksClient WebhooksClient
PHP No disponible No disponible
Python WebhooksClient WebhooksClient
Ruby No disponible No disponible

Para editar la configuración específica del entorno de un webhook, consulta el método patch o update del tipo Environment.

Selecciona un protocolo y una versión para la referencia del entorno:

Protocolo V3 V3beta1
REST Recurso de entorno Recurso de entorno
RPC Interfaz de entorno Interfaz de entorno
C++ EnvironmentsClient No disponible
C# EnvironmentsClient No disponible
Go EnvironmentsClient No disponible
Java EnvironmentsClient EnvironmentsClient
Node.js EnvironmentsClient EnvironmentsClient
PHP No disponible No disponible
Python EnvironmentsClient EnvironmentsClient
Ruby No disponible No disponible

Errores de webhook

Si tu servicio de webhook detecta un error al gestionar una solicitud de webhook, tu código de webhook debe devolver uno de los siguientes códigos de estado HTTP:

  • 400: solicitud incorrecta
  • 401 Sin autorización
  • 403 Forbidden
  • 404 no encontrado
  • 500 Error del servidor
  • 503 Servicio no disponible

En cualquiera de las siguientes situaciones de error, Conversational Agents (Dialogflow CX) invoca un error o un tiempo de espera de webhook evento integrado y continúa procesando la información como de costumbre:

  • Se ha superado el tiempo de espera de la respuesta.
  • Se ha recibido un código de estado de error.
  • La respuesta no es válida.
  • El servicio de webhook no está disponible.

Además, si la llamada al servicio de webhook se ha activado mediante una llamada a la API Detect Intent, el campo queryResult.webhookStatuses de la respuesta de Detect Intent contiene la información del estado del webhook.

Reintentos automáticos

Los agentes conversacionales (Dialogflow CX) incluyen mecanismos internos que vuelven a intentar automáticamente ciertas acciones cuando se producen errores de webhook para mejorar la solidez. Solo se reintentan los errores no terminales (por ejemplo, los errores de tiempo de espera o de conexión).

Para reducir la probabilidad de que se dupliquen las llamadas, sigue estos pasos:

  • Define umbrales de tiempo de espera de webhook más largos.
  • Admite la idempotencia en la lógica de webhook o elimina los duplicados.

Usar Cloud Run

Los agentes conversacionales (Dialogflow CX) se integran con Cloud Run, por lo que puedes crear un webhook seguro y sin servidor. Si creas un recurso de Cloud Run que se encuentra en el mismo proyecto que tu agente, selecciona Autenticación del agente de servicio -> Token de ID en la configuración de autenticación para que tu agente pueda llamar a tu webhook de forma segura.

Sin embargo, hay dos situaciones en las que debes configurar manualmente esta integración:

  1. La cuenta de servicio del agente de servicio de agentes conversacionales (Dialogflow CX) con la siguiente dirección debe existir en tu proyecto de agente:
    service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com
    Esta cuenta de servicio especial y la clave asociada se crean automáticamente cuando creas el primer agente de un proyecto. Si tu agente se creó antes del 1 de noviembre del 2020, puedes activar la creación de esta cuenta de servicio especial:
    1. Crea un agente para el proyecto.
    2. Ejecuta el comando siguiente:
      gcloud beta services identity create --service=dialogflow.googleapis.com --project=agent-project-id
  2. Si tu función de webhook se encuentra en un proyecto distinto al del agente, debes asignar el rol de IAM de invocador de Cloud Run o invocador de Cloud Functions a la cuenta de servicio Agente de servicio de agentes conversacionales (Dialogflow CX) en el proyecto de tu recurso de Cloud Run.
  3. Selecciona Autenticación de agente de servicio -> Token de ID en la sección de configuración de autenticación.

Usar webhooks en contenedores y el framework ezcx de Go

Si quieres implementar un webhook en un contenedor con Go, consulta el framework ezcx de Go. Este framework puede simplificar muchos de los pasos necesarios para crear un webhook.

Usar Cloud Run con tráfico solo interno

Los recursos de Cloud Run configurados para aceptar tráfico interno de redes de VPC del mismo proyecto o del mismo perímetro de Controles de Servicio de VPC se pueden usar como webhook siempre que el agente esté en el mismo proyecto o en el mismo perímetro de Controles de Servicio de VPC.

Usar el directorio de servicios para acceder a redes privadas

Los agentes conversacionales (Dialogflow CX) se integran con el acceso a la red privada de Service Directory, por lo que pueden conectarse a destinos de webhook dentro de tu red de VPC. De esta forma, el tráfico se mantiene en la red de Google Cloud y se aplican IAM y Controles de Servicio de VPC.

Para configurar un webhook que se dirija a una red privada, sigue estos pasos:

  1. Sigue las instrucciones de Configuración de red privada de Service Directory para configurar tu red de VPC y tu endpoint de Service Directory.

  2. La cuenta de servicio del agente de servicio de agentes conversacionales (Dialogflow CX) con la siguiente dirección debe existir en tu proyecto de agente:

    service-agent-project-number@gcp-sa-dialogflow.iam.gserviceaccount.com

    Asigna los siguientes roles a la cuenta de servicio Agente de servicio de agentes conversacionales (Dialogflow CX) en el proyecto en el que se encuentra tu Service Directory:

    • servicedirectory.viewer
    • servicedirectory.pscAuthorizedService

    Además, si tu Service Directory está en un proyecto diferente al de tu agente de Dialogflow CX, también debes conceder el rol servicedirectory.viewer a la cuenta de agente de servicio de Conversational Agents (Dialogflow CX) en el proyecto que aloja tu agente de Dialogflow CX.

  3. Proporciona el servicio de directorio de servicios junto con la URL y la información de autenticación opcional al crear el webhook.

    Consola

    Captura de pantalla de webhook de Directorio de servicios.

    API

    Consulta el campo serviceDirectory para el tipo Webhook.

    Selecciona un protocolo y una versión para la referencia de Webhook:

    Protocolo V3 V3beta1
    REST Recurso de webhook Recurso de webhook
    RPC Interfaz de webhook Interfaz de webhook
    C++ WebhooksClient No disponible
    C# WebhooksClient No disponible
    Go WebhooksClient No disponible
    Java WebhooksClient WebhooksClient
    Node.js WebhooksClient WebhooksClient
    PHP No disponible No disponible
    Python WebhooksClient WebhooksClient
    Ruby No disponible No disponible

Para solucionar problemas, puedes configurar una comprobación de tiempo de actividad privada para verificar que tu Service Directory esté configurado correctamente.

Ejemplos y solución de problemas

Consulta la guía práctica sobre webhooks.