Webhooks
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
- Navigate to the Webhooks section of ChatBotKit.
- Haga clic en el botón "Crear Webhook".
- Configure un nombre y una descripción para su webhook.
- 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.
- Seleccione los eventos que desea observar con su webhook.
- Haz clic en el botón "Guardar" para crear tu webhook.
- 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:
- Recuperar el valor del
Firma X-Hub
de la solicitud entrante. - 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). - 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 verdadero
la 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 verdadero
la 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.