Webhooks
Recevez le transcript complet de chaque session sur votre serveur, signé pour en garantir l'origine.
Un webhook envoie automatiquement le transcript complet d'une session à l'adresse de votre choix dès qu'elle se termine, par exemple à la fin d'un appel avec votre callbot. Vous l'utilisez pour alimenter votre CRM, archiver les échanges dans votre outil de ticketing ou déclencher un traitement après chaque appel. Chaque envoi est signé (HMAC-SHA256), pour que votre serveur puisse vérifier qu'il vient bien de Flowtative.
Comment ça marche
- Vous créez un webhook dans Paramètres > Webhooks : un libellé et une URL de destination.
- Vous le rattachez à un ou plusieurs agents depuis l'éditeur d'agent, section Webhooks.
- À la fin de chaque session d'un agent, Flowtative envoie le transcript en
POSTà tous les webhooks qui sont rattachés à cet agent, actifs et abonnés à l'événementBOT_SESSION_ENDED.
Note
Aujourd'hui, seules les sessions d'appel des callbots sont envoyées.
Important
Un webhook qui n'est rattaché à aucun agent ne reçoit rien. La création ne suffit pas : pensez à le rattacher à vos agents.
Avant de commencer
- Préparez une URL publique en
https://capable de recevoir une requêtePOST. Les URL enhttp://sont refusées (« HTTPS obligatoire. »). - Prévoyez un endroit sûr côté serveur pour stocker le secret de signature. Il ne s'affiche qu'une seule fois.
Créer un webhook
- Ouvrez Paramètres, puis l'onglet Webhooks.
- Cliquez sur Nouveau webhook.
- Renseignez les champs ci-dessous.
- Cliquez sur Créer et obtenir le secret.
- Dans la fenêtre Secret de signature, cliquez sur Copier, stockez le secret sur votre serveur, puis cliquez sur J'ai copié le secret.
| Champ | Description | Valeur par défaut |
|---|---|---|
| Libellé | Nom qui identifie le webhook dans les listes (ex. CRM, Archivage SAV). | L'URL, si vous laissez le champ vide |
| URL de destination | Adresse qui recevra les envois. Doit commencer par https://. | Vide |
Le webhook est créé actif et abonné à l'événement BOT_SESSION_ENDED (fin de session bot).

Attention
Le secret ne sera plus jamais affiché après la fermeture de cette fenêtre. Si vous le perdez, générez-en un nouveau (voir Renouveler le secret).
Si la création réussit mais que le secret n'a pas pu être généré, un message indique « Webhook créé, mais sans secret de signature : … ». Le webhook existe : générez son secret avec l'icône de clé.
Rattacher un webhook à un agent
- Ouvrez l'agent dans l'éditeur, puis la section Webhooks (groupe Intelligence).
- Cochez les webhooks qui doivent recevoir les transcripts de cet agent.
- Enregistrez l'agent.
Vous pouvez aussi cliquer sur Créer un webhook pour cet agent : le formulaire crée le webhook, l'abonne à BOT_SESSION_ENDED et le coche d'office (Créer et rattacher). Le secret s'affiche de la même façon.
La liste signale les situations à corriger :
| Indication | Signification | Que faire |
|---|---|---|
| désactivé | Le webhook est coupé dans les paramètres. | Réactivez-le dans Paramètres > Webhooks. |
| « N'écoute pas BOT_SESSION_ENDED — il ne recevra rien » | Le webhook coché n'est pas abonné à l'événement de fin de session. | Utilisez un webhook créé depuis Flowtative, qui est abonné d'office. |
| « 1 rattachement vers un webhook supprimé » | L'agent pointe vers un webhook qui n'existe plus. | Cliquez sur Nettoyer, puis enregistrez l'agent. |
Le lien Gérer les webhooks (URL, secret, journal des livraisons) vous ramène aux paramètres.
Gérer vos webhooks
Chaque webhook apparaît sous forme de carte avec son libellé, son URL et ses événements. Au-delà de 10 webhooks, une barre Filtrer par libellé ou URL… et une pagination apparaissent.

