
Jezik 🇸🇮 Slovenščina
Pregled
Implementacija
V ozadju
Webhooki
Z FastComments je mogoče poklicati API endpoint vsakič, ko je komentar dodan, posodobljen ali odstranjen iz našega sistema.
To dosežemo z asinhronimi webhooks prek HTTP/HTTPS.
Kaj so webhooki 
Webhook je mehanizem, ali integracija, med dvema sistemoma, kjer "producent" (FastComments) sproži dogodek ki ga "potrošnik" (Vi) prejme prek API klica.
Podprti dogodki in viri 
FastComments podpira webhooks samo za vir Comment.
Podpiramo webhooks za ustvarjanje komentarjev, odstranjevanje in posodobitev.
Vsak od teh se v našem sistemu šteje kot ločen dogodek in zato ima različne semantike in strukture za webhook dogodke.
Poljubno število končnih točk se lahko naroči na isti dogodek, iz nadzorne plošče ali prek API-ja (glejte Managing Webhooks via the API). Vsak webhook se dostavi neodvisno.
Nastavitev lokalnega razvoja 
Za lokalni razvoj uporabite orodje, kot je ngrok.
Da poenostavimo vzdrževanje varnosti sistema, lokalni razvoj sledi istemu postopku kot nastavitev in zavarovanje drugih okolij.
Korak 1: Dodajte "localhost" med domene v vašem računu.
Dodajte "localhost" kot domeno tukaj.
Korak 2: Izberite API ključ
Dodali bomo konfiguracijo webhooka za vašo domeno, zato potrebujemo API ključ. To lahko storite tukaj.
Pod "Associate with domain" - izberite svojo domeno "localhost".
OPOMBA: Alternativno lahko uporabite en API skrivni ključ za vso testno dejavnost in testna (staging) okolja. Preprosto dodajte API skrivni ključ za "All Domains" in ga poimenujte npr. "test".
Poskrbite, da imate definiran API skrivni ključ za vaše produkcijske domene. Dogodki za vse ostale domene bodo uporabili wildcard (testni) ključ.
Korak 3: Dodajte svoj webhook
Medtem ko teče ngrok ali podobno orodje, nastavite vrednost za "localhost" tukaj.
Ko kliknete Send Test Payload, bomo poslali dva testna dogodka, da preverimo, ali potrdujete API ključ.
Ko se potrditev uspešno zaključi, kliknite Save.
Korak 4: Dodajte komentar
Zdaj lahko dodajate, urejate ali brišete komentarje in videli boste, da pokličemo vaš lokalni razvojni računalnik z dogodki, pri čemer uporabljamo vaš testni API ključ. Lahko pride do zamika do 30 sekund, preden dogodki dosežejo vaš računalnik.
Nastavitev 
Za localhost sledite istim korakom kot pri produkciji. Poskrbite, da imate nastavljene produkcijske domene in API skrivnosti.
Najprej odprite Webhooks admin. Dostopen je prek Manage Data -> Webhooks.
Stran prikaže vse webhook-e na vašem računu:
Kliknite New Webhook, da dodate novega. Vsak webhook ima URL, en dogodek komentarja (ustvarjen, posodobljen ali izbrisan), domeno in HTTP metodo:
Vsak webhook se dostavlja neodvisno. Isti dogodek lahko pošljete na več končnih točk, webhook, določen na All Domains, pa prejema komentarje z vseh domen, tudi če obstaja webhook za določeno domeno za isti dogodek. Istega URL-ja, dogodka in domene ni mogoče dodati dvakrat.
Pred shranjevanjem kliknite Send Test Payload, da preverite, ali končna točka sprejema podpisan zahtevek. Podrobnosti si oglejte v naslednjem razdelku »Testiranje«.
S seznama lahko webhook uredite, onemogočite, ponovno omogočite ali izbrišete. Onemogočanje ohrani čakajoče dogodke, dokler webhook ni ponovno omogočen; brisanje jih odstrani.
Webhook-e je mogoče ustvariti tudi prek API-ja, na primer prek Zapierja. Ti se prikažejo v istem seznamu z virom API. Glejte Upravljanje webhook-ov prek API-ja.
Testiranje 
Strani za nov in urejanje webhook imata gumb Send Test Payload, ki pošlje zahtevo na URL, ki je trenutno v obrazcu, ne glede na to, ali je bil shranjen ali ne. Dogodka Create in Update pošljeta lažni objekt WebhookComment, medtem ko testiranje Delete pošlje lažno telo zahteve samo z ID-jem.
Preverjanje Payloadov
Pri testiranju vaše webhook integracije preverite, ali dohodne zahteve vsebujejo naslednje glave:
X-FastComments-Timestamp- Unix časovni žig (sekunde)X-FastComments-Signature- HMAC-SHA256 podpis
Webhooki, ustvarjeni pred uvedbo sheme podpisov, prejmejo tudi glavo token, ki vsebuje vaš API Secret. Novi webhooki je ne prejmejo.
Uporabite preverjanje HMAC podpisa, da zagotovite avtentičnost payloadov.
Orodja za testiranje
Za pregled dohodnih webhook payloadov med razvojem lahko uporabite orodja, kot sta webhook.site ali ngrok.
Vrste dogodkov
- Create Event: Sproži se, ko je ustvarjen nov komentar.
- Update Event: Sproži se, ko je komentar urejen.
- Delete Event: Sproži se, ko je komentar izbrisan.
Vsak webhook je povezan z enim dogodkom in eno HTTP metodo (POST, PUT ali DELETE). Vsak dogodek vključuje celotne podatke komentarja v telesu zahteve (glejte Data Structures za format payloada).
Podatkovne strukture 
Edina struktura, poslana prek webhookov, je objekt WebhookComment, prikazan v TypeScript spodaj.
Struktura objekta WebhookComment
Struktura dogodka "Create"
Telo zahteve dogodka create je objekt WebhookComment.
Struktura dogodka "Update"
Telo zahteve dogodka update je objekt WebhookComment.
Struktura dogodka "Delete"
Telo zahteve dogodka delete je objekt WebhookComment.
Sprememba od 14. novembra 2023
Prej je telo zahteve dogodka delete vsebovalo le ID komentarja. Zdaj vsebuje celoten komentar v času brisanja.
Vsak ključ je v telesu vedno prisoten. Ko komentar nima vrednosti za polje, telo nosi null
(ali false za logične vrednosti in [] za sezname), tako da se struktura dostave nikoli ne spreminja med komentarji.
Run 
Ko so uporabniki v komentarju označeni, se informacije shranijo v seznamu z imenom mentions. Vsak objekt v tem seznamu ima naslednjo strukturo.
Run 
Vsak vnos v seznamu badges ima naslednjo strukturo. Za vrste značk si oglejte vodič po značkah.
Run 
HTTP metode
Metodo HTTP za vsak tip webhook dogodka lahko nastavite v skrbniškem vmesniku:
- Dogodek Create: POST ali PUT (privzeto: PUT)
- Dogodek Update: POST ali PUT (privzeto: PUT)
- Dogodek Delete: DELETE, POST ali PUT (privzeto: DELETE)
Ker vse zahteve vsebujejo ID, sta operaciji Create in Update privzeto idempotentni (PUT). Ponovitev iste zahteve Create ali Update ne bi smela ustvariti podvojenih objektov na vaši strani.
Glave zahteve
Vsaka zahteva webhooka vključuje naslednje glave:
| Glava | Opis |
|---|---|
Content-Type | application/json |
token | Vaš API skrivni ključ |
X-FastComments-Timestamp | Unix časovni žig (sekunde), ko je bila zahteva podpisana |
X-FastComments-Signature | HMAC-SHA256 podpis (sha256=<hex>) |
Za informacije o preverjanju HMAC podpisa si oglejte Varnost in API žetoni.
Varnost in API žetoni 
FastComments webhook zahtevki vsebujejo več mehanizmov za overjanje za zagotavljanje varnosti.
Poslane glave
| Glava | Opis |
|---|---|
token | Vaš API skrivni ključ (za združljivost z starejšimi različicami) |
X-FastComments-Timestamp | Unix časovni žig (v sekundah), ko je bil zahtevek podpisan |
X-FastComments-Signature | HMAC-SHA256 podpis vsebine |
Preverjanje HMAC podpisa (priporočeno)
Močno priporočamo preverjanje HMAC podpisa, da zagotovite, da so podatki webhooka avtentični in da z njimi ni bilo manipulirano.
Oblika podpisa: sha256=<hex-encoded-signature>
Kako se izračuna podpis:
- Združi:
timestamp + "." + JSON_payload_body - Izračunajte HMAC-SHA256 z vašim API skrivnim ključem kot ključem
- Hex-kodirajte rezultat
Primer preverjanja (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;
}
// Preveri, ali je časovni žig svež (v 5 minutah)
const now = Math.floor(Date.now() / 1000);
if (Math.abs(now - parseInt(timestamp, 10)) > 300) {
return false; // Preprečevanje ponovitvenega napada
}
// Preveri podpis
const payload = JSON.stringify(req.body);
const expectedSignature = crypto
.createHmac('sha256', apiSecret)
.update(`${timestamp}.${payload}`)
.digest('hex');
return signature === `sha256=${expectedSignature}`;
}
Primer preverjanja (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
# Preveri, ali je časovni žig svež
now = int(time.time())
if abs(now - int(timestamp)) > 300:
return False
# Preveri podpis
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 preverjanja (PHP)
function verifyWebhookSignature($headers, $body, $apiSecret) {
$timestamp = $headers['X-FastComments-Timestamp'] ?? null;
$signature = $headers['X-FastComments-Signature'] ?? null;
if (!$timestamp || !$signature) {
return false;
}
// Preveri, ali je časovni žig svež (v 5 minutah)
$now = time();
if (abs($now - intval($timestamp)) > 300) {
return false;
}
// Preveri podpis
$payload = json_encode($body, JSON_UNESCAPED_SLASHES);
$message = $timestamp . '.' . $payload;
$expectedSignature = 'sha256=' . hash_hmac('sha256', $message, $apiSecret);
return hash_equals($expectedSignature, $signature);
}
Zastarelo overjanje
Glava token, ki vsebuje vaš API skrivni ključ, se še vedno pošilja zaradi združljivosti z starejšimi različicami. Vendar priporočamo prehod na preverjanje preko HMAC zaradi boljše varnosti, saj ščiti pred ponovitvenimi napadi.
Upravljanje webhookov prek API-ja 
Spletne kljuke (webhooks) je mogoče upravljati tudi prek REST API. Na ta način se integracije, kot je Zapier, naročijo na dogodke komentarjev brez uporabe nadzorne plošče, in sledi vzorcu REST Hooks: naroči se, prejmi dogodke, odjavi se.
API-naročnine obstajajo poleg spletnih kljuk, konfiguriranih v nadzorni plošči. Dogodek komentarja se dostavi vsaki spletni kljuki, ki se ujema z njeno domeno, vsaka kot svoja dostava, ne glede na to, kako je bila spletna kljuka ustvarjena.
Avtentikacija
Vsaka zahteva potrebuje vaš API ključ v glavi x-api-key (ali parameter poizvedbe API_KEY) in vaš ID najemnika v parametru poizvedbe tenantId. Oba sta prikazana na strani API Secret v nadzorni plošči.
Naročnina
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 | Obvezno | Opis |
|---|---|---|
url | Da | Absolutni http ali https URL. |
event | Da | comment-created, comment-updated ali comment-deleted. |
domain | Ne | Domena iz konfiguracije vašega računa. Privzeto *, ki prejema dogodke za vsako domeno. |
method | Ne | POST (privzeto), PUT ali DELETE. |
Odgovor vsebuje naročnino:
{
"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"
}
}
Če se isti URL znova naroči na isti dogodek in domeno, se vrne obstoječa naročnina namesto da bi ustvarila podvojeno, tako da lahko odjemalec varno poskusi znova. Vsak najemnik ima lahko do 50 API-naročnin.
Seznam
GET https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
Vrne vsako spletno kljuko za najemnika, vključno s tistimi, ki jih upravlja nadzorna plošča ("source": "dashboard"). Filtrirajte z event, domain ali source.
Odjava
DELETE https://fastcomments.com/api/v1/webhooks/SUBSCRIPTION_ID?tenantId=YOUR_TENANT_ID
Brisanje naročnine tudi zavrže vse dogodke, ki so še v čakalni vrsti zanjo. Na ta način je mogoče izbrisati samo naročnine, ustvarjene prek API; spletna kljuka iz nadzorne plošče ali ID, ki ne obstaja na vašem računu, odgovori z 404 in kodo not-found. Spletne kljuke iz nadzorne plošče se urejajo na strani Webhooks.
Tovorni podatki in podpisovanje
Dostave uporabljajo isti tovor kot spletne kljuke iz nadzorne plošče (glejte Data Structures) in so podpisane z isto shemo HMAC (glejte Security & API Tokens). API-naročnine nikoli ne prejmejo zastarele glave token, zato namesto tega preverite glavo X-FastComments-Signature.
Vzorčni tovorni podatki
GET https://fastcomments.com/api/v1/webhooks/sample-payloads?tenantId=YOUR_TENANT_ID&event=comment-created&limit=3
Vrne najnovejše komentarje računa v točno isti obliki, kot jo nosi dostava, tako da lahko integracija prikaže resnične vzorčne podatke, preden prispe prvi dogodek. event je neobvezen in se samo preveri, saj vsak dogodek dostavi isti objekt komentarja. limit je privzeto 3 in sprejme vrednosti od 1 do 10. Stane 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
}
]
}
Odgovarjanje s 410 Gone
Če končna točka API-naročnine odgovori s HTTP 410 Gone, FastComments to obravnava kot odjavo: naročnina se izbriše skupaj s čakajočimi dogodki in nadaljnjih dostav ni več. Spletnih kljuk, konfiguriranih v nadzorni plošči, nikoli ne izbriše samodejno; zanje je 410 običajna napaka. Vsak drug status napake se poskusi znova in sčasoma onemogoči spletno kljuko, kot je opisano v How it Works & Handling Retries.
Nadzorna plošča
API-naročnine se prikažejo na seznamu Webhooks z virom API, kjer jih skrbnik lahko uredi, onemogoči, ponovno omogoči ali izbriše.
Kako deluje in obravnava ponovnih poskusov 
Vse spremembe objekta Comment v sistemu sprožijo dogodek, ki se znajde v vrsti.
Prvotni webhook dogodek je običajno poslan v šestih sekundah po nastanku vira dogodka.
To vrsto lahko spremljate v Webhooks admin v primeru, da vaš API preneha delovati.
Če zahteva do vašega API ne uspe, jo bomo ponovno uvrstili v vrsto po urniku.
Ta urnik je 1 Minute * the retry count. Če klic ne uspe enkrat, bo poskus ponovljen čez
minuto. Če ne uspe dvakrat, bo nato počakal dve minuti, in tako naprej. To je zato, da ne
preobremenimo vašega API, če imate izpade zaradi obremenitve.
Webhooks je mogoče preklicati na stran z dnevniki.
Za zaključek
To zaključuje našo dokumentacijo o Webhookih.
Upamo, da boste integracijo FastComments Webhookov našli enostavno za razumevanje in hitro za nastavitev.
Če menite, da ste odkrili kakšne vrzeli v naši dokumentaciji, nam sporočite spodaj.