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

# Crochets Web

> Configurez les webhooks sortants depuis Paramètres → Webhooks : URL des endpoints, secrets de signature, abonnements aux événements, retries et journaux.

<Frame>
  <img src="https://mintcdn.com/flowella/PuGNWwHHg6Nlq3MM/images/Screenshots/flowella-webhooks.png?fit=max&auto=format&n=PuGNWwHHg6Nlq3MM&q=85&s=6b4378754549ac127c02626ed49d468d" alt="Flowella outbound webhooks" width="2774" height="1686" data-path="images/Screenshots/flowella-webhooks.png" />
</Frame>

Les Webhooks permettent à Flowella d'envoyer des événements à vos propres systèmes en temps réel - par exemple, notifier votre CRM lorsqu'un message WhatsApp est délivré, ou lancer une tâche de fond lorsqu'un formulaire HubSpot échoue à la synchronisation. Cette page couvre l'écran **Réglages → Webhooks** de l'application.

Pour connaître les schémas de charge utile de chaque événement, consultez [Webhooks reference](/fr/api-reference/webhooks).

## Qui peut gérer les webhooks

Seuls les rôles **Propriétaire** et **Admin** ont accès à Paramètres → Crochets Web. Les autres rôles n'y ont pas accès.

## Ajouter un point de terminaison de webhook

<Steps>
  <Step title="Ouvrez Paramètres → Webhooks">
    Dans la navigation de gauche, allez dans **Paramètres → Webhooks**.
  </Step>

  <Step title="Cliquez sur Ajouter un point de terminaison">
    Entrez l'URL HTTPS publique vers laquelle Flowella doit POSTER les événements. HTTP (sans TLS) n'est pas accepté.
  </Step>

  <Step title="Choisissez les événements auxquels vous souhaitez vous abonner">
    Choisissez un ou plusieurs types d'événements - par exemple, `message.delivered`, `template.approved`, `flow.sync.failed`. La liste complète des événements se trouve sur [Webhooks reference](/fr/api-reference/webhooks). Vous pouvez vous abonner à tous les événements à l'aide d'une seule case à cocher.
  </Step>

  <Step title="Copiez le secret de signature">
    Flowella affiche le secret de signature **une seule fois** à la fin du flux de création. Sauvegardez-le dans un endroit sûr - vous l'utiliserez pour vérifier la signature HMAC sur chaque requête entrante.
  </Step>

  <Step title="Envoyer un événement test">
    Utilisez le bouton **Envoyer un test** pour déclencher un événement synthétique à votre point de terminaison. Le journal de livraison enregistre le résultat afin que vous puissiez confirmer que votre gestionnaire est connecté avant de passer à l'action.
  </Step>
</Steps>

## Signature et vérification

Chaque demande de webhook comprend un en-tête `X-Flowella-Signature` avec une signature HMAC-SHA256 du corps de la demande brute, calculée avec le secret de signature de votre point d'accès. Vérifiez-la avant de faire confiance au contenu de la requête :

<CodeGroup>
  ```js Node.js theme={null}
  import crypto from "crypto";

  function verify(rawBody, signature, secret) {
    const expected = crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
    return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
  }
  ```

  ```python Python theme={null}
  import hmac, hashlib

  def verify(raw_body: bytes, signature: str, secret: str) -> bool:
      expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
      return hmac.compare_digest(expected, signature)
  ```

  ```ruby Ruby theme={null}
  require "openssl"

  def verify(raw_body, signature, secret)
    expected = OpenSSL::HMAC.hexdigest("sha256", secret, raw_body)
    Rack::Utils.secure_compare(expected, signature)
  end
  ```

  ```php PHP theme={null}
  function verify(string $rawBody, string $signature, string $secret): bool {
      $expected = hash_hmac('sha256', $rawBody, $secret);
      return hash_equals($expected, $signature);
  }
  ```
</CodeGroup>

La demande comprend également :

* `X-Flowella-Timestamp` - l'horodatage Unix au moment de l'envoi. Rejetez les demandes dont l'horodatage se situe à plus de 5 minutes dans le passé ou dans le futur afin d'éviter les attaques par rejeu.
* `X-Flowella-Event` - le type d'événement (par exemple, `message.delivered`).
* `X-Flowella-Delivery` - un identifiant de livraison unique, utile pour la déduplication.

## Réessais et retour en arrière

