
Језик 🇧🇦 Српски (БиХ)
Преглед
Имплементација
Иза кулиса
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", за детаље.
Тестирање 
У Webhooks админ панелу налазе се дугмад Send Test Payload за сваку врсту догађаја (Create, Update, Delete). Create и Update догађаји шаљу лажни WebhookComment објекат, док тестирање Delete шаље лажно тијело захтева са само ID-јем.
Верификација пейлоада
Када тестирате вашу интеграцију вебхука, проверите да долазни захтјеви садрже сљедећа заглавља:
token- Ваш API SecretX-FastComments-Timestamp- Unix временска ознака (секунде)X-FastComments-Signature- HMAC-SHA256 потпис
Користите HMAC верификацију потписа да бисте осигурали да су пейлоади аутентични.
Алатке за тестирање
Можете користити алате попут webhook.site или ngrok за инспекцију долазних webhook пейлоада током развоја.
Врсте догађаја
- Create Event: Покреће се када се креира нови коментар. Задана метода: PUT
- Update Event: Покреће се када се коментар уреди. Задана метода: PUT
- Delete Event: Покреће се када се коментар обрише. Задана метода: DELETE
Сваки догађај укључује потпуне податке коментара у тијелу захтјева (погледајте Структуре података за формат пейлоада).
Структуре података 
Једина структура која се шаље преко webhook-ова је WebhookComment објекат, описан у TypeScript-у испод.
Структура WebhookComment објекта
Структура догађаја "create"
Тијело захтјева за догађај "create" је WebhookComment објекат.
Структура догађаја "update"
Тијело захтјева за догађај "update" је WebhookComment објекат.
Структура догађаја "delete"
Тијело захтјева за догађај "delete" је WebhookComment објекат.
Промјена од 14. новембра 2023.
Претходно је тијело захтјева за догађај "delete" садржало само id коментара. Сада садржи цео коментар у тренутку брисања.
Run 
Када су корисници означени у коментару, информације се чувају у листи названој mentions. Сваки објекат у тој листи има сљедећу структуру.
Run 
HTTP методе
Можете конфигурисати HTTP метод за сваки тип webhook догађаја у административном панелу:
- Догађај "create": POST или PUT (подразумевано: PUT)
- Догађај "update": POST или PUT (подразумевано: PUT)
- Догађај "delete": DELETE, POST или PUT (подразумевано: DELETE)
Пошто сви захтјеви садрже ID, операције креирања и ажурирања су подразумевано идемпотентне (PUT). Понављање истог захтјева за креирање или ажурирање не би требало да створи дупликате на вашој страни.
Заглавља захтјева
Сваки webhook захтјев садржи сљедећа заглавља:
| Header | Description |
|---|---|
Content-Type |
application/json |
token |
Ваш API тајни кључ |
X-FastComments-Timestamp |
Unix временска ознака (секунде) када је захтјев потписан |
X-FastComments-Signature |
HMAC-SHA256 потпис (sha256=<hex>) |
Погледајте Сигурност и API токени за информације о провјери HMAC потписа.
Безбједност и 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.