Canaux de notification
Un canal est une destination pour les alertes. Ajoutez-en autant que nécessaire, puis associez-les à des surveillances individuelles (ou à toutes les surveillances par défaut).
Canaux et substitutions par surveillance
Les canaux sont définis au niveau de l'organisation. Chaque canal peut être marqué comme par défaut — c'est-à-dire que les nouvelles surveillances y envoient automatiquement. Sur une surveillance donnée, vous pouvez remplacer la valeur par défaut et choisir un sous-ensemble personnalisé.
Slack
- Dans Slack, allez dans
Apps → Incoming Webhooks → Add to Slacket sélectionnez le canal qui doit recevoir les alertes. - Copiez l'URL de webhook fournie par Slack.
- Dans Page Deltas, ouvrez la page
Channels,Add a channel, choisissezSlack, collez l'URL et enregistrez. - Cliquez sur
Send testpour confirmer que le message arrive dans le bon canal Slack.
Discord
Dans votre serveur Discord, ouvrez Server Settings → Integrations → Webhooks → New Webhook. Copiez l'URL et collez-la dans un nouveau canal Discord dans Page Deltas.
Microsoft Teams
Dans Teams, faites un clic droit sur le canal cible, Connectors → Incoming Webhook → Configure. Nommez-le Page Deltas, enregistrez et copiez l'URL dans Page Deltas.
Ajoutez l'adresse du destinataire. Nous envoyons d'abord un e-mail de vérification à cette adresse — le canal reste à l'état vérification en attente et ne recevra pas d'alertes tant que le destinataire n'a pas confirmé. Les e-mails sortants sont envoyés depuis un domaine vérifié que nous contrôlons. Pour une diffusion en équipe, utilisez un alias de groupe plutôt que d'ajouter les adresses une par une.
Webhook générique
Utilisez-le quand vous souhaitez piloter votre propre système à partir des alertes (Linear, Jira, une Lambda, un Slack mais via un bot, etc.).
Charge utile
Le corps est un objet JSON plat. De nouveaux champs peuvent être ajoutés au fil du temps : ignorez donc les clés inconnues plutôt que de les rejeter.
POST <your URL>
Content-Type: application/json
X-Signature: sha256=<hex>
{
"event": "change.detected",
"monitor_id": "...",
"monitor_url": "https://example.com/pricing",
"monitor_name": "Competitor pricing page",
"change_id": "...",
"detected_at": "2026-06-01T12:00:00Z",
"summary": "Pro plan increased from $29 to $39/month.",
"before_screenshot_url": "https://.../before.png",
"after_screenshot_url": "https://.../after.png",
"dashboard_url": "https://app.pagedeltas.com/monitors/..."
}Vérification de signature (HMAC)
Chaque requête comporte un en-tête X-Signature de la forme sha256=<hex>, où la valeur est le HMAC-SHA256 du corps brut de la requête utilisant le secret de votre canal — affiché une seule fois lors de la création. Il n'y a pas de composante d'horodatage.
# Node.js example
import crypto from "node:crypto";
function verify(req, rawBody, secret) {
const header = req.headers["x-signature"]; // "sha256=<hex>"
const expected =
"sha256=" +
crypto.createHmac("sha256", secret).update(rawBody).digest("hex");
return crypto.timingSafeEqual(
Buffer.from(header),
Buffer.from(expected),
);
}Distribution et échecs
| Comportement | Détail |
|---|---|
| Tentatives | Chaque alerte est distribuée avec une seule tentative par canal. Il n'y a actuellement aucune nouvelle tentative automatique — faites en sorte que votre récepteur réponde rapidement et accepte les doublons de manière défensive. |
| Échecs | Une réponse non-2xx ou une erreur réseau marque la distribution comme échouée. La surveillance elle-même n'est pas mise en pause en cas d'échec de distribution. |
| Journal d'audit | Chaque tentative (succès ou échec, avec le statut HTTP) est enregistrée côté serveur dans le journal des tentatives de distribution. |
Bonnes pratiques
- Utilisez un canal par salon Slack — ne réutilisez pas un webhook pour plusieurs salons Slack.
- Pour les surveillances à fort volume, envoyez vers un canal Slack dédié plutôt que vers un #general très actif.
- Pour les alertes critiques, associez deux canaux de types différents (par exemple Slack + e-mail) afin qu'une panne de Slack ne masque pas un changement.