Discord-Webhook
Leiten Sie Zenovay-Ereignisse in einen Discord-Kanal weiter — nützlich für Engineering-Team-Räume oder Community-Growth-Räume.
Discords Webhooks sind kanalspezifisch. Kein Discord-Bot oder OAuth erforderlich.
Ausgehende Webhooks sind eine Pro+-Funktion. Aktualisieren Sie Ihren Plan, um sie zu aktivieren.
1. Den Discord-Webhook erstellen
- Öffnen Sie in Discord den Kanal, der Zenovay-Benachrichtigungen erhalten soll.
- Klicken Sie auf das Zahnrad-Symbol (Kanal bearbeiten) → Integrationen → Webhooks → Neuer Webhook.
- Geben Sie ihm einen Namen ("Zenovay Alerts") und einen Avatar, wenn Sie möchten.
- Klicken Sie auf Webhook-URL kopieren — sie sieht aus wie
https://discord.com/api/webhooks/123456789012345678/XXXXXXXX....
2. Den Webhook in Zenovay hinzufügen
- Gehen Sie in
app.zenovay.comzu Settings → Webhooks. - Wählen Sie die Website, für die Sie Benachrichtigungen erhalten möchten.
- Klicken Sie auf Add webhook.
- Füllen Sie aus:
- Name:
Discord #ops(oder etwas Aussagekräftiges) - URL: Fügen Sie die Discord-Webhook-URL aus Schritt 1 ein
- Events: Wählen Sie die Events aus, die Sie interessieren
- Name:
- Klicken Sie auf Create webhook.
- Klicken Sie auf das Send test event (Papierflugzeug-Symbol) — innerhalb von ca. 5 Sekunden sollte eine Nachricht in Ihrem Discord-Kanal erscheinen.
Discord akzeptiert beliebiges JSON, rendert aber den rohen Payload als Klartext. Für formatierte Nachrichten, siehe Schritt 3.
3. (Optional) Mit Discord-Embeds formatieren
Discord unterstützt reichhaltige Embeds mit Farben, Feldern und Zeitstempeln. Zenovay sendet ein generisches JSON-Ereignis — um es als Embed zu rendern, betreiben Sie ein kleines Relay:
// Cloudflare Workers / Node / Vercel — anywhere that runs JS
export default {
async fetch(req) {
const event = await req.json();
const colour = event.event_type === 'website_down' ? 0xdc2626
: event.event_type === 'traffic_spike' ? 0x10b981
: 0x3b82f6;
const discordPayload = {
embeds: [{
title: `Zenovay: ${event.event_type}`,
description: `Event for site ${event.website_id}`,
color: colour,
fields: [
{ name: 'Event type', value: event.event_type, inline: true },
{ name: 'Time', value: event.timestamp, inline: true },
],
footer: { text: 'Zenovay Analytics' },
}],
};
await fetch(DISCORD_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(discordPayload),
});
return new Response('ok');
},
};
Richten Sie die Webhook-URL von Zenovay auf dieses Relay statt direkt auf Discord aus.
4. Zenovays Signatur verifizieren
Für Produktions-Relays, verifizieren Sie die HMAC-SHA256-Signatur, damit nur echte Zenovay-Ereignisse Discord erreichen:
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 });
}
Ihr Webhook-Secret finden Sie unter Settings → Webhooks → klicken Sie auf das Auge-Symbol auf der Webhook-Karte.
Fehlerbehebung
- Discord lehnt mit HTTP 400 ab: Discords Webhook-Empfänger ist streng — Payloads mit unbekannten Top-Level-Schlüsseln können 400 zurückgeben. Verwenden Sie das Relay in Schritt 3 zur Umformung.
- Rate Limits: Discord-Webhooks haben Rate Limits pro Kanal (ca. 30 Nachrichten pro Minute). Für häufige Ereignistypen wie
traffic_spikebündeln Sie diese in Ihrem Relay oder filtern Sie auf der Zenovay-Seite. - Test-Ereignis kommt an, echte Ereignisse nicht: Bestätigen Sie, dass die richtigen Ereignistypen in der Zenovay-Webhook-Konfiguration ausgewählt sind. Das Test-Ereignis verwendet
event_type: 'test'unabhängig von der Auswahl.