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

# Bonnes pratiques

> Recommandations pour construire des consommateurs de webhooks fiables

## Repondre rapidement

Retournez un code de statut `200` des que vous recevez le webhook. Effectuez votre traitement de maniere asynchrone -- ecrivez l'evenement dans une file d'attente ou une base de donnees, puis traitez-le en arriere-plan.

Si votre endpoint met trop de temps a repondre (plus de 20 secondes), la livraison est marquee comme echouee et une nouvelle tentative est effectuee.

## Implementer l'idempotence

Allo garantit une livraison **at-least-once** (au moins une fois), ce qui signifie que votre endpoint peut recevoir le meme evenement plusieurs fois. Pour eviter les traitements en double :

1. Extrayez l'en-tete `webhook-id` de la requete -- il identifie de maniere unique chaque livraison.
2. Verifiez si vous avez deja traite cet identifiant (par ex., recherche dans votre base de donnees).
3. S'il est nouveau, traitez l'evenement et stockez l'identifiant.
4. S'il s'agit d'un doublon, retournez `200` et ignorez le traitement.

```javascript theme={null}
app.post("/webhooks/allo", async (req, res) => {
  const webhookId = req.headers["webhook-id"];

  // Check if already processed
  if (await db.webhookProcessed(webhookId)) {
    return res.sendStatus(200);
  }

  // Mark as processed before doing work
  await db.markWebhookProcessed(webhookId);

  // Process the event asynchronously
  queue.add("process-webhook", req.body);

  res.sendStatus(200);
});
```

## Utiliser HTTPS

L'URL de votre webhook doit utiliser HTTPS. Les certificats auto-signes ne sont pas acceptes.

## Verifier les signatures

[Verifiez toujours les signatures webhook](/fr/v2/api-reference/webhooks/verifying-signatures) en production pour vous assurer que les requetes proviennent bien d'Allo.

## Gerer la livraison dans le desordre

Les evenements peuvent arriver dans un ordre different de celui dans lequel ils se sont produits. Par exemple, `tag.added` pourrait arriver avant `call.completed` pour le meme appel.

Ne supposez pas que les evenements arrivent dans l'ordre chronologique. Utilisez le champ `timestamp` dans le payload pour determiner quand l'evenement s'est reellement produit.

## Surveiller vos endpoints

Verifiez la sante de vos webhooks depuis [Parametres > Webhooks](https://web.withallo.com/settings/webhooks). Vous pouvez consulter les statistiques de livraison et inspecter les livraisons echouees.

## Proteger vos secrets

* Stockez le secret de signature (`whsec_...`) dans des variables d'environnement, pas dans le code source.
* Ne committez jamais de secrets dans le controle de version.
* Effectuez une rotation des secrets s'ils sont compromis.

## Desactiver la protection CSRF

Si votre framework web active la protection CSRF par defaut (par ex., Django, Rails), desactivez-la pour votre endpoint webhook. Les requetes webhook n'incluent pas de tokens CSRF et seront rejetees.
