Dokumentation

Webhooks

Webhook-Versand, typische Einsätze und was du bei der Konfiguration beachten solltest.

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

  1. In Slack: Apps → "Incoming WebHooks" → "Add to Slack"
  2. Kanal wählen → Webhook-URL kopieren
  3. URL unter Account → Benachrichtigungen → Alert-Webhook-URL eintragen

Teams einrichten

  1. In Teams: Kanal → "..." → Connectors → "Incoming Webhook"
  2. Name vergeben → URL kopieren
  3. 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.

Weiterlesen