Webhook de surveillance de site
Mis à jour en septembre 2026
Un webhook envoie chaque alerte Relvato à l’adresse web de votre choix, sous forme de requête JSON signée, pour que les pannes arrivent dans les outils que votre équipe utilise déjà : un outil de gestion d’incidents, une file de tickets, une messagerie où Relvato ne publie pas, ou votre propre code. Cette page en connecte un, envoie un test et montre exactement ce qui arrive. L’e-mail et Slack continuent de fonctionner en parallèle.
Pourquoi un webhook
L’e-mail et Slack sont des destinations fixes. Un webhook est une seule intégration qui atteint tout ce qui a un endpoint HTTP : dès qu’un contrôle échoue, vous pouvez alerter la personne d’astreinte, ouvrir un ticket avec l’erreur déjà remplie ou consigner la panne pour un rapport client — sans que personne ne recopie les détails d’un e-mail.
Chaque requête porte les mêmes champs structurés — le site, le contrôle, sa gravité, l’erreur, ce qui a déclenché l’exécution et un lien vers elle —, si bien que le destinataire peut décider au lieu d’analyser du texte : alerter quelqu’un seulement pour une panne critique du paiement, ouvrir un ticket pour le reste.
Ce qu’il vous faut
Les alertes webhook sont incluses dans les offres Pro, Business et Agency.
Il vous faut une adresse https sur internet qui répond par n’importe quel statut 2xx en moins de 10 secondes. Ce peut être une petite fonction à vous, ou le déclencheur webhook d’un outil d’automatisation : le Catch Hook de Zapier, le Custom webhook de Make ou le nœud Webhook de n8n acceptent le JSON de Relvato tel quel.
Étape 1 — Ajoutez l’URL du webhook
Dans Relvato, ouvrez le menu du compte en haut à droite et choisissez Alert settings. Dans la section Webhook, collez votre adresse et cliquez sur Save preferences.
Relvato n’accepte que des adresses https qui pointent vers internet et ne suit jamais les redirections : utilisez l’adresse finale. L’enregistrement crée un secret de signature pour le webhook. Comme pour un webhook Slack, l’adresse peut contenir un jeton, donc après l’enregistrement la page n’affiche plus que le nom d’hôte.

Étape 2 — Copiez le secret de signature
À côté de Signing secret, cliquez sur Show puis Copy, et stockez-le là où votre récepteur peut le lire — par exemple dans une variable d’environnement RELVATO_WEBHOOK_SECRET. Il commence par whsec_.
Rotate crée aussitôt un nouveau secret ; l’ancien ne vérifie plus, alors mettez votre récepteur à jour en même temps.
Étape 3 — Envoyez un test
Cliquez sur Send test webhook en bas de la page. Relvato envoie un événement de type test, signé comme un vrai, et vous dit si votre endpoint a répondu — par exemple « Test event delivered (HTTP 200) ». Sinon, le message dit pourquoi : pas de réponse en 10 secondes, une redirection ou le statut renvoyé par votre endpoint.
Étape 4 — Choisissez ce qui part vers le webhook
Sous What goes where, la colonne Webhook a un interrupteur par type de contrôle — User flows, Security, Design, Performance, SEO / AEO, Domain lifecycle et Other. Désactivez ceux que vous ne voulez pas dans vos outils ; l’e-mail et Slack ont leurs propres interrupteurs.
Le reste d’Alert settings s’applique aussi : Sites choisit les sites qui alertent, et Alert me on fixe la gravité minimale envoyée. Le webhook est instantané — laissez As it happens coché ; les résumés quotidiens et hebdomadaires sont envoyés par e-mail uniquement.

Ce que Relvato envoie
Chaque alerte est un POST avec Content-Type: application/json et trois en-têtes : Relvato-Event (le type d’événement), Relvato-Delivery (un identifiant unique qui reste le même si un envoi est retenté, pour ignorer les doublons) et Relvato-Signature.
Il y a quatre types d’événement : check.failed quand un contrôle commence à échouer (ou échoue quand vous le lancez vous-même), check.passed quand « Tell me about every run » est activé, quarantine.change pour les messages de début, de changements et de bilan du mode quarantaine, et test depuis le bouton ci-dessus. Tous ont la même forme ; les parties qui ne s’appliquent pas valent null.

