Aprende a configurar y utilizar webhooks en ChatBotKit para automatizar flujos de trabajo e integrar diferentes servicios. Esta sección cubre la configuración paso a paso, la selección de eventos y la validación de las solicitudes de webhooks entrantes utilizando el encabezado X-Hub-Signature.

Webhooks are a way for websites or applications to send real-time notifications to other websites or applications. They are a useful tool for automating workflows and integrating different services. When an event occurs on one website or application, a webhook sends a payload of data to a specified URL on another website or application. This allows the receiving website or application to take action based on the data received. In this section, we will explore how to set up and use webhooks within ChatBotKit.

Configuración paso a paso

  1. Navigate to the Webhooks section of ChatBotKit.
  2. Haga clic en el botón "Crear Webhook".
  3. Configure un nombre y una descripción para su webhook.
  4. Configure una solicitud para su webhook. Puede ser una URL o una solicitud HTTP completa que incluya el método, la URL y las cabeceras.
  5. Seleccione los eventos que desea observar con su webhook.
  6. Haz clic en el botón "Guardar" para crear tu webhook.
  7. Una vez creado su webhook, tome nota del Secreto. Este secreto se utiliza para validar las solicitudes web entrantes.

Validación de solicitudes Webhook entrantes

Para garantizar que las solicitudes de webhook entrantes son auténticas, ChatBotKit utiliza un encabezado denominado Firma X-Hub. Esta cabecera contiene un hash del cuerpo de la petición utilizando una clave secreta que se especifica durante la configuración del webhook. Para validar las solicitudes entrantes, debes realizar los siguientes pasos:

  1. Recuperar el valor del Firma X-Hub de la solicitud entrante.
  2. Utilizando la misma clave secreta que especificó durante la configuración del webhook, calcule el hash HMAC SHA-256 del cuerpo de la solicitud (puede extraer el algoritmo del archivo Firma X-Hub encabezamiento).
  3. Compara el hash calculado con el valor de la variable Firma X-Hub . Si coinciden, la solicitud es auténtica.

He aquí un ejemplo de aplicación de este proceso de validación en Node.js:

import crypto from 'crypto' function validateWebhookRequest(secret, body, signature) { const [algorithm, hash] = signature.split('=') const hmac = crypto.createHmac(algorithm, secret) const computedSignature = `${algorithm}=${hmac.update(body).digest('hex')}` return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(computedSignature)) }

En este ejemplo, secreto es la clave secreta que especificó durante la configuración del webhook, cuerpo es el cuerpo de la solicitud entrante, y firma es el valor del Firma X-Hub cabecera. Si la función devuelve verdaderola solicitud es auténtica.

Here's an example implementation of this validation process in JavaScript using the Web Crypto API:

async function validateWebhookRequest(secret, body, signature) { const [algorithm, hash] = signature.split('=') const encodedSecret = new TextEncoder().encode(secret) const key = await window.crypto.subtle.importKey('raw', encodedSecret, 'HMAC', true, ['sign']) const encodedBody = new TextEncoder().encode(body) const computedHash = await window.crypto.subtle.digest(algorithm, encodedBody) const hmac = await window.crypto.subtle.sign('HMAC', key, computedHash) const computedSignature = `${algorithm}=${Array.from(new Uint8Array(hmac)).map(byte => byte.toString(16).padStart(2, '0')).join('')}` return computedSignature === signature }

En este ejemplo, secreto es la clave secreta que especificó durante la configuración del webhook, cuerpo es el cuerpo de la solicitud entrante, y firma es el valor del Firma X-Hub cabecera. Si la función devuelve verdaderola solicitud es auténtica.

Al validar las solicitudes de webhook entrantes de esta manera, puede estar seguro de que las solicitudes provienen de ChatBotKit y no han sido manipuladas en tránsito.