
Taal 🇳🇱 Nederlands
Overzicht
Implementatie
Achter de schermen
Met FastComments is het mogelijk een API-eindpunt aan te roepen telkens wanneer een reactie aan ons systeem wordt toegevoegd, bijgewerkt of verwijderd.
Wij realiseren dit met asynchrone webhooks via HTTP/HTTPS.
Wat zijn Webhooks 
Een Webhook is een mechanisme, of een integratie, tussen twee systemen waar de "producent" (FastComments) een gebeurtenis die de "consument" (U) via een API-aanroep verwerkt.
Ondersteunde gebeurtenissen en bronnen 
FastComments ondersteunt webhooks alleen voor de Comment resource.
We ondersteunen webhooks voor comment-creatie, -verwijdering en bij comment-updates.
Elk van deze wordt in ons systeem als een apart evenement beschouwd en heeft daardoor verschillende semantiek en structuren voor de webhook events.
Lokale ontwikkelomgeving instellen 
Voor lokale ontwikkeling, gebruik een tool zoals ngrok.
Om het eenvoudiger te maken het systeem veilig te houden, volgt lokale ontwikkeling hetzelfde proces als het opzetten en beveiligen van andere omgevingen.
Stap 1: Voeg "localhost" toe aan de domeinen in uw account.
Voeg "localhost" als een domein hier toe.
Stap 2: Kies een API Key
We gaan webhook-configuratie toevoegen voor uw domein, dus we hebben een API Key nodig. Dat kunt u hier doen.
Onder "Koppel aan domein" - selecteer uw "localhost" domein.
OPMERKING: Als alternatief kunt u één API Secret gebruiken voor alle testactiviteiten en stagingomgevingen. Voeg eenvoudig een API Secret toe voor "Alle domeinen", en geef het een naam zoals "test".
Zorg ervoor dat u een API Secret heeft gedefinieerd voor uw productie-domein(en). Events voor alle andere domeinen zullen de wildcard (testing) secret gebruiken.
Stap 3: Voeg uw Webhook toe
Terwijl u ngrok of een vergelijkbare tool draait, stel de waarde voor "localhost" in hier.
When clicking Send Test Payload, we will send two test events to check that you validate the API key.
Once it validates, hit Save.
Stap 4: Voeg een opmerking toe
Nu kunt u reacties toevoegen, bewerken of verwijderen en zou u moeten zien dat we uw lokale ontwikkelmachine aanroepen met de events, met gebruik van uw testing API key. Er kan een vertraging van maximaal 30 seconden zijn voordat de events uw machine bereiken.
Installatie 
Volg dezelfde stappen voor localhost zoals je dat voor productie zou doen. Zorg ervoor dat je productiedomeinen en API Secrets hebt ingesteld.
Navigeer eerst naar de Webhooks admin. Dit is bereikbaar via Beheer gegevens -> Webhooks.
De configuratiepagina ziet er als volgt uit:
Op deze pagina kun je voor elk type reactiegebeurtenis eindpunten opgeven.
Voor elk type gebeurtenis, zorg ervoor dat je op Send Test Payload klikt om te controleren of je integratie correct is ingesteld. Zie de volgende sectie, "Testen", voor details.
Testen 
In de Webhooks-admin zijn Send Test Payload-knoppen voor elk evenementstype (Create, Update, Delete). De Create- en Update-events sturen een dummy WebhookComment-object, terwijl bij het testen van Delete een dummy verzoekbody wordt gestuurd met alleen een ID.
Payloads verifiëren
When testing your webhook integration, verify the incoming requests include the following headers:
token- Uw API-secretX-FastComments-Timestamp- Unix-tijdstempel (seconden)X-FastComments-Signature- HMAC-SHA256-handtekening
Gebruik de HMAC-handtekeningverificatie om te controleren of de payloads authentiek zijn.
Testtools
U kunt tools zoals webhook.site of ngrok gebruiken om binnenkomende webhook-payloads tijdens de ontwikkeling te inspecteren.
Evenementtypen
- Create Event: Wordt geactiveerd wanneer een nieuwe reactie wordt aangemaakt. Standaardmethode: PUT
- Update Event: Wordt geactiveerd wanneer een reactie wordt bewerkt. Standaardmethode: PUT
- Delete Event: Wordt geactiveerd wanneer een reactie wordt verwijderd. Standaardmethode: DELETE
Elk evenement bevat de volledige reactiedata in de verzoekbody (zie Gegevensstructuren voor het payload-formaat).
Datastructuren 
De enige structuur die via webhooks wordt verzonden is het WebhookComment-object, hieronder in TypeScript uiteengezet.
De structuur van het WebhookComment-object
De structuur van het "Create"-event
Het request body van het "create" event is een WebhookComment-object.
De structuur van het "Update"-event
Het request body van het "update" event is een WebhookComment-object.
De structuur van het "Delete"-event
Het request body van het "delete" event is een WebhookComment-object.
Wijziging per 14 nov 2023
Voorheen bevatte het request body van het "delete" event alleen de comment id. Het bevat nu de volledige opmerking op het moment van verwijdering.
Run 
Wanneer gebruikers worden getagd in een opmerking, wordt die informatie opgeslagen in een lijst genaamd mentions. Elk object in die lijst
heeft de volgende structuur.
Run 
HTTP-methoden
U kunt de HTTP-methode voor elk webhook-eventtype configureren in het beheerpaneel:
- Create Event: POST of PUT (standaard: PUT)
- Update Event: POST of PUT (standaard: PUT)
- Delete Event: DELETE, POST of PUT (standaard: DELETE)
Aangezien alle verzoeken een ID bevatten, zijn Create- en Update-bewerkingen standaard idempotent (PUT). Het herhalen van hetzelfde Create- of Update-verzoek zou geen dubbele objecten aan uw kant moeten aanmaken.
Request Headers
Elk webhook-verzoek bevat de volgende headers:
| Header | Beschrijving |
|---|---|
Content-Type |
application/json |
token |
Your API Secret |
X-FastComments-Timestamp |
Unix timestamp (seconds) when the request was signed |
X-FastComments-Signature |
HMAC-SHA256-handtekening (sha256=<hex>) |
Zie Security & API Tokens voor informatie over het verifiëren van de HMAC-handtekening.
Beveiliging & API-tokens 
FastComments webhookverzoeken bevatten meerdere authenticatiemechanismen voor beveiliging.
Verzonden headers
| Header | Beschrijving |
|---|---|
token |
Uw API Secret (voor achterwaartse compatibiliteit) |
X-FastComments-Timestamp |
Unix-timestamp (seconden) wanneer het verzoek werd ondertekend |
X-FastComments-Signature |
HMAC-SHA256-handtekening van de payload |
HMAC-handtekeningverificatie (aanbevolen)
We raden sterk aan de HMAC-handtekening te verifiëren om ervoor te zorgen dat webhook-payloads authentiek zijn en niet zijn gewijzigd.
Handtekeningformaat: sha256=<hex-encoded-signature>
Hoe de handtekening wordt berekend:
- Samenvoegen:
timestamp + "." + JSON_payload_body - Bereken HMAC-SHA256 met uw API Secret als sleutel
- Hex-encodeer het resultaat
Voorbeeldverificatie (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;
}
// Controleer of de timestamp recent is (binnen 5 minuten)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Ter voorkoming van replay-aanvallen
}
// Verifieer handtekening
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Voorbeeldverificatie (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
# Controleer of de timestamp recent is
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Verifieer handtekening
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}"
Voorbeeldverificatie (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Controleer of de timestamp recent is (binnen 5 minuten)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Verifieer handtekening
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Verouderde authenticatie
De token-header die uw API Secret bevat, wordt nog steeds verzonden voor achterwaartse compatibiliteit. We raden echter aan over te stappen op HMAC-verificatie voor verbeterde beveiliging, omdat dit beschermt tegen replay-aanvallen.
Hoe het werkt & het afhandelen van herhaalpogingen 
Alle wijzigingen aan het Comment object in het systeem veroorzaken een gebeurtenis die op een wachtrij terechtkomt.
Het initiële webhook-evenement wordt meestal binnen zes seconden na het optreden van de gebeurtenisbron verzonden.
U kunt deze wachtrij in de Webhooks-admin monitoren voor het geval uw API uitvalt.
Als een verzoek naar uw API faalt, plaatsen we het opnieuw in de wachtrij volgens een schema.
Dat schema is 1 Minute * the retry count. Als de oproep één keer faalt, zal er opnieuw een poging worden gedaan na
een minuut. Als het twee keer faalt, zal het vervolgens twee minuten wachten, en zo verder. Dit is zodat we
uw API niet overbelasten als uw API uitvalt door load-gerelateerde redenen.
Webhooks kunnen worden geannuleerd vanaf de logpagina.
Tot slot
Hiermee is onze Webhooks-documentatie afgerond.
We hopen dat je de FastComments Webhook-integratie gemakkelijk te begrijpen vindt en snel kunt instellen.
Als je denkt dat er hiaten in onze documentatie zitten, laat het ons hieronder weten.