Vérifiez la signature
Relvato-Signature ressemble à t=1790000000,v1=… — t est l’heure Unix de la requête et v1 un HMAC-SHA256, avec votre secret de signature, de l’horodatage, d’un point et du corps brut de la requête. Recalculez-le sur le corps exactement tel qu’il est arrivé (pas du JSON re-sérialisé), comparez en temps constant et refusez les horodatages de plus de cinq minutes, pour qu’une requête interceptée ne puisse pas être rejouée plus tard.
Le déclencheur webhook d’un outil d’automatisation ne sait généralement pas vérifier les signatures. C’est acceptable pour des usages sans enjeu comme un journal ; quand un webhook peut ouvrir des incidents ou modifier des choses, placez devant une petite fonction qui vérifie la signature.
import crypto from "node:crypto";
import express from "express";
const app = express();
// Keep the RAW body: the signature is over the exact bytes Relvato sent.
app.post("/relvato-webhook", express.raw({ type: "application/json" }), (req, res) => {
const header = req.get("Relvato-Signature") ?? ""; // "t=1790000000,v1=5f2c…"
const t = Number(/t=(\d+)/.exec(header)?.[1]);
const v1 = /v1=([0-9a-f]{64})/.exec(header)?.[1] ?? "";
const expected = crypto
.createHmac("sha256", process.env.RELVATO_WEBHOOK_SECRET)
.update(`${t}.${req.body}`)
.digest("hex");
const fresh = Math.abs(Date.now() / 1000 - t) < 300; // refuse replays older than 5 minutes
if (!fresh || v1.length !== 64 ||
!crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))) {
return res.sendStatus(401);
}
const event = JSON.parse(req.body.toString());
res.sendStatus(200); // answer fast, then do the slow work
handle(event); // switch on event.type
});Exemples concrets
Alerter la personne d’astreinte. Envoyez les événements check.failed vers n8n ou Make, gardez ceux de gravité critical — un paiement ou un tunnel de commande cassé — et créez un incident dans PagerDuty ou Opsgenie avec le site, l’erreur et le lien vers l’exécution.
Ouvrir un ticket automatiquement. Un Catch Hook Zapier transforme chaque panne en ticket Jira, Linear ou GitHub : le nom du contrôle en titre, l’erreur et les changements dans la description, le lien vers l’exécution pour reproduire.
Publier dans Microsoft Teams, Discord ou Google Chat. Ils attendent leur propre format de message : faites passer le webhook par Make, n8n ou Zapier et associez les champs de Relvato au message.
Tenir un journal des pannes pour les rapports clients. Ajoutez une ligne par événement dans Google Sheets ou votre entrepôt de données, puis indiquez combien de fois chaque site a été en panne, sur quels contrôles et en combien de temps les correctifs sont arrivés.
Agences : router par site. Chaque événement contient site.id et site.name, donc un seul webhook peut envoyer les alertes de chaque client vers son canal ou son projet.
Réagir à un mauvais déploiement. Quand check.failed arrive avec un déploiement comme déclencheur, votre pipeline peut ouvrir une pull request d’annulation à faire approuver — gardez un humain dans la boucle avant tout changement sur le site en production.
Nouvelles tentatives, doublons et mise en pause
Si votre endpoint ne répond pas, dépasse 10 secondes ou renvoie un statut 5xx ou 429, Relvato réessaie après 2 secondes puis après 8. Les autres statuts 4xx et les redirections ne sont pas retentés — la réponse ne changerait pas. Chaque envoi est journalisé sur l’exécution, et un envoi en échec affiche sa raison dans Alert settings.
Une nouvelle tentative porte le même identifiant Relvato-Delivery. Conservez les identifiants traités et ignorez les répétitions.
Après 20 envois en échec d’affilée, Relvato met le webhook en pause et vous prévient : la cloche de notifications affiche « Webhook alerts paused » avec la dernière erreur, et Alert settings l’affiche avec un bouton Resume. Corrigez le récepteur, puis cliquez sur Resume.
Modifier ou supprimer le webhook
Pour l’envoyer ailleurs, collez la nouvelle adresse et enregistrez ; le secret de signature ne change pas. Pour arrêter l’envoi sans perdre la configuration, décochez Send alerts to the webhook. Pour le supprimer complètement, cochez Remove on save et cliquez sur Save preferences — Relvato supprime l’adresse et le secret de signature ; la politique de confidentialité donne les détails.
Champs du payload
| Champ | Contenu |
|---|---|
| version | La version du payload — 1. Un changement qui pourrait casser un récepteur reçoit une nouvelle version. |
| id | Un identifiant d’événement unique, aussi envoyé dans l’en-tête Relvato-Delivery. |
| type | check.failed, check.passed, quarantine.change ou test. |
| created_at | La date de création de l’événement, en ISO 8601 (UTC). |
| site | id, name et url du site — null pour un test. |
| check | key, name, group (le type de contrôle) et severity : warning, low, medium, high ou critical. |
| run | id, url (lien vers l’exécution dans Relvato), status, error, failed_step, trigger et changes (ce qui a changé sur le site juste avant). |
| quarantine | summary, le nombre de changements et log_url — seulement pour quarantine.change, sinon null. |
Questions fréquentes
Quelles offres incluent les alertes webhook ?
Pro, Business et Agency. Free alerte par e-mail une fois par mois et affiche chaque panne dans le tableau de bord ; voir les tarifs.
Puis-je envoyer les alertes vers plusieurs webhooks ?
Un webhook par compte Relvato. Pour atteindre plusieurs outils, pointez-le vers un outil d’automatisation comme Zapier, Make ou n8n et distribuez à partir de là.
Dois-je autoriser les adresses IP de Relvato ?
Vérifiez plutôt la signature. Elle prouve que la requête vient de Relvato et n’a pas été modifiée, ce qu’une adresse IP ne peut pas prouver.
Le webhook contient-il la capture d’écran ?
Non — le payload reste léger et ne contient aucune image. run.url ouvre l’exécution dans Relvato, avec sa capture et toutes les étapes.
Vais-je recevoir la même alerte deux fois ?
Seulement si un envoi est retenté parce que votre endpoint n’a pas répondu à temps. La nouvelle tentative porte le même identifiant Relvato-Delivery, vous pouvez donc l’ignorer.
Relvato envoie-t-il un webhook quand un contrôle se rétablit ?
Pas comme événement distinct pour l’instant. Avec « Tell me about every run » activé, chaque exécution réussie envoie check.passed, que vous pouvez utiliser pour fermer ce qu’un check.failed a ouvert.