| Action | Comment | Effet |
|---|---|---|
| Activer ou désactiver | Interrupteur de la carte | Un webhook désactivé ne reçoit plus d'envois, mais reste rattaché à vos agents. |
| Consulter les échecs | Icône de journal (Livraisons en échec) | Ouvre le journal des envois qui ont échoué. |
| Renouveler le secret | Icône de clé, puis confirmer | Génère un nouveau secret et l'affiche une seule fois. |
| Supprimer | Corbeille (au survol), puis Supprimer ? | Supprime le webhook. Les agents qui le référençaient affichent un rattachement à nettoyer. |
Journal des livraisons en échec
Seuls les échecs sont journalisés. Quand tout fonctionne, le panneau indique « Aucune erreur de livraison — seuls les échecs sont journalisés. ». Chaque ligne affiche la date et la description de l'erreur. Cliquez dessus pour voir le contenu exact qui devait être envoyé. Le bouton Rafraîchir recharge le journal.
Renouveler le secret
- Cliquez sur l'icône de clé (Générer un nouveau secret HMAC).
- Le message « Invalide l'ancienne signature — confirmer » apparaît. Cliquez sur confirmer.
- Copiez le nouveau secret et mettez-le à jour sur votre serveur.
Attention
Dès la confirmation, les envois sont signés avec le nouveau secret. Votre serveur rejettera les envois tant que vous ne l'aurez pas mis à jour. Planifiez la rotation en même temps que le déploiement côté serveur.
Vérifier la signature
Chaque envoi porte deux en-têtes HTTP :
| En-tête | Contenu |
|---|---|
X-Via-Timestamp | Horodatage de l'envoi, en secondes (temps Unix). |
X-Via-Signature | Signature au format v1=<hexadécimal>. |
La signature se calcule ainsi : v1 = HMAC-SHA256(secret, timestamp + "." + corps brut). Pour la vérifier :
- Lisez les deux en-têtes. Rejetez la requête s'il en manque un.
- Rejetez la requête si l'horodatage a plus de 5 minutes environ. Vous vous protégez ainsi contre le rejeu d'un ancien envoi.
- Recalculez la signature sur le corps brut, avant tout décodage JSON, et comparez-la à la valeur
v1avec une comparaison à temps constant.
La fenêtre du secret propose ces extraits prêts à coller en Node.js et en Python :
import crypto from "node:crypto";
function verify(rawBody, headers, secret, toleranceSeconds = 300) {
const timestamp = headers["x-via-timestamp"];
const v1 = headers["x-via-signature"]?.split(",")
.find((p) => p.startsWith("v1="))?.slice(3);
if (!timestamp || !v1) return false;
const age = Math.floor(Date.now() / 1000) - Number(timestamp);
if (age < 0 || age > toleranceSeconds) return false;
const expected = crypto.createHmac("sha256", secret)
.update(timestamp + ".").update(rawBody).digest("hex");
return crypto.timingSafeEqual(Buffer.from(v1, "hex"), Buffer.from(expected, "hex"));
}Astuce
La vérification échoue souvent parce que le corps a été décodé puis réencodé avant le calcul : l'ordre des clés ou les espaces changent, et la signature ne correspond plus. Calculez toujours sur les octets reçus.
Exemple : alimenter le CRM après chaque appel
Votre service client utilise un callbot de prise de rendez-vous et vous voulez retrouver chaque conversation dans la fiche client du CRM.
- Votre équipe technique expose
https://crm.exemple.com/hooks/flowtative, qui vérifie la signature puis rattache le transcript au contact par son numéro. - Vous créez le webhook
CRMavec cette URL et transmettez le secret à l'équipe technique. - Dans l'éditeur du callbot, section Webhooks, vous cochez
CRMet enregistrez. - Vous passez un appel de test, puis vous vérifiez le journal Livraisons en échec : s'il est vide, l'envoi a réussi.
Bonnes pratiques
- Répondez vite côté serveur (un simple accusé de réception), puis traitez le transcript en arrière-plan.
- Utilisez un webhook par système destinataire plutôt qu'une URL qui redistribue : vous gardez un journal d'échecs lisible pour chacun.
- Désactivez un webhook plutôt que de le supprimer pendant une maintenance du serveur destinataire : les rattachements aux agents sont conservés.
Pour aller plus loin
Créer et configurer un agent
Créer un agent depuis zéro ou un template, puis régler son modèle, son prompt, ses capacités, ses connaissances, son flow et ses webhooks.
Transcriptions
Retrouvez, relisez, réécoutez et exportez les conversations de vos agents IA, en voix comme en chat.
Le parcours d'un appel
ce qui se passe avant, pendant et après l'appel.
Questions fréquentes et dépannage
Trouvez la réponse aux questions courantes et la solution aux messages d'erreur que Flowtative peut afficher.