
Језик 🇲🇪 Српски (Црна Гора)
Преглед
Имплементација
Иза кулиса
Са FastComments-ом је могуће позвати API крајњу тачку кад год се коментар дода, ажурира или уклони из нашег система.
Ово постигавамо асинхроним вебхуковима преко HTTP/HTTPS.
Шта су вебхукови 
Вебхук је механизам, или интеграција, између два система где "произвођач" (FastComments) покреће догађај који "потрошач" (Ви) прима путем API позива.
Подржани догађаји и ресурси 
FastComments подржава вебхукове само за ресурс Comment.
Подржавамо вебхукове за креирање, уклањање и ажурирање коментара.
Сваки од њих се у нашем систему сматра посебним догађајем и као такав има различиту семантику и структуру за вебхук догађаје.
Подешавање за локални развој 
За локални развој, користите алат као што је ngrok.
Да бисте поједноставили одржавање безбедности система, локални развој прати исти процес као и подешавање и обезбеђење других окружења.
Корак 1: Додајте "localhost" у домене на вашем налогу.
Додајте "localhost" као домен овде.
Корак 2: Изаберите API кључ
Додаваћемо конфигурацију вебхука за ваш домен, па ће нам бити потребан API кључ. Можете то урадити овде.
Под "Associate with domain" - изаберите ваш "localhost" домен.
НАПОМЕНА: Алтернативно, можете користити један API Secret за сву тест активност и staging окружења. Једноставно додајте API Secret за "All Domains", и дајте му име као "test".
Осигурајте да имате дефинисан API Secret за ваше производне домене. Догађаји за све остале домене користиће wildcard (testing) secret.
Корак 3: Додајте ваш вебхук
Док покрећете ngrok или сличан алат, подесите вредност за "localhost" овде.
When clicking Send Test Payload, we will send two test events to check that you validate the API key.
Once it validates, hit Save.
Корак 4: Додајте коментар
Сада можете додавати, мењати или брисати коментаре и требало би да видите да ћемо позвати вашу локалну машину за развој са догађајима, користећи ваш тестни API кључ. Може бити до 30 секунди кашњења да догађаји не стигну до ваше машине.
Подешавање 
Пратите исте кораке за localhost као и за production. Убедите се да имате подешене production домене и API Secrets.
Прво, идите на Webhooks админ. Ово је доступно преко Управљање подацима -> Webhooks.
Страница за конфигурацију изгледа на следећи начин:
На овој страници можете назначити endpoints за сваку врсту догађаја у вези са коментарима.
За сваку врсту догађаја, обавезно кликните Send Test Payload како бисте били сигурни да сте правилно подесили интеграцију. Погледајте следећи одељак „Тестирање“ за детаље.
Тестирање 
У Webhooks административном панелу постоје дугмад Send Test Payload за сваки тип догађаја (Create, Update, Delete). Догађаји Create и Update шаљу примерни објекат WebhookComment, док тестирање Delete шаље примеро тело захтева са само ID-јем.
Верификација података захтева
Приликом тестирања ваше webhook интеграције, провјерите да долазни захтјеви садрже сљедећа заглавља:
token- Ваша API тајнаX-FastComments-Timestamp- Unix временски печат (секунде)X-FastComments-Signature- HMAC-SHA256 потпис
Користите верификацију HMAC потписа да бисте потврдили да су подаци захтјева аутентични.
Алати за тестирање
Можете користити алате као што су webhook.site или ngrok да бисте инспектовали долазне податке вебхука током развоја.
Типови догађаја
- 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)
Пошто сви захтјеви садрже ИД, операције Create и Update су по дифолту идемпотентне (PUT). Понављање истог Create или Update захтјева не би требало да створи дупликате објеката на вашој страни.
Заглавља захтјева
Сваки webhook захтјев укључује сљедећа заглавља:
| Заглавље | Опис |
|---|---|
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 потпис података (payload) |
Верификација HMAC потписа (препоручено)
Снажно препоручујемо верификацију HMAC потписа како бисте осигурали да су payload-ови вебхука аутентични и да нису биле измене.
Формат потписа: sha256=<hex-encoded-signature>
Како се потпис израчунава:
- Concatenate:
timestamp + "." + JSON_payload_body - Compute HMAC-SHA256 using your API Secret as the key
- Hex-encode the result
Пример верификације (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 верификацију за побољшану безбедност јер штити од replay напада.
Како функционише и руковање поновним покушајима 
Све измјене на Comment објекту у систему покрећу догађај који завршава у реду.
Почетни webhook догађај обично се шаље у року од шест секунди од настанка извора догађаја.
Можете пратити овај ред у Webhooks admin у случају да ваш API престане да ради.
Ако захтјев ка вашем API-ју не успије, ми ћемо га поново ставити у ред према распореду.
Тај распоред је 1 Minute * the retry count. Ако позив не успије једном, покушаће поново за минуту. Ако не успије два пута, онда ће саčekати двије минуте, и тако даље. Ово је да не преоптеретимо ваш API ако он пада због оптерећења.
Webhooks се могу отказати са странице дневника.
У закључку
Ово завршава нашу документацију за Webhooks.
Надамо се да ћете сматрати да је FastComments Webhook интеграција лака за разумјевање и брза за подешавање.
Ако сматрате да сте идентификовали било какве празнине у нашој документацији, обавијестите нас испод.