
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 staan Send Test Payload-knoppen voor elk gebeurtenistype (Create, Update, Delete). De Create- en Update-gebeurtenissen sturen een dummy WebhookComment-object, terwijl bij het testen van Delete een dummy request body met alleen een ID wordt verzonden.
Verifiëren van payloads
Controleer bij het testen van je webhook-integratie of de binnenkomende verzoeken de volgende headers bevatten:
token- Your API SecretX-FastComments-Timestamp- Unix timestamp (seconds)X-FastComments-Signature- HMAC-SHA256 signature
Gebruik de HMAC-handtekeningverificatie om te zorgen dat payloads authentiek zijn.
Testtools
Je kunt tools zoals webhook.site of ngrok gebruiken om binnenkomende webhook-payloads tijdens de ontwikkeling te inspecteren.
Gebeurtenistypen
- Create-gebeurtenis: Wordt geactiveerd wanneer een nieuwe reactie wordt aangemaakt. Standaardmethode: PUT
- Update-gebeurtenis: Wordt geactiveerd wanneer een reactie wordt bewerkt. Standaardmethode: PUT
- Delete-gebeurtenis: Wordt geactiveerd wanneer een reactie wordt verwijderd. Standaardmethode: DELETE
Elke gebeurtenis bevat de volledige reactiegegevens in de request body (zie Gegevensstructuren voor het payloadformaat).
Datastructuren 
De enige structuur die via webhooks wordt verzonden is het WebhookComment-object, hieronder in TypeScript uiteengezet.
De WebhookComment Object-structuur
Structuur van het "create"-event
De request body van het "create" event is een WebhookComment-object.
Structuur van het "update"-event
De request body van het "update" event is een WebhookComment-object.
Structuur van het "delete"-event
De request body van het "delete" event is een WebhookComment-object.
Change as of Nov 14th 2023
Previously the "delete" event request body only contained the comment id. It now contains the full comment at the time of deletion.
Run 
Wanneer gebruikers in een reactie worden getagd, wordt de 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 type webhook-gebeurtenis configureren in het beheerderspaneel:
- Create Event: POST of PUT (standaard: PUT)
- Update Event: POST of PUT (standaard: PUT)
- Delete Event: DELETE, POST of PUT (standaard: DELETE)
Omdat alle requests een ID bevatten, zijn Create- en Update-bewerkingen standaard idempotent (PUT). Het opnieuw versturen van dezelfde Create- of Update-request zou geen dubbele objecten aan uw zijde mogen aanmaken.
Request Headers
Elke webhook-request bevat de volgende headers:
| Header | Beschrijving |
|---|---|
Content-Type |
application/json |
token |
Uw API Secret |
X-FastComments-Timestamp |
Unix-tijdstempel (seconden) waarop het verzoek werd ondertekend |
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.