Recevoir et vérifier les événements
Les webhooks transmettent l’état réel des messages sans polling. Ce guide décrit la création d’un endpoint, la signature et le payload livré par la plateforme avec le SDK JavaScript officiel.
Règles de base
Les callbacks utilisent une signature HMAC-SHA256 sur timestamp.payload. Le timestamp et la signature arrivent dans les headers HTTP.
- →Retourner un 2xx rapidement quand le callback est traité.
- →Traiter
x-cutuma-eventcomme la source de vérité pour le type d’événement. - →Vérifier
x-cutuma-signatureavec le secretsigningSecretrenvoyé à la création. - →Enregistrer les
message.deliveredetmessage.faileddans votre système métier.
Endpoint recommandé
client.createWebhookEndpoint(...)
import { CutumaClient } from './cutuma-client.mjs';
const client = new CutumaClient({
baseUrl: process.env.CUTUMA_BASE_URL ?? 'https://cutuma.com/api/v1',
apiKey: process.env.CUTUMA_API_KEY ?? '',
});
const response = await client.createWebhookEndpoint({
url: 'https://cutuma.com/webhooks/cutuma',
subscribed_events: ['message.delivered', 'message.failed'],
});
console.log(response.data.signingSecret);
message.queued
message.sent
message.delivered
message.failed
Headers de callback
La plateforme livre les callbacks avec les headers suivants. Le x-cutuma-delivery-id vous aide à faire de l’idempotence côté receveur.
content-type
application/json
user-agent
Cutuma-Webhooks/1.0
x-cutuma-delivery-id
delivery UUID
x-cutuma-event
message.delivered
x-cutuma-timestamp
2026-04-09T10:15:30.000Z
x-cutuma-signature
v1=<hmac-sha256-hex>
Payload livré
Le corps du callback contient l’organisation et l’objet message normalisé.
{
"organization_id": "2f0dd8f4-7b1c-4f38-b4c1-f4bc8aa6e8f4",
"message": {
"id": "a2f7e5cb-bbe9-4d7d-bd17-80d1d7a5e5af",
"campaign_id": null,
"recipient_phone": "+243810000000",
"sender_name": "CUTUMA",
"status": "delivered",
"provider_message_id": "provider-msg-123",
"source_surface": "api",
"error_code": null,
"error_message": null,
"sent_at": "2026-04-09T10:11:11.000Z",
"failed_at": null,
"delivered_at": "2026-04-09T10:13:45.000Z"
}
}
Vérification avec le SDK
Le worker de la plateforme retry les callbacks qui ne retournent pas de 2xx. Vérifiez d’abord la signature, puis dédupliquez et persistez l’événement.
import {
assertWebhookSignature,
extractCutumaWebhookHeaders,
} from './cutuma-client.mjs';
function handleWebhook(rawBody, headers) {
const webhookHeaders = extractCutumaWebhookHeaders(headers);
if (!webhookHeaders.timestamp || !webhookHeaders.signature) {
throw new Error('Missing CUTUMA webhook headers.');
}
assertWebhookSignature({
signingSecret: process.env.CUTUMA_WEBHOOK_SECRET ?? '',
timestamp: webhookHeaders.timestamp,
signature: webhookHeaders.signature,
payload: rawBody,
});
return JSON.parse(rawBody);
}
- •Acceptez et dédupliquez par
x-cutuma-delivery-id. - •Répondez en 2xx une fois le callback enregistré dans votre système.
- •Utilisez le secret retourné à la création pour vérifier la signature.
- •Traitez
message.deliveredetmessage.failedcomme les états métier principaux.
Prochaine étape
SDK JavaScript, exemples curl et référence complète.