turbometrics kann bei Alerts einen HTTP-POST an eine URL deiner Wahl senden. Das funktioniert mit Slack, Teams, Discord, Zapier, Make und jedem anderen Tool das eingehende Webhooks unterstützt.
Slack einrichten
- In Slack: Apps → "Incoming WebHooks" → "Add to Slack"
- Kanal wählen → Webhook-URL kopieren
- URL unter Account → Benachrichtigungen → Alert-Webhook-URL eintragen
Teams einrichten
- In Teams: Kanal → "..." → Connectors → "Incoming Webhook"
- Name vergeben → URL kopieren
- URL unter Account → Benachrichtigungen eintragen
Verfügbare Ereignisse
| Ereignis | Wann |
|---|---|
alert.triggered |
Scan-Alert wird ausgelöst (Kritisch oder Warnung) |
alert.resolved |
Scan-Alert löst sich auf |
scan.completed |
Scan erfolgreich abgeschlossen |
rum.alert.triggered |
Live-Daten Alert wird ausgelöst (p75 überschreitet Schwellwert) |
rum.alert.resolved |
Live-Daten Alert löst sich auf (p75 unterschreitet Schwellwert) |
Welche Ereignisse per Webhook gesendet werden, kannst du unter Account → Benachrichtigungen einzeln ein- oder ausschalten.
Payload-Struktur
alert.triggered / alert.resolved
turbometrics sendet bei jedem Alert ein JSON-Objekt:
{
"event": "alert.triggered",
"alert_id": 42,
"type": "score_drop",
"severity": "critical",
"title": "Score-Einbruch: example.com",
"message": "Score auf 54 gefallen (vorher: 78)",
"target_url": "https://example.com/",
"host": "example.com",
"region": "eu-central",
"scan_public_id": "01KN...",
"created_at": "2026-04-01T10:00:00+00:00"
}
Bei alert.resolved enthält der Payload zusätzlich "event": "alert.resolved" und "resolved_at".
scan.completed
{
"event": "scan.completed",
"url": "https://example.com/",
"score": 74,
"score_speed": 29,
"score_images": 73,
"score_caching": 96,
"score_tech": 90,
"lcp_ms": 2800,
"ttfb_ms": 141,
"cls": 0.001,
"tbt_ms": 1635,
"scan_url": "https://turbometrics.de/scan/01KN...",
"scanned_at": "2026-04-03T20:45:00+00:00"
}
Typischer Anwendungsfall: Scan-Ergebnisse automatisch in Google Sheets, Slack oder Notion weiterleiten.
rum.alert.triggered / rum.alert.resolved
Bei Live-Daten (RUM) Alerts wird folgendes JSON-Objekt gesendet:
{
"event": "rum.alert.triggered",
"alert_name": "LCP zu hoch",
"domain": "example.com",
"metric": "LCP",
"p75": 3200.0,
"threshold": 2500.0,
"unit": "ms",
"samples": 48,
"window_minutes": 60,
"triggered_at": "2026-04-05T10:00:00+00:00",
"rum_dashboard_url": "https://turbometrics.de/rum/1"
}
Bei rum.alert.resolved enthält der Payload "resolved_at" statt "triggered_at".
Webhook-Authentifizierung
Damit dein Endpoint prüfen kann, ob ein eingehender Request wirklich von turbometrics stammt, kannst du unter Profil → Benachrichtigungen einen Authentifizierungs-Header hinterlegen.
turbometrics fügt diesen Header automatisch jedem ausgehenden Webhook-Request hinzu — für alle Ereignisse (Alerts, Recovery, Scan abgeschlossen).
Konfiguration:
| Feld | Beschreibung |
|---|---|
| Header-Name | Name des HTTP-Headers, z. B. X-Webhook-Secret oder Authorization |
| Header-Wert | Der Wert, den dein Endpoint erwartet |
Beispiel — gesendeter Request:
POST https://hooks.deine-domain.de/alert
Content-Type: application/json
X-Webhook-Secret: dein-geheimes-token
{ "event": "alert.triggered", ... }
Auf dem Empfänger prüfen (PHP-Beispiel):
$secret = $_SERVER['HTTP_X_WEBHOOK_SECRET'] ?? '';
if (!hash_equals('dein-geheimes-token', $secret)) {
http_response_code(401);
exit;
}
Der Header-Wert wird verschlüsselt gespeichert und verlässt turbometrics ausschließlich als HTTP-Header an deine konfigurierte Webhook-URL.
Hinweis: Header-Name leer lassen → Auth-Header wird entfernt. Wert-Feld leer lassen → bisheriger Wert bleibt unverändert erhalten.
Retry-Verhalten
Wenn eine Webhook-Zustellung fehlschlägt (kein 2xx-Statuscode oder Timeout), wiederholt turbometrics die Zustellung automatisch. Fehlgeschlagene Zustellungen werden protokolliert und sind unter Profil > Benachrichtigungen > Alert-Verlauf einsehbar. Der Zähler webhook_attempts zeigt an, wie oft die Zustellung versucht wurde. Die Felder webhook_response_code und webhook_last_error helfen bei der Fehleranalyse.
Zeitpunkt des Versands
- Scan-Alerts (
alert.triggered/alert.resolved): Webhooks werden sofort gesendet, wenn der Alert ausgelöst oder aufgelöst wird. - Live-Daten-Alerts (
rum.alert.triggered/rum.alert.resolved): Webhooks werden gesendet, wenn der CheckRumAlerts-Befehl eine Schwellwert-Überschreitung erkennt. Dieser läuft alle 5 Minuten. - Scan abgeschlossen (
scan.completed): Der Webhook wird gesendet, sobald die Scan-Verarbeitung abgeschlossen ist.
Verfügbarkeit
Webhooks sind ab dem Pro-Plan verfügbar.