
Језик 🇧🇦 Српски (БиХ)
Преглед
Имплементација
Иза кулиса
Uz FastComments moguće je pozvati API endpoint kad god se komentar doda, ažurira ili ukloni iz našeg sistema.
Ovo postižemo asinhronim webhookovima preko HTTP/HTTPS.
Шта су вебхукови 
A Webhook je mehanizam, odnosno integracija, između dva sistema gdje "proizvođač" (FastComments) pokreće događaj koji "potrošač" (Vi) konzumira putem API poziva.
Подржани догађаји и ресурси 
FastComments подржава webhook-ове само за ресурс Comment.
Подржавамо webhook-ове за креирање, уклањање и ажурирање коментара.
Сваки од ових се сматра засебним догађајем у нашем систему и као такав има различиту семантику и структуру за webhook догађаје.
Подешавање локалног развоја 
Za lokalni razvoj, koristite alat poput ngrok.
Da biste pojednostavili održavanje sigurnosti sistema, lokalni razvoj prati isti postupak kao i postavljanje i osiguravanje drugih okruženja.
Korak 1: Dodajte "localhost" u domene na vašem nalogu.
Dodajte "localhost" kao domen ovdje.
Korak 2: Odaberite API ključ
Dodavat ćemo konfiguraciju webhook-a za vaš domen, pa će nam trebati API ključ. Možete to uraditi ovdje.
U polju "Associate with domain" - odaberite vaš "localhost" domen.
NAPOMENA: Alternativno, možete koristiti jedan API Secret za svu test aktivnost i staging okruženja. Jednostavno dodajte API Secret za "All Domains", i dajte mu ime poput "test".
Osigurajte da imate definisan API Secret za vaše produkcijske domene. Događaji za sve ostale domene će koristiti wildcard (testni) secret.
Korak 3: Dodajte svoj webhook
Dok pokrećete ngrok ili sličan alat, postavite vrijednost za "localhost" ovdje.
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, uređivati ili brisati komentare i trebali biste vidjeti da pozivamo vašu lokalnu mašinu za razvoj sa događajima, koristeći vaš testni API ključ. Može postojati do 30 sekundi kašnjenja prije nego što događaji stignu do vaše mašine.
Подешавање 
Пратите исте кораке за localhost као и за production. Осигурајте да имате подешене production домене и API Secrets.
Прво, идите на Webhooks admin. Ово је доступно преко Manage Data -> Webhooks.
Страница за конфигурацију изгледа овако:
На овој страници можете назначити endpoints за сваку врсту догађаја коментара.
За сваки тип догађаја, обавезно кликните на Send Test Payload да бисте били сигурни да сте исправно подесили интеграцију. Погледајте следећу секцију, "Testing", за детаље.
Тестирање 
U Webhooks administraciji postoje dugmad Send Test Payload za svaki tip događaja (Kreiranje, Ažuriranje, Brisanje). Događaji Kreiranja i Ažuriranja šalju lažni objekat WebhookComment, dok testiranje Brisanja pošalje lažno tijelo zahtjeva koje sadrži samo ID.
Verifikacija payloada
Tokom testiranja vaše webhook integracije, provjerite da dolazni zahtjevi sadrže 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 da su payloadi autentični.
Alati za testiranje
Možete koristiti alate kao što su webhook.site ili ngrok za pregled dolaznih webhook payloada tokom razvoja.
Tipovi događaja
- Događaj kreiranja: Pokreće se kada se kreira novi komentar. Podrazumijevana metoda: PUT
- Događaj ažuriranja: Pokreće se kada se komentar izmijeni. Podrazumijevana metoda: PUT
- Događaj brisanja: Pokreće se kada se komentar obriše. Podrazumijevana metoda: DELETE
Svaki događaj uključuje pune podatke komentara u tijelu zahtjeva (pogledajte Strukture podataka za format payloada).
Структуре података 
Jedina struktura koja se šalje putem webhook-ova je objekat WebhookComment, prikazan u TypeScript-u ispod.
Struktura objekta WebhookComment
Struktura događaja "create"
Tijelo zahtjeva za događaj "create" je objekat WebhookComment.
Struktura događaja "update"
Tijelo zahtjeva za događaj "update" je objekat WebhookComment.
Struktura događaja "delete"
Tijelo zahtjeva za događaj "delete" je objekat WebhookComment.
Promjena od 14. novembra 2023.
Ranije je tijelo zahtjeva za događaj "delete" sadržavalo samo id komentara. Sada sadrži kompletan 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 Methods
You can configure the HTTP method for each webhook event type in the admin panel:
- Create Event: POST or PUT (default: PUT)
- Update Event: POST or PUT (default: PUT)
- Delete Event: DELETE, POST, or PUT (default: DELETE)
Since all requests contain an ID, Create and Update operations are idempotent by default (PUT). Repeating the same Create or Update request should not create duplicate objects on your side.
Request Headers
Each webhook request includes the following headers:
| Header | Description |
|---|---|
Content-Type |
application/json |
token |
Vaš API Secret |
X-FastComments-Timestamp |
Unix timestamp (sekunde) kada je zahtjev potpisan |
X-FastComments-Signature |
HMAC-SHA256 potpis (sha256=<hex>) |
See Sigurnost i API tokeni for information on verifying the HMAC signature.
Безбједност и API токени 
FastComments webhook захтјеви укључују више механизама аутентификације за безбједност.
Заглавља која се шаљу
| Header | Description |
|---|---|
token |
Ваш API Secret (ради повратне компатибилности) |
X-FastComments-Timestamp |
Unix временска ознака (у секундама) када је захтјев потписан |
X-FastComments-Signature |
HMAC-SHA256 потпис садржаја |
Верификација HMAC потписа (Препоручено)
Снажно препоручујемо верификацију HMAC потписа како бисте били сигурни да су подаци webhook-а аутентични и да им није промијењен садржај.
Формат потписа: sha256=<hex-encoded-signature>
Како се потпис рачуна:
- Конкатенишите:
timestamp + "." + JSON_payload_body - Израчунајте HMAC-SHA256 користећи ваш API Secret као кључ
- Хекс-енкодирајте резултат
Примјер верификације (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;
}
// Верификујте да је временска ознака недавна (у року од 5 минута)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Спречавање replay напада
}
// Верификујте потпис
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Примјер верификације (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
# Верификујте да је временска ознака недавна
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Верификујте потпис
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}"
Примјер верификације (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Верификујте да је временска ознака недавна (у року од 5 минута)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Верификујте потпис
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Насљедна аутентификација
Заглавље token које садржи ваш API Secret и даље се шаље ради повратне компатибилности. Међутим, препоручујемо прелазак на HMAC верификацију ради побољшане безбједности јер штити од поновљених напада.
Како функционише и руковање поновним покушајима 
Sve promjene na Comment objektu u sistemu pokreću događaj koji završi u redu.
Početni webhook događaj obično se š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 prestane raditi.
Ako zahtjev ka vašem API-ju ne uspije, ponovo ćemo ga staviti u red po rasporedu.
Taj raspored je 1 Minute * the retry count. Ako poziv ne uspije jednom, pokušaće ponovo za minutu. Ako ne uspije dva puta, onda će sačekati dvije minute, i tako dalje. Ovo je kako bismo izbjegli preopterećenje vašeg API-ja ako pada zbog razloga vezanih za opterećenje.
Webhooks se mogu otkazati sa stranice logova.
Zaključak
Ovo zaključuje našu dokumentaciju za Webhooks.
Nadamo se da je FastComments Webhook integracija laka za razumijevanje i brza za postavljanje.
Ako smatrate da ste uočili bilo kakve nedostatke u našoj dokumentaciji, obavijestite nas u nastavku.