
Sprache 🇩🇪 Deutsch
Überblick
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 und Ressourcen 
FastComments unterstützt Webhooks nur für die Kommentar-Ressource.
Wir unterstützen Webhooks für die Erstellung, Entfernung und Aktualisierung von Kommentaren.
Jedes davon wird in unserem System als separates Ereignis betrachtet und hat daher unterschiedliche Semantik und Strukturen für die Webhook-Ereignisse.
Einrichtung der lokalen 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 
Befolgen Sie dieselben Schritte für localhost wie für die Produktion. Stellen Sie sicher, dass Sie Produktionsdomains und API‑Secrets eingerichtet haben.
Navigieren Sie zunächst zum Webhooks admin. Dieser ist über Daten verwalten → Webhooks erreichbar.
Die Konfigurationsseite erscheint wie folgt:
Auf dieser Seite können Sie Endpunkte für jede Art von Kommentarereignis festlegen.
Für jede Art von Ereignis sollten Sie unbedingt auf Send Test Payload klicken, um sicherzustellen, dass Sie Ihre Integration korrekt eingerichtet haben. Siehe den nächsten Abschnitt "Testing" für Details.
Testen 
Im Webhooks-Admin gibt es für jeden Ereignistyp Send Test Payload-Schaltflächen (Erstellen, Aktualisieren, Löschen). Die Erstellen- und Aktualisieren-Ereignisse senden ein Dummy-WebhookComment-Objekt, während beim Testen des Lösch-Ereignisses ein Dummy-Anfragekörper mit nur einer ID gesendet wird.
Überprüfung der Payloads
Prüfen Sie beim Testen Ihrer Webhook-Integration, ob die eingehenden Anfragen die folgenden Header enthalten:
token- Ihr API-SecretX-FastComments-Timestamp- Unix-Zeitstempel (Sekunden)X-FastComments-Signature- HMAC-SHA256-Signatur
Verwenden Sie die HMAC-Signaturüberprüfung, um sicherzustellen, dass die Payloads authentisch sind.
Test-Tools
Sie können Tools wie webhook.site oder ngrok verwenden, um eingehende Webhook-Payloads während der Entwicklung einzusehen.
Ereignistypen
- Erstellen-Ereignis: Wird ausgelöst, wenn ein neuer Kommentar erstellt wird. Standardmethode: PUT
- Aktualisieren-Ereignis: Wird ausgelöst, wenn ein Kommentar bearbeitet wird. Standardmethode: PUT
- Löschen-Ereignis: Wird ausgelöst, wenn ein Kommentar gelöscht wird. Standardmethode: DELETE
Jedes Ereignis enthält die vollständigen Kommentardaten im Anfragekörper (siehe Datenstrukturen für das Payload-Format).
Datenstrukturen 
Die einzige Struktur, die per Webhooks gesendet wird, ist das WebhookComment-Objekt, unten in TypeScript dargestellt.
Die Struktur des WebhookComment-Objekts
Die "Create"-Ereignisstruktur
Der "create"-Ereignis-Request-Body ist ein WebhookComment-Objekt.
Die "Update"-Ereignisstruktur
Der "update"-Ereignis-Request-Body ist ein WebhookComment-Objekt.
Die "Delete"-Ereignisstruktur
Der "delete"-Ereignis-Request-Body ist ein WebhookComment-Objekt.
Änderung ab 14. Nov. 2023
Zuvor enthielt der Request-Body des "delete"-Ereignisses nur die Kommentar-ID. Jetzt enthält er den vollständigen Kommentar zum Zeitpunkt der Löschung.
Run 
When users are tagged in a comment, the information is stored in a list called mentions. Each object in that list
has the following structure.
Run 
HTTP-Methoden
Sie können die HTTP-Methode für jeden Webhook-Ereignistyp im Admin-Panel konfigurieren:
- Create-Ereignis: POST oder PUT (Standard: PUT)
- Update-Ereignis: POST oder PUT (Standard: PUT)
- Delete-Ereignis: DELETE, POST oder PUT (Standard: DELETE)
Da alle Requests eine ID enthalten, sind Create- und Update-Operationen standardmäßig idempotent (PUT). Die Wiederholung derselben Create- oder Update-Anfrage sollte auf Ihrer Seite keine doppelten Objekte erzeugen.
Request-Header
Jede Webhook-Anfrage enthält die folgenden Header:
| Header | Beschreibung |
|---|---|
Content-Type | application/json |
token | Ihr API Secret |
X-FastComments-Timestamp | Unix-Zeitstempel (Sekunden), als die Anfrage signiert wurde |
X-FastComments-Signature | HMAC-SHA256-Signatur (sha256=<hex>) |
Siehe Sicherheit & API-Tokens für Informationen zur Verifizierung 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.
Funktionsweise und Umgang mit Wiederholungsversuchen 
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.