> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jelou.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Firma HMAC-SHA256

> Verificación y generación de firmas HMAC-SHA256 para la comunicación bidireccional

El header `X-Jelou-Signature` con formato `sha256=HMAC_HEX_DIGEST` se utiliza en **ambas direcciones**:

* **Verificación:** Cuando recibe eventos de Jelou en su webhook, debe verificar la firma para garantizar la integridad.
* **Generación:** Cuando envía mensajes al webhook de Jelou (`incoming_message`), debe generar y enviar la firma.

***

## Verificación de eventos recibidos de Jelou

Todos los eventos enviados por Jelou al webhook incluyen el header `X-Jelou-Signature`. Se recomienda **siempre verificar** la firma.

```javascript theme={null}
const crypto = require("crypto");

function verifySignature(payload, signature, signingSecret) {
    const expectedSignature = crypto
        .createHmac("sha256", signingSecret)
        .update(JSON.stringify(payload))
        .digest("hex");

    const expected = `sha256=${expectedSignature}`;

    return (
        signature.length === expected.length &&
        crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))
    );
}
```

***

## Generación de firma para enviar a Jelou

Cuando tu sistema envía eventos de mensajes a Jelou, **debes incluir** el header `X-Jelou-Signature` con la firma del payload **en cada request**.

```javascript theme={null}
const crypto = require("crypto");

const payload = { /* su payload aquí */ };
const signingSecret = "su_signing_secret";

const body = JSON.stringify(payload);
const signature = crypto
    .createHmac("sha256", signingSecret)
    .update(body)
    .digest("hex");
```
