Webhook entrant Slack
Recevez un message Slack à chaque fois qu'un événement Zenovay se déclenche — pic de trafic, réalisation d'objectif, pic d'erreurs ou indisponibilité.
Cette recette utilise la fonctionnalité native de webhook entrant de Slack : aucune application Slack ni bot requis.
Les webhooks sortants sont une fonctionnalité Pro+. Mettez à niveau votre plan pour les activer.
1. Créer le webhook entrant Slack
- Dans Slack, ouvrez votre espace de travail → Applications → recherchez "Incoming Webhooks" → Ajouter à Slack.
- Sélectionnez le salon qui doit recevoir les alertes Zenovay (par ex.
#alertesou#croissance). - Cliquez sur Ajouter l'intégration de webhooks entrants.
- Slack affiche une URL de webhook qui ressemble à
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX— copiez-la.
2. Ajouter le webhook dans Zenovay
- Dans
app.zenovay.com, allez dans Paramètres → Webhooks. - Sélectionnez le site web pour lequel vous souhaitez recevoir des notifications.
- Cliquez sur Ajouter un webhook.
- Remplissez :
- Nom :
Slack #alertes(ou tout ce qui a du sens pour vous) - URL : collez l'URL du webhook Slack de l'étape 1
- Événements : sélectionnez ceux qui vous intéressent (Pic de trafic, Objectif atteint, Site indisponible, …)
- Nom :
- Cliquez sur Créer le webhook.
- Cliquez sur Envoyer un événement de test (icône avion en papier) sur la nouvelle carte. Dans les ~5 secondes vous devriez voir un message Slack dans le salon.
C'est tout pour la configuration de base — Slack acceptera la charge JSON par défaut de Zenovay comme un champ text générique.
3. (Optionnel) Formater joliment le message Slack
Les webhooks entrants de Slack acceptent une charge plus riche avec des blocs, des pièces jointes et du formatage Markdown. Zenovay envoie un événement JSON générique — Slack l'affichera comme une valeur text de repli.
Si vous voulez de jolis messages Slack avec des pièces jointes colorées selon la sévérité ou des mises en page en blocs, utilisez un petit relais entre Zenovay et Slack :
// Cloudflare Workers / any Node-style runtime
export default {
async fetch(req) {
const event = await req.json();
const slackPayload = {
text: `📈 Zenovay event: *${event.event_type}* on ${event.website_id}`,
attachments: [{
color: event.event_type === 'website_down' ? '#dc2626' : '#3b82f6',
fields: [
{ title: 'Event', value: event.event_type, short: true },
{ title: 'Time', value: event.timestamp, short: true },
],
}],
};
await fetch(SLACK_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(slackPayload),
});
return new Response('ok');
},
};
Pointez l'URL du webhook Zenovay vers votre relais plutôt que directement vers Slack.
4. Vérifier la signature Zenovay (recommandé pour les relais)
Si vous utilisez un relais, vérifiez la signature HMAC-SHA256 de Zenovay afin que Slack ne reçoive que des événements Zenovay authentiques :
import { createHmac } from 'crypto';
const signature = req.headers.get('x-zenovay-signature'); // 'sha256=<hex>'
const provided = signature.replace(/^sha256=/, '');
const expected = createHmac('sha256', YOUR_WEBHOOK_SECRET)
.update(rawBody)
.digest('hex');
if (provided !== expected) {
return new Response('invalid signature', { status: 401 });
}
Votre secret de webhook est affiché dans Paramètres → Webhooks → cliquez sur l'icône œil sur la carte du webhook.
Dépannage
- Aucun message Slack n'arrive : vérifiez la carte du webhook dans Zenovay pour un horodatage "Dernière exécution" — s'il est vide, aucun événement n'a encore été déclenché. Cliquez sur Envoyer un événement de test pour en forcer un.
invalid_payloadde Slack : le webhook Slack a renvoyé 400 car la forme JSON ne correspondait pas. Utilisez un relais (étape 3) pour reformater selon le format attendu par Slack.- Alertes trop nombreuses : dans la configuration du webhook, désélectionnez les types d'événements bavards comme
traffic_spike. Gardez uniquement ceux à fort signal.