
Jezik 🇭🇷 Hrvatski
Pregled
Implementacija
Iza kulisa
Uz FastComments moguće je pozvati API endpoint kad god se komentar doda, ažurira ili ukloni iz našeg sustava.
Ovo ostvarujemo pomoću asinkronih webhookova preko HTTP/HTTPS.
Što su webhookovi 
Webhook je mehanizam, ili integracija, između dvaju sustava gdje "proizvođač" (FastComments) pokreće događaj koji "potrošač" (Vi) konzumira putem API poziva.
Podržani događaji i resursi 
FastComments podržava webhooks samo za resurs Comment.
Podržavamo webhooks za stvaranje komentara, uklanjanje komentara i ažuriranje komentara.
Svaki od njih smatra se zasebnim događajem u našem sustavu i kao takav ima drugačiju semantiku i strukturu za webhook događaje.
Postavljanje lokalnog razvojnog okruženja 
Za lokalni razvoj koristite alat poput ngrok.
Kako bismo pojednostavili održavanje sigurnosti sustava, lokalni razvoj slijedi isti postupak kao i postavljanje i osiguravanje drugih okruženja.
Korak 1: Dodajte "localhost" među domene na vašem računu.
Dodajte "localhost" kao domenu ovdje.
Korak 2: Odaberite API ključ
Dodavat ćemo konfiguraciju web-hooka za vašu domenu, pa ćemo trebati API ključ. To možete napraviti ovdje.
Under "Associate with domain" - select your "localhost" domain.
NAPOMENA: Alternativno, možete koristiti jedan API Secret za sve testne aktivnosti i staging okruženja. Jednostavno dodajte API Secret za "All Domains" i dajte mu ime poput "test".
Pobrinite se da imate definirani API Secret za svoje produkcijske domene. Događaji za sve ostale domene koristit će wildcard (testing) secret.
Korak 3: Dodajte svoj webhook
Dok pokrećete ngrok ili sličan alat, postavite vrijednost za "localhost" ovdje.
Klikom na Send Test Payload poslat ćemo dva testna događaja kako bismo provjerili valjanost vašeg API ključa.
Kad se potvrdi, pritisnite Save.
Korak 4: Dodajte komentar
Sada možete dodavati, uređivati ili brisati komentare i trebali biste vidjeti kako pozivamo vaše lokalno razvojno računalo s događajima, koristeći vaš testni API ključ. Može doći do kašnjenja do 30 sekundi za događaji stignu do vašeg računala.
Postavljanje 
Slijedite iste korake za localhost kao i za produkciju. Provjerite imate li postavljene produkcijske domene i API Secrets.
Prvo, idite na Administracija Webhookova. Do toga se dolazi putem Upravljanje podacima -> Webhookovi.
Stranica za konfiguraciju izgleda ovako:
Na ovoj stranici možete navesti krajnje točke za svaku vrstu događaja komentara.
Za svaku vrstu događaja obavezno kliknite Pošalji testni payload kako biste osigurali da ste pravilno postavili svoju integraciju. Pogledajte sljedeći odjeljak, "Testiranje", za detalje.
Testiranje 
U upravljačkom sučelju za Webhookse postoje gumbi Send Test Payload za svaku vrstu događaja (Create, Update, Delete). Događaji Create i Update šalju lažni WebhookComment objekt, dok testiranje Delete šalje lažno tijelo zahtjeva s samo ID-om.
Provjera payloadova
Prilikom testiranja integracije webhooka, provjerite da dolazni zahtjevi uključuju sljedeća zaglavlja:
token- Vaš API tajni ključX-FastComments-Timestamp- Unix vremenska oznaka (sekunde)X-FastComments-Signature- HMAC-SHA256 potpis
Koristite verifikaciju HMAC potpisa kako biste osigurali autentičnost payloadova.
Alati za testiranje
Možete koristiti alate poput webhook.site ili ngrok za pregled dolaznih webhook payloadova tijekom razvoja.
Vrste događaja
- Create Event: Pokreće se kada se stvori novi komentar. Zadana metoda: PUT
- Update Event: Pokreće se kada se komentar uređuje. Zadana metoda: PUT
- Delete Event: Pokreće se kada se komentar obriše. Zadana metoda: DELETE
Svaki događaj uključuje potpune podatke komentara u tijelu zahtjeva (pogledajte Strukture podataka za format payloada).
Strukture podataka 
Jedina struktura koja se šalje putem webhookova je objekt WebhookComment, prikazan u TypeScriptu u nastavku.
Struktura objekta WebhookComment
Struktura događaja "create"
Tijelo zahtjeva za događaj "create" je objekt WebhookComment.
Struktura događaja "update"
Tijelo zahtjeva za događaj "update" je objekt WebhookComment.
Struktura događaja "delete"
Tijelo zahtjeva za događaj "delete" je objekt WebhookComment.
Promjena od 14. studenog 2023.
Ranije je tijelo zahtjeva za događaj "delete" sadržavalo samo id komentara. Sada sadrži puni komentar u trenutku brisanja.
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 metode
Možete konfigurirati HTTP metodu za svaku vrstu webhook događaja u administratorskom sučelju:
- Create Event: POST ili PUT (zadano: PUT)
- Update Event: POST ili PUT (zadano: PUT)
- Delete Event: DELETE, POST, ili PUT (zadano: DELETE)
Budući da svi zahtjevi sadrže ID, operacije Create i Update su po defaultu idempotentne (PUT). Ponavljanje istog Create ili Update zahtjeva ne bi trebalo stvarati duplikate objekata na vašoj strani.
Zaglavlja zahtjeva
Svaki webhook zahtjev uključuje sljedeća zaglavlja:
| Zaglavlje | Opis |
|---|---|
Content-Type |
application/json |
token |
Vaš API Secret |
X-FastComments-Timestamp |
Unix vremenska oznaka (sekunde) kada je zahtjev potpisan |
X-FastComments-Signature |
HMAC-SHA256 potpis (sha256=<hex>) |
Pogledajte Sigurnost i API tokeni za informacije o provjeri HMAC potpisa.
Sigurnost i API tokeni 
FastComments webhook zahtjevi uključuju više mehanizama provjere autentičnosti radi sigurnosti.
Zaglavlja koja se šalju
| Zaglavlje | Opis |
|---|---|
token |
Vaš API Secret (za kompatibilnost unatrag) |
X-FastComments-Timestamp |
Unix vremenska oznaka (sekunde) kada je zahtjev potpisan |
X-FastComments-Signature |
HMAC-SHA256 potpis payloada |
Verifikacija HMAC potpisa (preporučeno)
Toplo preporučujemo provjeru HMAC potpisa kako biste osigurali da su webhook podaci autentični i da nisu izmijenjeni.
Format potpisa: sha256=<hex-encoded-signature>
Kako se potpis izračunava:
- Spojite:
timestamp + "." + JSON_payload_body - Izračunajte HMAC-SHA256 koristeći svoj API Secret kao ključ
- Hex-kodirajte rezultat
Primjer verifikacije (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;
}
// Provjerite je li vremenska oznaka svježa (u roku od 5 minuta)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Sprječavanje replay napada
}
// Provjerite potpis
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Primjer verifikacije (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
# Provjerite je li vremenska oznaka svježa
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Provjerite potpis
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}"
Primjer verifikacije (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Provjerite je li vremenska oznaka svježa (u roku od 5 minuta)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Provjerite potpis
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Naslijeđena autentikacija
token zaglavlje koje sadrži vaš API Secret i dalje se šalje radi kompatibilnosti unatrag. Međutim, preporučujemo prelazak na HMAC provjeru radi poboljšane sigurnosti jer štiti od replay napada.
Kako funkcionira i rukovanje ponovnim pokušajima 
Sve promjene na objektu Comment u sustavu pokreću događaj koji završi u redu.
Početni webhook događaj obično se šalje unutar šest sekundi od nastanka izvora događaja.
Ovaj red možete nadzirati u administratorskom sučelju Webhooks u slučaju da vaš API padne.
Ako zahtjev prema vašem API-ju ne uspije, ponovno ćemo ga staviti u red prema rasporedu.
Taj raspored je 1 Minute * the retry count. Ako poziv ne uspije jednom, pokušat će ponovno za
minutu. Ako ne uspije dvaput, tada će pričekati dvije minute, i tako dalje. Ovo je kako bismo
izbjegli preopterećenje vašeg API-ja ako pada iz razloga povezanih s opterećenjem.
Webhooks se mogu otkazati sa stranice zapisnika.
Zaključno
Ovim završava naša dokumentacija za Webhooks.
Nadamo se da integraciju FastComments Webhooka smatrate jednostavnom za razumijevanje i brzom za postavljanje.
Ako smatrate da ste u našoj dokumentaciji uočili neke nedostatke, javite nam u nastavku.