Si votre point d'accès renvoie un code d'état non-2xx (ou s'arrête après 10 secondes), Flowella effectue une nouvelle tentative avec un délai exponentiel :

| Tentative    | Délai après la tentative précédente |
| ------------ | ----------------------------------- |
| 1 (initiale) | -                                   |
| 2            | 30 secondes                         |
| 3            | 2 minutes                           |
| 4            | 10 minutes                          |
| 5            | 1 heure                             |
| 6            | 6 heures                            |
| 7 (final)    | 24 heures                           |

Après 7 tentatives infructueuses, la livraison est considérée comme **échec** et abandonnée. Le point d'accès n'est **pas** automatiquement désactivé - vous pouvez toujours recevoir des événements futurs sur le même point d'accès.

Si 100 livraisons consécutives échouent, Flowella **auto-pauses** le point de terminaison et envoie une notification `WEBHOOK_PAUSED`. Reprenez-la à partir du menu de la ligne une fois que vous avez résolu le problème sous-jacent.

## Journal de livraison

Chaque ligne de point d'accès se développe en un journal de livraison montrant les 7 derniers jours de tentatives :

* **Type d'événement et ID**
* **État** - succès, échec, nouvelle tentative
* Numéro de la tentative
* Code et durée de la réponse
* **Corps de la réponse** (premier 1 KB)
* **Envoyé à**

Cliquez sur n'importe quelle livraison pour voir la demande et la réponse complètes, ou pour la **redélivrer** manuellement.

## Gestion des points d'accès

Dans le menu de la rangée des points d'accès, vous pouvez

* **Éditer** - modifier l'URL ou les abonnements aux événements. (Le secret de signature reste le même.)
* **Rotate secret** - générer un nouveau secret de signature. L'ancien secret cesse de fonctionner immédiatement, il convient donc de coordonner le changement avec votre gestionnaire.
* Pause\*\* - arrêtez temporairement les livraisons sans perdre la configuration.
* Reprendre\*\* - pour réactiver un point d'accès mis en pause.
* Supprimez\*\* - supprimez le point d'accès et son historique de livraison.

## Questions courantes

<AccordionGroup>
  <Accordion title="Puis-je avoir plus d'un point final ?">
    Oui, il n'y a pas de limite stricte. La plupart des organisations ont 1 à 3 points de terminaison (production, staging, et un puits de log interne). Maintenez le nombre d'événements à un niveau bas afin qu'ils se répartissent de manière prévisible.
  </Accordion>

  <Accordion title="Quelle est la différence entre les webhooks et l'API ?">
    L'API est **pull** - votre code demande l'état à Flowella. Les webhooks sont **push** - Flowella informe votre code des changements d'état. Utilisez les webhooks pour tout ce que vous demanderiez autrement.
  </Accordion>

  <Accordion title="Les webhooks contiennent-ils des données sensibles ?">
    Les données utiles des webhooks comprennent les identifiants de conversation, les numéros de téléphone des contacts, le contenu des messages et les noms des modèles. Traitez le secret et l'URL du point de terminaison comme sensibles. Si votre infrastructure le permet, limitez votre point de terminaison à l'acceptation de POST provenant de la plage d'adresses IP de Flowella.
  </Accordion>

  <Accordion title="Comment tester les webhooks localement ?">
    Utilisez un outil de tunnel (ngrok, Cloudflare Tunnel) pour exposer votre point d'accès local à une URL HTTPS publique, puis pointez un **point d'accès de test** vers cette URL. Ne mettez pas d'URL de tunnel dans votre point de terminaison de production - elles expirent.
  </Accordion>
</AccordionGroup>

## Lié

<CardGroup cols={2}>
  <Card title="Référence des webhooks" icon="webhook" href="/fr/api-reference/webhooks">
    Types d'événements, schémas de charge utile et en-têtes.
  </Card>

  <Card title="Clés API" icon="key" href="/fr/settings/api-keys">
    L'autre moitié de l'intégration programmatique.
  </Card>

  <Card title="Introduction à l'API" icon="code" href="/fr/api-reference/introduction">
    Erreurs, limites de taux et pagination.
  </Card>

  <Card title="Événements de notification" icon="bell" href="/fr/app/notification-events">
    Les mêmes événements diffusés dans le flux in-app et par e-mail.
  </Card>
</CardGroup>
