
Jezik 🇷🇸 Srpski (Latinica)
Pregled
Implementacija
Iza kulisa
Sa FastComments moguće je pozvati API endpoint kad god se komentar doda, ažurira ili ukloni iz našeg sistema.
To ostvarujemo asinhronim webhooks preko HTTP/HTTPS.
Šta su webhookovi 
A Webhook je mehanizam, odnosno integracija, između dva sistema gde "proizvođač" (FastComments) okida događaj koji "potrošač" (Vi) preuzima putem API poziva.
Podržani događaji i resursi 
FastComments podržava webhookove samo za resurs Comment.
Podržavamo webhookove za kreiranje komentara, uklanjanje i ažuriranje.
Svaki od ovih smatra se zasebnim događajem u našem sistemu i kao takav ima različitu semantiku i strukturu za webhook događaje.
Podešavanje lokalnog razvoja 
For Local development, use a tool like ngrok.
In order to simplify keeping the system secure, local development follows the same process as setting up and securing other environments.
Korak 1: Dodajte "localhost" u domene na svom nalogu.
Dodajte "localhost" kao domen ovde.
Korak 2: Odaberite API Key
Dodaćemo konfiguraciju webhook-a za vaš domen, pa će nam trebati API Key. To možete uraditi ovde.
Under "Associate with domain" - select your "localhost" domain.
NAPOMENA: Alternativno, možete koristiti jedan API Secret za svu test aktivnost i staging okruženja. Jednostavno dodajte API Secret za "All Domains", i nazovite ga npr. "test".
Ensure you have an API Secret defined for your production domain(s). Events for all other domains will use the wildcard (testing) secret.
Korak 3: Dodajte svoj webhook
Dok pokrećete ngrok ili sličan alat, podesite vrednost za "localhost" ovde.
When clicking Send Test Payload, we will send two test events to check that you validate the API key.
Once it validates, hit Save.
Korak 4: Dodajte komentar
Sada možete dodavati, izmenjivati ili brisati komentare i trebalo bi da vidite kako pozivamo vašu lokalnu razvojnu mašinu sa događajima, koristeći vaš testing API key. Može biti do 30 sekundi kašnjenja dok događaji ne stignu do vaše mašine.
Podešavanje 
Pratite iste korake za localhost kao što biste radili za produkciju. Uverite se da imate podešene produkcione domene i API Secrets.
Prvo, idite na Webhooks admin. Ovo je dostupno putem Manage Data -> Webhooks.
The configuration page appears as follows:
Na ovoj stranici možete navesti endpoint-e za svaki tip događaja vezanog za komentare.
Za svaki tip događaja, obavezno kliknite Send Test Payload kako biste bili sigurni da ste ispravno podesili integraciju. Pogledajte naredni odeljak, "Testiranje", za detalje.
Testiranje 
U Webhooks admin postoje Send Test Payload dugmad za svaki tip događaja (Create, Update, Delete). Događaji Create i Update šalju dummy objekat WebhookComment, dok će testiranje Delete poslati dummy telo zahteva sa samo ID-jem.
Provera payload-ova
Prilikom testiranja vaše webhook integracije, proverite da dolazni zahtevi uključuju sledeće zaglavlja:
token- Vaš API SecretX-FastComments-Timestamp- Unix timestamp (sekunde)X-FastComments-Signature- HMAC-SHA256 potpis
Koristite verifikaciju HMAC potpisa da biste osigurali da su payload-ovi autentični.
Alati za testiranje
Možete koristiti alate kao što su webhook.site ili ngrok da pregledate dolazne webhook payload-ove tokom razvoja.
Tipovi događaja
- Create Event: Pokreće se kada je kreiran novi komentar. Podrazumevana metoda: PUT
- Update Event: Pokreće se kada je komentar izmenjen. Podrazumevana metoda: PUT
- Delete Event: Pokreće se kada je komentar obrisan. Podrazumevana metoda: DELETE
Svaki događaj uključuje kompletne podatke komentara u telu zahteva (pogledajte Strukture podataka za format payload-a).
Strukture podataka 
Jedina struktura koja se šalje putem webhooks je objekat WebhookComment, prikazan u TypeScript-u ispod.
Struktura objekta WebhookComment
Struktura događaja "Create"
Telo zahteva za događaj "create" je objekat WebhookComment.
Struktura događaja "Update"
Telo zahteva za događaj "update" je objekat WebhookComment.
Struktura događaja "Delete"
Telo zahteva za događaj "delete" je objekat WebhookComment.
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 
Kada su korisnici označeni u komentaru, informacije se čuvaju u listi koja se zove mentions. Svaki objekat u toj listi
ima sledeću strukturu.
Run 
HTTP metode
Možete konfigurisati HTTP metodu za svaki tip webhook događaja u administratorskom panelu:
- Create Event: POST ili PUT (podrazumevano: PUT)
- Update Event: POST ili PUT (podrazumevano: PUT)
- Delete Event: DELETE, POST, ili PUT (podrazumevano: DELETE)
Pošto svi zahtevi sadrže ID, Create i Update operacije su idempotentne po defaultu (PUT). Ponavljanje istog Create ili Update zahteva ne bi trebalo da kreira duplikate objekata kod vas.
Zaglavlja zahteva
Svaki webhook zahtev uključuje sledeća zaglavlja:
| Zaglavlje | Opis |
|---|---|
Content-Type |
application/json |
token |
Vaš API Secret |
X-FastComments-Timestamp |
Unix vremenski pečat (sekunde) kada je zahtev potpisan |
X-FastComments-Signature |
HMAC-SHA256 potpis (sha256=<hex>) |
Pogledajte Bezbednost i API tokeni za informacije o verifikaciji HMAC potpisa.
Bezbednost i API tokeni 
FastComments webhook zahtevi uključuju više mehanizama autentifikacije radi bezbednosti.
Zaglavlja koja se šalju
| Zaglavlje | Opis |
|---|---|
token |
Vaš API Secret (za unazadnu kompatibilnost) |
X-FastComments-Timestamp |
Unix timestamp (sekunde) kada je zahtev potpisan |
X-FastComments-Signature |
HMAC-SHA256 potpis payload-a |
Verifikacija HMAC potpisa (Preporučeno)
Toplo preporučujemo verifikaciju HMAC potpisa kako biste osigurali da su webhook payload-ovi autentični i da nisu izmenjeni.
Format potpisa: sha256=<hex-encoded-signature>
Kako se potpis izračunava:
- Sastavite:
timestamp + "." + JSON_payload_body - Izračunajte HMAC-SHA256 koristeći vaš API Secret kao ključ
- Hex-enkodirajte rezultat
Primer 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;
}
// Proverite da je timestamp recentan (u roku od 5 minuta)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Prevencija replay napada
}
// Proverite potpis
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Primer 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
# Proverite da je timestamp recentan
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Proverite 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}"
Primer verifikacije (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Proverite da je timestamp recentan (u roku od 5 minuta)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Proverite potpis
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Nasleđena autentifikacija
Zaglavlje token koje sadrži vaš API Secret se i dalje šalje za unazadnu kompatibilnost. Međutim, preporučujemo migraciju na HMAC verifikaciju za poboljšanu bezbednost, jer štiti od replay napada.
Kako funkcioniše i rukovanje ponovnim pokušajima 
Sve promene Comment objekta u sistemu pokreću događaj koji se na kraju nađe u redu.
Početni webhook događaj se obično šalje u roku od šest sekundi od nastanka izvora događaja.
Možete pratiti ovaj red u Webhooks adminu u slučaju da vaš API bude nedostupan.
Ako zahtev prema vašem API-ju ne uspe, ponovo ćemo ga staviti u red po rasporedu.
Taj raspored je 1 Minute * the retry count. Ako poziv ne uspe jednom, pokušaće ponovo za minut. Ako ne uspe dvaput, onda će sačekati dva minuta, i tako dalje. To je da ne bismo preopteretili vaš API ako on pada zbog razloga povezanih sa opterećenjem.
Webhooks se mogu otkazati sa stranice logova.
Zaključno
Ovim se završava naša Webhooks dokumentacija.
Nadamo se da ćete smatrati da je FastComments Webhook integracija jednostavna za razumevanje i brza za postavljanje.
Ako smatrate da ste uočili neke nedostatke u našoj dokumentaciji, obavestite nas u nastavku.