
Jezik 🇷🇸 Srpski (Latinica)
Pregled
Implementacija
Iza kulisa
Webhooks
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 Webhook-ovi 
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 webhook‑ove samo za resurs Komentar.
Podržavamo webhook‑ove za kreiranje komentara, brisanje i ažuriranje.
Svaki od ovih smatra se posebnim događajem u našem sistemu i kao takav ima različitu semantiku
i strukture za webhook događaje.
Bilo koji broj krajnjih tačaka može da se pretplati na isti događaj, putem kontrolne table ili kroz API
(vidi Upravljanje webhook‑ovima putem API‑ja). Svaki webhook se isporučuje nezavisno.
Lokalno postavljanje za razvoj 
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.
Step 1: Add "localhost" to domains in your account.
Add "localhost" as a domain here.
Step 2: Pick an API Key
We're going to be adding webhook configuration for your domain, so we'll need an API key. You can do that here.
Under "Associate with domain" - select your "localhost" domain.
NOTE: Alternatively, you can use one API Secret for all testing activity and staging environments. Simply add an API Secret for "All Domains", and give it a name like "test".
Ensure you have an API Secret defined for your production domain(s). Events for all other domains will use the wildcard (testing) secret.
Step 3: Add Your Webhook
While running ngrok or similar tool, set the value for "localhost" here.
When clicking Send Test Payload, we will send two test events to check that you validate the API key.
Once it validates, hit Save.
Step 4: Add A Comment
Now you can add, edit, or delete comments and should see us call your local development machine with the events, using your testing API key. There may be up to 30 seconds delay for the events to reach your machine.
Postavka 
Follow the same steps for localhost as you would production. Ensure you have production domains and API Secrets setup.
First, navigate to the Webhooks admin. This is accessible via Manage Data -> Webhooks.
The page lists every webhook on your account:
Click New Webhook to add one. Each webhook has a URL, one comment event (created, updated or deleted), a domain, and an HTTP method:
Every webhook is delivered independently. You can send the same event to several endpoints, and a webhook scoped to All Domains receives comments from every domain even when a domain-specific webhook exists for the same event. The same URL, event and domain cannot be added twice.
Before saving, click Send Test Payload to check the endpoint accepts a signed request. See the next section, "Testing", for details.
From the list you can edit, disable, re-enable or delete a webhook. Disabling keeps queued events until the webhook is re-enabled; deleting discards them.
Webhooks can also be created through the API, for example by Zapier. Those appear in the same list with the source API. See Managing Webhooks via the API.
Testiranje 
The new and edit webhook pages have a Send Test Payload button that sends a request to the URL currently in the form, whether or not it has been saved. The Create and Update events send a dummy WebhookComment object, while testing Delete will send a dummy request body with just an ID.
Verifikacija payload‑ova
Kada testirate vašu webhook integraciju, proverite da dolazni zahtevi sadrže sledeća zaglavlja:
X-FastComments-Timestamp– Unix vremenski pečat (sekunde)X-FastComments-Signature– HMAC‑SHA256 potpis
Webhook‑ovi kreirani pre uvođenja šeme potpisa takođe primaju token zaglavlje koje sadrži vaš API Secret. Novi webhook‑ovi to ne rade.
Koristite verifikaciju HMAC potpisa da biste osigurali da su payload‑ovi autentični.
Alati za testiranje
Možete koristiti alate poput webhook.site ili ngrok da pregledate dolazne webhook payload‑ove tokom razvoja.
Tipovi događaja
- Create Event: Pokreće se kada se kreira novi komentar.
- Update Event: Pokreće se kada se komentar izmeni.
- Delete Event: Pokreće se kada se komentar obriše.
Svaki webhook je vezan za jedan događaj i jednu HTTP metodu (POST, PUT ili DELETE). Svaki događaj uključuje kompletne podatke o komentaru u telu zahteva (pogledajte Data Structures za format payload‑a).
Strukture podataka 
The only structure sent via webhooks is the WebhookComment object, outlined in TypeScript below.
Struktura objekta WebhookComment
Struktura događaja „Create“
The "create" event request body is a WebhookComment object.
Struktura događaja „Update“
The "update" event request body is a WebhookComment object.
Struktura događaja „Delete“
The "delete" event request body is a WebhookComment object.
Izmena od 14. novembra 2023.
Prethodno je telo zahteva za događaj „delete“ sadržalo samo ID komentara. Sada sadrži ceo komentar u trenutku brisanja.
Svaki ključ je uvek prisutan u telu. Kada komentar nema vrednost za neko polje, telo nosi null (ili false za logičke vrednosti i [] za liste), tako da oblik isporuke nikada ne varira od jednog komentara do drugog.
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 konfigurisati HTTP metodu za svaki tip webhook događaja u administratorskom panelu:
- Create događaj: POST ili PUT (podrazumevano: PUT)
- Update događaj: POST ili PUT (podrazumevano: PUT)
- Delete događaj: DELETE, POST ili PUT (podrazumevano: DELETE)
Pošto svi zahtevi sadrže ID, operacije Create i Update su po podrazumevanju idempotentne (PUT). Ponovljeni isti Create ili Update zahtev ne bi trebalo da kreira duple objekte na vašoj strani.
Zaglavlja zahteva
Svaki webhook zahtev uključuje sledeća zaglavlja:
| Zaglavlje | Opis |
|---|---|
Content-Type | application/json |
token | Vaša API tajna |
X-FastComments-Timestamp | Unix vremenski žig (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.
Upravljanje webhook-ovima putem API-ja 
Webhooks se takođe mogu upravljati putem REST API-ja. Ovo je način na koji integracije poput Zapiera pretplaćuju na događaje komentara bez korišćenja kontrolne table, i prati obrazac REST Hooks: pretplata, primanje događaja, otkazivanje pretplate.
API pretplate postoje uz webhooks konfigurirane u kontrolnoj tabli. Događaj komentara se isporučuje svakom webhooku koji odgovara njegovom domenu, svaki kao zasebna isporuka, bez obzira kako je webhook kreiran.
Autentifikacija
Svaki zahtev zahteva vaš API ključ u zaglavlju x-api-key (ili u parametru upita API_KEY) i ID vašeg zakupca u parametru upita tenantId. Obe vrednosti su prikazane na stranici API tajne u kontrolnoj tabli.
Pretplata
POST https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
x-api-key: YOUR_API_KEY
Content-Type: application/json
{
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created"
}| Polje | Obavezno | Opis |
|---|---|---|
url | Yes | Apsolutni http ili https URL. |
event | Yes | comment-created, comment-updated or comment-deleted. |
domain | No | Domena iz konfiguracije vašeg naloga. Podrazumevano je *, što prima događaje za svaki domen. |
method | No | POST (default), PUT or DELETE. |
Odgovor sadrži pretplatu:
{
"status": "success",
"webhook": {
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"url": "https://hooks.zapier.com/hooks/catch/123/abc",
"event": "comment-created",
"domain": "*",
"method": "POST",
"source": "api",
"enabled": true,
"createdAt": "2026-09-08T12:00:00.000Z"
}
}
Ponovno pretplata na isti URL za isti događaj i domen vraća postojeću pretplatu umesto kreiranja duplikata, tako da klijent može bezbedno ponoviti zahtev. Svaki zakupac može imati može do 50 API pretplata.
Lista
GET https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
Vraća sve webhookove za zakupca, uključujući i one upravljane u kontrolnoj tabli ("source": "dashboard"). Filtrirajte po event, domain ili source.
Otkaži pretplatu
DELETE https://fastcomments.com/api/v1/webhooks/SUBSCRIPTION_ID?tenantId=YOUR_TENANT_ID
Brisanje pretplate takođe odbacuje sve događaje koji su još u redu za nju. Samo pretplate kreirane putem API-ja mogu se izbrisati na ovaj način; webhook iz kontrolne table, ili ID koji ne postoji na vašem nalogu, odgovara sa 404 i kodom not-found. Webhookovi iz kontrolne table se uređuju na stranici Webhooks.
Payload-ovi i potpisivanje
Isporuke koriste isti payload kao webhookovi iz kontrolne table (pogledajte Data Structures) i potpisane su istim HMAC šemom (pogledajte Security & API Tokens). API pretplate nikada ne primaju zastarelo zaglavlje token, pa proverite zaglavlje X-FastComments-Signature.
Primeri payload-ova
GET https://fastcomments.com/api/v1/webhooks/sample-payloads?tenantId=YOUR_TENANT_ID&event=comment-created&limit=3
Vraća najnovije komentare naloga u tačno onom obliku koji isporuka nosi, tako da integracija može prikazati stvarne uzorke podataka pre nego što prvi događaj stigne. event je opcionalan i samo se validira, pošto svaki događaj isporučuje isti objekat komentara. limit podrazumevano je 3 i prihvata vrednosti od 1 do 10. Troši 2 API kredita.
{
"status": "success",
"payloads": [
{
"id": "66f1c4c1e7a2b3d4f5a6b7c8",
"urlId": "https://example.com/blog/hello-world",
"commenterName": "Jane Reader",
"comment": "Great article!",
"date": "2026-09-08T12:00:00.000Z",
"approved": true
}
]
}
Odgovor sa 410 Gone
Ako endpoint API pretplate odgovori HTTP 410 Gone, FastComments to tretira kao otkazivanje pretplate: pretplata se briše zajedno sa svojim događajima u redu, i ne pokušavaju se dalje isporuke. Webhookovi konfigurirani u kontrolnoj tabli se nikada ne brišu automatski; za njih je 410 običan neuspeh. Svaki drugi status greške se ponovo pokušava i na kraju onemogućava webhook, kako je opisano u sekciji How it Works & Handling Retries.
Kontrolna tabla
API pretplate se pojavljuju u listi Webhookova sa izvorom API, gde administrator može da ih uređuje, onemogući, ponovo omogući ili obriše.
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.