
Sprache 🇩🇪 Deutsch
Übersicht
Implementierung
Hinter den Kulissen
Webhooks
Mit FastComments ist es möglich, einen API-Endpunkt aufzurufen, wann immer ein Kommentar in unserem System hinzugefügt, aktualisiert oder entfernt wird.
Wir realisieren dies mit asynchronen Webhooks über HTTP/HTTPS.
Was sind Webhooks 
Ein Webhook ist ein Mechanismus oder eine Integration zwischen zwei Systemen, bei dem der "Produzent" (FastComments) ein Ereignis auslöst das der "Konsument" (Sie) per API-Aufruf verarbeitet.
Unterstützte Ereignisse & Ressourcen 
FastComments unterstützt Webhooks nur für die Comment‑Ressource.
Wir unterstützen Webhooks für das Erstellen, Entfernen und Aktualisieren von Kommentaren.
Jedes dieser Ereignisse wird in unserem System als separates Event betrachtet und hat daher unterschiedliche Semantiken und Strukturen für die Webhook‑Events.
Eine beliebige Anzahl von Endpunkten kann dasselbe Event abonnieren, über das Dashboard oder über die API (siehe Verwalten von Webhooks über die API). Jeder Webhook wird unabhängig zugestellt.
Lokale Entwicklungsumgebung 
Für die lokale Entwicklung verwenden Sie ein Tool wie ngrok.
Um die Sicherheit des Systems zu vereinfachen, folgt die lokale Entwicklung dem gleichen Prozess wie das Einrichten und Sichern anderer Umgebungen.
Schritt 1: Fügen Sie „localhost“ zu den Domains in Ihrem Konto hinzu.
Fügen Sie „localhost“ hier als Domain hinzu.
Schritt 2: Wählen Sie einen API-Schlüssel
Wir werden eine Webhook-Konfiguration für Ihre Domain hinzufügen, daher benötigen wir einen API-Schlüssel. Sie können das hier tun.
Unter „Associate with domain“ – wählen Sie Ihre „localhost“-Domain aus.
HINWEIS: Alternativ können Sie ein API-Geheimnis für alle Testaktivitäten und Staging-Umgebungen verwenden. Fügen Sie einfach ein API-Geheimnis für „All Domains“ hinzu und geben Sie ihm einen Namen wie „test“.
Stellen Sie sicher, dass Sie ein API-Geheimnis für Ihre Produktionsdomain(s) definiert haben. Ereignisse für alle anderen Domains verwenden das Wildcard-(Test‑)Geheimnis.
Schritt 3: Fügen Sie Ihren Webhook hinzu
Während Sie ngrok oder ein ähnliches Tool ausführen, setzen Sie den Wert für „localhost“ hier.
Wenn Sie Send Test Payload anklicken, senden wir zwei Testereignisse, um zu prüfen, ob Sie den API-Schlüssel validieren.
Sobald es validiert ist, klicken Sie auf Save.
Schritt 4: Einen Kommentar hinzufügen
Jetzt können Sie Kommentare hinzufügen, bearbeiten oder löschen und sollten sehen, dass wir Ihre lokale Entwicklungsmaschine mit den Ereignissen aufrufen, wobei Sie Ihren Test‑API‑Schlüssel verwenden. Es kann bis zu 30 Sekunden dauern, bis die Ereignisse Ihre Maschine erreichen.
Einrichtung 
Folgen Sie den gleichen Schritten für localhost wie für die Produktion. Stellen Sie sicher, dass Sie Produktionsdomains und API Secrets eingerichtet haben.
Navigieren Sie zuerst zum Webhooks‑Admin. Dieser ist über Manage Data → Webhooks erreichbar.
Die Seite listet alle Webhooks in Ihrem Konto auf:
Klicken Sie auf New Webhook, um einen hinzuzufügen. Jeder Webhook hat eine URL, ein Kommentarereignis (erstellt, aktualisiert oder gelöscht), eine Domain und eine HTTP‑Methode:
Jeder Webhook wird unabhängig ausgeliefert. Sie können dasselbe Ereignis an mehrere Endpunkte senden, und ein auf All Domains beschränkter Webhook erhält Kommentare von jeder Domain, selbst wenn ein domänenspezifischer Webhook für dasselbe Ereignis existiert. Die gleiche URL, das gleiche Ereignis und die gleiche Domain können nicht zweimal hinzugefügt werden.
Klicken Sie vor dem Speichern auf Send Test Payload, um zu prüfen, ob der Endpunkt eine signierte Anfrage akzeptiert. Siehe den nächsten Abschnitt "Testing" für Details.
Aus der Liste können Sie einen Webhook bearbeiten, deaktivieren, wieder aktivieren oder löschen. Das Deaktivieren behält wartende Ereignisse bei, bis der Webhook wieder aktiviert wird; das Löschen verwirft sie.
Webhooks können auch über die API erstellt werden, zum Beispiel durch Zapier. Diese erscheinen in derselben Liste mit der Quelle API. Siehe Managing Webhooks via the API.
Testen 
Die neuen und bearbeitenden Webhook‑Seiten haben einen Send Test Payload‑Button, der eine Anfrage an die aktuell im Formular angegebene URL sendet, unabhängig davon, ob sie gespeichert wurde. Die Create‑ und Update‑Events senden ein Dummy‑WebhookComment‑Objekt, während beim Testen von Delete ein Dummy‑Request‑Body mit nur einer ID gesendet wird.
Verifying Payloads
Beim Testen Ihrer Webhook‑Integration sollten Sie überprüfen, dass die eingehenden Anfragen die folgenden Header enthalten:
X-FastComments-Timestamp– Unix‑Zeitstempel (Sekunden)X-FastComments-Signature– HMAC‑SHA256‑Signatur
Webhooks, die vor der Einführung des Signaturschemas erstellt wurden, erhalten außerdem einen token‑Header, der Ihr API‑Secret enthält. Neue Webhooks erhalten diesen nicht.
Verwenden Sie die HMAC‑Signatur‑Verifizierung, um sicherzustellen, dass Payloads authentisch sind.
Testing Tools
Sie können Werkzeuge wie webhook.site oder ngrok verwenden, um eingehende Webhook‑Payloads während der Entwicklung zu inspizieren.
Event Types
- Create Event: Ausgelöst, wenn ein neuer Kommentar erstellt wird.
- Update Event: Ausgelöst, wenn ein Kommentar bearbeitet wird.
- Delete Event: Ausgelöst, wenn ein Kommentar gelöscht wird.
Jeder Webhook ist an ein Ereignis und eine HTTP‑Methode (POST, PUT oder DELETE) gebunden. Jedes Ereignis enthält die vollständigen Kommentardaten im Request‑Body (siehe Data Structures für das Payload‑Format).
Datenstrukturen 
Die einzige Struktur, die über Webhooks gesendet wird, ist das WebhookComment-Objekt, das unten in TypeScript dargestellt ist.
Die Struktur des WebhookComment-Objekts
Die Struktur des "Create"-Ereignisses
Der Anforderungstext des "create"-Ereignisses ist ein WebhookComment-Objekt.
Die Struktur des "Update"-Ereignisses
Der Anforderungstext des "update"-Ereignisses ist ein WebhookComment-Objekt.
Die Struktur des "Delete"-Ereignisses
Der Anforderungstext des "delete"-Ereignisses ist ein WebhookComment-Objekt.
Änderung ab 14. November 2023
Früher enthielt der Anforderungstext des "delete"-Ereignisses nur die Kommentar-ID. Jetzt enthält er den vollständigen Kommentar zum Zeitpunkt der Löschung.
Jeder Schlüssel ist immer im Body vorhanden. Wenn der Kommentar keinen Wert für ein Feld hat, enthält der Body null (oder false für Booleans und [] für Listen), sodass die Struktur einer Lieferung nie von einem Kommentar zum anderen variiert.
Run 
Wenn Benutzer in einem Kommentar markiert werden, werden die Informationen in einer Liste namens mentions gespeichert. Jedes Objekt in dieser Liste hat die folgende Struktur.
Run 
HTTP-Methoden
Sie können die HTTP-Methode für jeden Webhook-Ereignistyp im Admin-Panel konfigurieren:
- Create Event: POST oder PUT (Standard: PUT)
- Update Event: POST oder PUT (Standard: PUT)
- Delete Event: DELETE, POST oder PUT (Standard: DELETE)
Da alle Anfragen eine ID enthalten, sind Create- und Update-Operationen standardmäßig (PUT) idempotent. Das Wiederholen derselben Create- oder Update-Anfrage sollte auf Ihrer Seite keine doppelten Objekte erzeugen.
Anforderungs-Header
Jede Webhook-Anfrage enthält die folgenden Header:
| Header | Description |
|---|---|
Content-Type | application/json |
token | Ihr API-Geheimnis |
X-FastComments-Timestamp | Unix-Zeitstempel (Sekunden), wenn die Anfrage signiert wurde |
X-FastComments-Signature | HMAC-SHA256-Signatur (sha256=<hex>) |
Siehe Sicherheit & API-Token für Informationen zur Überprüfung der HMAC-Signatur.
Sicherheit & API-Token 
FastComments Webhook-Anfragen enthalten mehrere Authentifizierungsmechanismen zur Sicherheit.
Gesendete Header
| Header | Beschreibung |
|---|---|
token | Ihr API Secret (zur Abwärtskompatibilität) |
X-FastComments-Timestamp | Unix-Zeitstempel (Sekunden), zu dem die Anfrage signiert wurde |
X-FastComments-Signature | HMAC-SHA256-Signatur der Payload |
HMAC-Signaturüberprüfung (empfohlen)
Wir empfehlen dringend, die HMAC-Signatur zu überprüfen, um sicherzustellen, dass Webhook-Payloads authentisch sind und nicht manipuliert wurden.
Signaturformat: sha256=<hex-encoded-signature>
Wie die Signatur berechnet wird:
- Verketten:
timestamp + "." + JSON_payload_body - Berechne HMAC-SHA256 mit Ihrem API Secret als Schlüssel
- Das Ergebnis hexadezimal kodieren
Beispielüberprüfung (Node.js)
const crypto = require('crypto');
function verifyWebhookSignature(req, apiSecret) {
const timestamp = req.headers['x-fastcomments-timestamp'];
const signature = req.headers['x-fastcomments-signature'];
if (!timestamp || !signature) {
return false;
}
// Überprüfe, ob der Zeitstempel aktuell ist (innerhalb von 5 Minuten)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Schutz vor Replay-Angriffen
}
// Überprüfe Signatur
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Beispielüberprüfung (Python)
import hmac
import hashlib
import time
import json
def verify_webhook_signature(headers, body, api_secret):
timestamp = headers.get('X-FastComments-Timestamp')
signature = headers.get('X-FastComments-Signature')
if not timestamp or not signature:
return False
# Überprüfe, ob der Zeitstempel aktuell ist
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Überprüfe Signatur
payload = json.dumps(body, separators=(',', ':'))
message = f"{timestamp}.{payload}"
expected = hmac.new(
api_secret.encode(),
message.encode(),
hashlib.sha256
).hexdigest()
return signature == f"sha256={expected}"
Beispielüberprüfung (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Überprüfe, ob der Zeitstempel aktuell ist (innerhalb von 5 Minuten)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Überprüfe Signatur
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Legacy-Authentifizierung
Der token-Header, der Ihr API Secret enthält, wird weiterhin zur Abwärtskompatibilität gesendet. Wir empfehlen jedoch, auf die HMAC-Überprüfung umzusteigen, um die Sicherheit zu verbessern, da diese vor Replay-Angriffen schützt.
Verwalten von Webhooks über die API 
Webhooks können ebenfalls über die REST‑API verwaltet werden. So abonnieren Integrationen wie Zapier Kommentarereignisse, ohne das Dashboard zu berühren, und es folgt dem REST‑Hooks‑Muster: abonnieren, Ereignisse empfangen, abbestellen.
API‑Abonnements existieren neben den im Dashboard konfigurierten Webhooks. Ein Kommentarereignis wird an jeden Webhook geliefert, dessen Domain entspricht, jeweils als eigene Zustellung, unabhängig davon, wie der Webhook erstellt wurde.
Authentifizierung
Jede Anfrage benötigt Ihren API‑Schlüssel im Header x-api-key (oder als Abfrageparameter API_KEY) und Ihre Mandanten‑ID im Abfrageparameter tenantId. Beide werden auf der Seite API‑Geheimnis im Dashboard angezeigt.
Abonnieren
POST https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
x-api-key: YOUR_API_KEY
Content-Type: application/json
{
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created"
}| Feld | Erforderlich | Beschreibung |
|---|---|---|
url | Ja | Eine absolute http- oder https-URL. |
event | Ja | comment-created, comment-updated oder comment-deleted. |
domain | Nein | Eine Domain aus Ihrer Kontokonfiguration. Standard ist *, wodurch Ereignisse für jede Domain empfangen werden. |
method | Nein | POST (Standard), PUT oder DELETE. |
Die Antwort enthält das Abonnement:
{
"status": "success",
"webhook": {
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created",
"domain": "*",
"method": "POST",
"source": "api",
"enabled": true,
"createdAt": "2026-09-08T12:00:00.000Z"
}
}
Das Abonnieren derselben URL für dasselbe Ereignis und dieselbe Domain gibt das bestehende Abonnement zurück, anstatt ein Duplikat zu erstellen, sodass ein Client sicher erneut versuchen kann. Jeder Mandant kann bis zu 50 API‑Abonnements haben.
Auflisten
GET https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
Gibt jeden Webhook für den Mandanten zurück, einschließlich der im Dashboard verwalteten ("source": "dashboard"). Filtern Sie mit event, domain oder source.
Abbestellen
DELETE https://fastcomments.com/api/v1/webhooks/SUBSCRIPTION_ID?tenantId=YOUR_TENANT_ID
Das Löschen eines Abonnements verwirft auch alle noch für es in der Warteschlange befindlichen Ereignisse. Nur über die API erstellte Abonnements können auf diese Weise gelöscht werden; ein Dashboard‑Webhook oder eine ID, die in Ihrem Konto nicht existiert, liefert 404 mit dem Code not-found. Dashboard‑Webhooks werden auf der Seite Webhooks bearbeitet.
Nutzdaten und Signatur
Zustellungen verwenden dieselben Nutzdaten wie Dashboard‑Webhooks (siehe Datenstrukturen) und werden mit demselben HMAC‑Verfahren signiert (siehe Sicherheit & API‑Tokens). API‑Abonnements erhalten niemals den veralteten token‑Header, daher prüfen Sie stattdessen den Header X-FastComments-Signature.
Beispiel‑Nutzdaten
GET https://fastcomments.com/api/v1/webhooks/sample-payloads?tenantId=YOUR_TENANT_ID&event=comment-created&limit=3
Gibt die neuesten Kommentare des Kontos exakt in der Form zurück, die eine Zustellung trägt, sodass eine Integration reale Beispieldaten anzeigen kann, bevor das erste Ereignis eintrifft. event ist optional und wird nur validiert, da jedes Ereignis dasselbe Kommentarobjekt liefert. limit hat standardmäßig den Wert 3 und akzeptiert Werte von 1 bis 10. Kosten: 2 API‑Credits.
{
"status": "success",
"payloads": [
{
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"urlId": "https://example.com/blog/hello-world",
"commenterName": "Jane Reader",
"comment": "Great article!",
"date": "2026-09-08T12:00:00.000Z",
"approved": true
}
]
}
Antworten mit 410 Gone
Wenn der Endpunkt eines API‑Abonnements mit HTTP 410 Gone antwortet, behandelt FastComments dies als Abbestellung: Das Abonnement wird zusammen mit seinen wartenden Ereignissen gelöscht und es werden keine weiteren Zustellungen versucht. In dem Dashboard konfigurierten Webhooks werden niemals automatisch gelöscht; für sie ist ein 410 ein gewöhnlicher Fehler. Jeder andere Fehlstatus wird erneut versucht und führt schließlich zur Deaktivierung des Webhooks, wie in Funktionsweise & Umgang mit Wiederholungen beschrieben.
Dashboard
API‑Abonnements erscheinen in der Webhooks‑Liste mit der Quelle API, wo ein Administrator sie bearbeiten, deaktivieren, wieder aktivieren oder löschen kann.
Wie es funktioniert & Umgang mit Wiederholungen 
Alle Änderungen am Comment-Objekt im System lösen ein Ereignis aus, das in eine Warteschlange gelangt.
Das initiale Webhook-Ereignis wird normalerweise innerhalb von sechs Sekunden nach dem Auftreten der Ereignisquelle gesendet.
Sie können diese Warteschlange im Webhooks-Admin überwachen für den Fall, dass Ihre API ausfällt.
Wenn eine Anfrage an Ihre API fehlschlägt, stellen wir sie nach einem Zeitplan erneut in die Warteschlange.
Dieser Zeitplan ist 1 Minute * the retry count. Wenn der Aufruf einmal fehlschlägt, wird er in
einer Minute erneut versucht. Wenn er zweimal fehlschlägt, wird er anschließend zwei Minuten warten, und so weiter. Dies dient dazu, Ihre
API nicht zu überlasten, falls sie aufgrund von Lastproblemen ausfällt.
Webhooks können über die Protokollseite abgebrochen werden.
Zum Abschluss
Dies schließt unsere Webhooks-Dokumentation ab.
Wir hoffen, dass Sie die FastComments-Webhook-Integration leicht verständlich finden und schnell einrichten können.
Wenn Sie der Meinung sind, dass unsere Dokumentation Lücken aufweist, teilen Sie uns dies unten mit.