Slack, Teams & Webhooks
Guides
Alertes Slack, Teams et webhooks
Envoyez les alertes Scanverra vers un canal Slack, un canal Microsoft Teams ou votre propre endpoint HTTPS, pour que votre équipe apprenne une baisse de score ou un changement risqué là où elle travaille déjà.
Fonctionnement
- 1Ouvrez Équipe, puis Intégrations, et ajoutez Slack, Microsoft Teams ou un webhook.
- 2Choisissez les alertes à recevoir, puis cliquez sur Envoyer un test pour vérifier que le message arrive.
- 3Quand une analyse planifiée ou une surveillance trouve quelque chose, Scanverra publie l'alerte dès la fin de l'exécution.
Les analyses lancées à la main n'envoient pas d'alertes. Planifiez les sites et dépôts à surveiller sur la page Analyses planifiées.
Alertes disponibles
Chaque intégration ne reçoit que les alertes que vous cochez. Dans un webhook, le nom de l'événement arrive dans l'en-tête X-Scanverra-Event et le champ event.
| Événement | Envoyé quand |
|---|---|
scan.score_dropped | Une analyse planifiée obtient plus de 10 points de moins que l'exécution précédente. L'alerte liste ce qui est nouveau. |
scan.completed | Une analyse planifiée se termine avec un résultat. |
scan.policy_failedEnterprise | Une analyse planifiée ne respecte pas la politique de votre équipe (un score minimum, ou aucune découverte critique). L'alerte en donne les raisons. |
payment_page.scripts_changedEnterprise | Une page de paiement surveillée charge un script nouveau ou modifié, ou sa Content-Security-Policy change. |
attack_surface.changedEnterprise | Un domaine surveillé gagne un nouvel hôte, ou un hôte devient exposé à une prise de contrôle. |
test | Quelqu'un clique sur Envoyer un test. |
Connecter Slack
- 1Dans Slack, ouvrez Apps, trouvez Incoming Webhooks et ajoutez-le au canal qui doit recevoir les alertes.
- 2Copiez l'URL du webhook. Elle commence par https://hooks.slack.com/.
- 3Dans Scanverra, ajoutez une intégration, choisissez Slack, collez l'URL et choisissez vos alertes.
Chaque alerte affiche le titre, jusqu'à cinq nouveaux problèmes et un bouton « Open report ».
Connecter Microsoft Teams
- 1Dans le canal Teams, ouvrez Workflows et choisissez Publier dans un canal lors de la réception d'une requête webhook.
- 2Terminez le workflow et copiez l'URL qu'il vous donne.
- 3Dans Scanverra, ajoutez une intégration, choisissez Microsoft Teams, collez l'URL et choisissez vos alertes.
Chaque alerte arrive sous forme de carte avec le titre, les nouveaux problèmes et un bouton « Open report ».
Webhooks
Utilisez un webhook pour envoyer les alertes ailleurs : ouvrir un ticket, prévenir la personne d'astreinte ou les archiver. Scanverra envoie un POST HTTPS avec un corps JSON pour chaque alerte.
En-têtes de la requête
Content-Type | Toujours application/json. |
User-Agent | Identifie Scanverra comme expéditeur.Scanverra-Alerts/1.0 |
X-Scanverra-Event | Le nom de l'événement, identique au champ event du corps.scan.score_dropped |
X-Scanverra-Timestamp | Le moment de la signature, en secondes Unix.1762594212 |
X-Scanverra-Signature | sha256= suivi du HMAC-SHA256 de l'horodatage, d'un point et du corps brut, avec votre secret de signature comme clé.sha256=9f2c… |
Corps de la requête
Exemple de baisse de score :
{
"event": "scan.score_dropped",
"sentAt": "2026-11-08T09:30:12.418Z",
"summary": "Security Scan score dropped from 81 to 62 for shop.example.com",
"data": {
"target": "https://shop.example.com",
"scanType": "security",
"score": 62,
"prevScore": 81,
"reportUrl": "https://www.scanverra.com/security-scan/cm9x2k1",
"newIssues": [
"Missing Content-Security-Policy header",
"jQuery 3.4.1 has known vulnerabilities"
]
}
}Champs
event | Le nom de l'événement. |
sentAt | Le moment de l'envoi de l'alerte (ISO 8601). |
summary | Une description d'une ligne, prête à afficher telle quelle. |
data.target | L'URL analysée, le domaine, ou owner/repo pour un dépôt. |
data.scanType | audit, seo, security, browser, repo ou crawl (une exploration SEO sur plusieurs pages). |
data.score | Le nouveau score de 0 à 100, ou null si l'alerte n'a pas de score (surveillances et tests). |
data.prevScore | Le score de l'exécution précédente, ou null. |
data.reportUrl | Un lien vers le rapport ou la surveillance. |
data.newIssues | De courtes lignes décrivant ce qui a changé. Peut être vide ou absent. |
Vérifier la signature
Quand vous ajoutez un webhook, Scanverra affiche son secret de signature (whsec_...) une seule fois. Conservez-le sur votre serveur, puis vérifiez chaque requête avant de lui faire confiance :
- 1Lisez le corps brut de la requête tel qu'il est arrivé, avant toute analyse JSON.
- 2Calculez le HMAC-SHA256 de l'en-tête d'horodatage, d'un point et du corps brut, avec le secret comme clé.
- 3Comparez-le à l'en-tête de signature en temps constant, et rejetez les requêtes dont l'horodatage date de plus de 5 minutes.
import crypto from "node:crypto";
import express from "express";
const SECRET = process.env.SCANVERRA_WEBHOOK_SECRET; // whsec_...
const app = express();
// express.raw keeps the exact bytes Scanverra signed.
app.post("/scanverra", express.raw({ type: "application/json" }), (req, res) => {
const timestamp = req.get("X-Scanverra-Timestamp") ?? "";
const signature = req.get("X-Scanverra-Signature") ?? "";
const expected = "sha256=" + crypto
.createHmac("sha256", SECRET)
.update(`${timestamp}.${req.body}`)
.digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) <= 300;
const valid = signature.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
if (!fresh || !valid) return res.sendStatus(401);
const alert = JSON.parse(req.body);
console.log(alert.event, alert.summary);
res.sendStatus(204); // answer fast, do slow work afterwards
});
app.listen(3000);Comme l'horodatage est signé avec le corps, une requête interceptée ne peut pas être rejouée plus tard.
Règles d'envoi
- Répondez avec n'importe quel statut 2xx en moins de 5 secondes. Faites le travail long après avoir répondu.
- Chaque alerte est envoyée une fois, sans nouvel essai. Le panneau Intégrations indique si le dernier envoi a réussi.
- Les redirections ne sont pas suivies : utilisez l'URL finale.
- Seules les adresses HTTPS publiques sont acceptées. Les URL Slack doivent être sur hooks.slack.com, et celles de Teams sur webhook.office.com ou Power Automate.
- Les alertes s'arrêtent pour toute l'équipe si son offre Team ou Enterprise expire.
Prêt à connecter ?
Les propriétaires et administrateurs de l'équipe ajoutent une intégration en une minute. Envoyez un test avant la première vraie alerte.