
Език 🇧🇬 Български
Общ преглед
Имплементация
Зад кулисите
Уебкуки
С FastComments е възможно да се извика API endpoint всеки път, когато коментар бъде добавен, актуализиран или премахнат от нашата система.
Постигаме това с помощта на асинхронни webhooks по HTTP/HTTPS.
Какво са уебкуките 
Уебхук е механизъм, или интеграция, между две системи, при която "произвеждащият" (FastComments) изпраща събитие което "потребителят" (Вие) обработва чрез API повикване.
Поддържани събития и ресурси 
FastComments поддържа уебкуки само за ресурса Comment.
Поддържаме уебкуки за създаване, премахване и актуализиране на коментари.
Всяко от тях се счита за отделно събитие в нашата система и като такова има различна семантика и структури за уебкук събитията.
Произволен брой крайни точки могат да се абонират за едно и също събитие, от таблото или чрез API (вижте Управление на уебкуки чрез API). Всяка уебкука се доставя независимо.
Настройка за локално разработване 
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.
Стъпка 1: Добавете „localhost“ към домейните във вашия акаунт.
Add "localhost" as a domain here.
Стъпка 2: Изберете API ключ
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.
ЗАБЕЛЕЖКА: Алтернативно, можете да използвате една API тайна за цялата тестова активност и среди за предварително тестване. Просто добавете API тайна за „All Domains“ и я наречете например „test“.
Ensure you have an API Secret defined for your production domain(s). Events for all other domains will use the wildcard (testing) secret.
Стъпка 3: Добавете вашия уебхук
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.
Стъпка 4: Добавете коментар
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.
Настройка 
Следвайте същите стъпки за localhost, както за продукция. Уверете се, че имате настроени продукционни домейни и API тайни.
Първо, отидете на Webhooks admin. Това е достъпно чрез Управление на данни -> Уебкукове.
Страницата изброява всеки уебкук във вашия акаунт:
Кликнете New Webhook, за да добавите такъв. Всеки уебкук има URL, едно събитие за коментар (създаден, актуализиран или изтрит), домейн и HTTP метод:
Всеки уебкук се доставя независимо. Можете да изпратите едно и също събитие към няколко крайни точки, а уебкук, обхващащ All Domains, получава коментари от всеки домейн, дори ако съществува уебкук за конкретен домейн за същото събитие. Същият URL, събитие и домейн не могат да бъдат добавени два пъти.
Преди да запазите, кликнете Send Test Payload, за да проверите дали крайната точка приема подписана заявка. Вижте следващия раздел „Testing“ за подробности.
От списъка можете да редактирате, деактивирате, активирате отново или изтриете уебкук. Деактивирането запазва изчакващите събития, докато уебкукът бъде активиран отново; изтриването ги премахва.
Уебкуковете могат да се създадат и чрез API, например чрез Zapier. Те се появяват в същия списък с източник API. Вижте Управление на уебкуковете чрез API.
Тестване 
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.
Проверка на полезните данни
When testing your webhook integration, verify the incoming requests include the following headers:
X-FastComments-Timestamp- Unix времева отметка (секунди)X-FastComments-Signature- HMAC-SHA256 подпис
Webhooks created before the signature scheme was introduced also receive a token header containing your API Secret. New webhooks do not.
Use the HMAC signature verification to ensure payloads are authentic.
Инструменти за тестване
You can use tools like webhook.site or ngrok to inspect incoming webhook payloads during development.
Видове събития
- Create Event: Задейства се, когато се създаде нов коментар.
- Update Event: Задейства се, когато коментарът се редактира.
- Delete Event: Задейства се, когато коментарът се изтрие.
Each webhook is tied to one event and one HTTP method (POST, PUT or DELETE). Each event includes the full comment data in the request body (see Data Structures for the payload format).
Структури от данни 
The only structure sent via webhooks is the WebhookComment object, outlined in TypeScript below.
Структура на обекта WebhookComment
Структура на събитието "Create"
The "create" event request body is a WebhookComment object.
Структура на събитието "Update"
The "update" event request body is a WebhookComment object.
Структура на събитието "Delete"
The "delete" event request body is a WebhookComment object.
Change as of Nov 14th 2023
Previously the "delete" event request body only contained the comment id. It now contains the full comment at the time of deletion.
Промяна от 14 ноември 2023 г.
Преди тялото на заявката за събитие "delete" съдържаше само идентификатора на коментара. Сега съдържа целия коментар към момента на изтриване.
Всеки ключ винаги присъства в тялото. Когато коментарът няма стойност за дадено поле, тялото съдържа null
(или false за булеви стойности и [] за списъци), така че формата на доставката никога не се променя от един коментар към друг.
Run 
Когато потребители са споменати в коментар, информацията се съхранява в списък, наречен mentions. Всеки обект в този списък
има следната структура.
Run 
HTTP методи
Можете да конфигурирате HTTP метода за всеки тип уебкук събитие в администраторския панел:
- Create Event: POST или PUT (по подразбиране: PUT)
- Update Event: POST или PUT (по подразбиране: PUT)
- Delete Event: DELETE, POST или PUT (по подразбиране: DELETE)
Тъй като всички заявки съдържат ID, операциите Create и Update са идемпотентни по подразбиране (PUT). Повтарянето на една и съща заявка за Create или Update не трябва да създава дублирани обекти от ваша страна.
Заглавки на заявката
Всяка уебкук заявка включва следните заглавки:
| Header | Description |
|---|---|
Content-Type | application/json |
token | Вашият API Secret |
X-FastComments-Timestamp | Unix времева отметка (секунди), когато заявката е подписана |
X-FastComments-Signature | HMAC-SHA256 подпис (sha256=<hex>) |
Вижте Security & API Tokens за информация относно проверката на HMAC подписа.
Сигурност и API токени 
FastComments webhook requests include multiple authentication mechanisms for security.
Изпращани заглавки
| Header | Description |
|---|---|
token | Вашият API Secret (за обратна съвместимост) |
X-FastComments-Timestamp | Unix времеви печат (в секунди), когато заявката е била подписана |
X-FastComments-Signature | HMAC-SHA256 подпис на полезното съдържание |
HMAC Signature Verification (Recommended)
Силно препоръчваме да проверявате HMAC подписа, за да се уверите, че payload-ите на webhook-ите са автентични и не са били подправяни.
Signature Format: sha256=<hex-encoded-signature>
How the signature is computed:
- Concatenate:
timestamp + "." + JSON_payload_body - Compute HMAC-SHA256 using your API Secret as the key
- Hex-encode the result
Example Verification (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}`;
}
Example Verification (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}"
Example Verification (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 атаки.
Управление на уебкуки чрез API 
Webhooks can also be managed through the REST API. This is how integrations such as Zapier subscribe to comment events without touching the dashboard, and it follows the REST Hooks pattern: subscribe, receive events, unsubscribe.
API subscriptions live alongside the webhooks configured in the dashboard. A comment event is delivered to every webhook that matches its domain, each as its own delivery, whichever way the webhook was created.
Удостоверяване
Every request needs your API Key in the x-api-key header (or the API_KEY query parameter) and
your tenant ID in the tenantId query parameter. Both are shown on the API Secret page in the dashboard.
Абониране
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"
}| Поле | Задължително | Описание |
|---|---|---|
url | Да | Абсолютен http или https URL. |
event | Да | comment-created, comment-updated or comment-deleted. |
domain | Не | Домейн от конфигурацията на вашия акаунт. По подразбиране е *, което получава събития за всеки домейн. |
method | Не | POST (по подразбиране), PUT or DELETE. |
The response contains the subscription:
{
"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"
}
}
Абонирането на същия URL за същото събитие и домейн отново връ връща съществуващия абонамент, вместо да създава дубликат, така че клиентът може безопасно да опита отново. Всеки наемател може да има до 50 API абонамента.
Списък
GET https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
Returns every webhook for the tenant, including those managed in the dashboard ("source": "dashboard"). Filter with event, domain or source.
Отписване
DELETE https://fastcomments.com/api/v1/webhooks/SUBSCRIPTION_ID?tenantId=YOUR_TENANT_ID
Deleting a subscription also discards any events still queued for it. Only subscriptions created
through the API can be deleted this way; a dashboard webhook, or an id that does not exist on your
account, answers 404 with code not-found. Dashboard webhooks are edited on the Webhooks page.
Полезни данни и подписване
Deliveries use the same payload as dashboard webhooks (see Data Structures) and are signed with the same
HMAC scheme (see Security & API Tokens). API subscriptions never receive the legacy token header, so verify the X-FastComments-Signature header instead.
Примерни полезни данни
GET https://fastcomments.com/api/v1/webhooks/sample-payloads?tenantId=YOUR_TENANT_ID&event=comment-created&limit=3
Returns the account's most recent comments in exactly the shape a delivery carries, so an integration can
show real sample data before the first event arrives. event is optional and only validated, since every
event delivers the same comment object. limit defaults to 3 and accepts 1 to 10. Costs 2 API credits.
{
"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
}
]
}
Отговор с 410 Gone
If an API subscription's endpoint responds with HTTP 410 Gone, FastComments treats that as an
unsubscribe: the subscription is deleted along with its queued events, and no further deliveries are
attempted. Webhooks configured in the dashboard are never deleted automatically; for them a 410 is an
ordinary failure. Any other failure status is retried and eventually disables the webhook, as described
in How it Works & Handling Retries.
Табло
API subscriptions appear in the Webhooks list with the source API, where an administrator can edit, disable, re-enable or delete them.
Как работи и обработка на повторения 
Всички промени в обекта Comment в системата предизвикват събитие, което се поставя в опашка.
Първоначалното webhook събитие обикновено се изпраща в рамките на шест секунди след настъпване на източника на събитието.
Можете да наблюдавате тази опашка в администрацията на Webhooks в случай че вашето API спре да работи.
Ако заявка към вашето API не успее, ние ще я поставим отново в опашката по график.
Този график е 1 Minute * the retry count. Ако повикването не успее веднъж, ще опита отново след една минута. Ако не успее два пъти, ще изчака две минути и т.н. Това е така, за да не претоварваме вашето API, ако то спре да работи по причини, свързани с натоварване.
Webhooks могат да бъдат отменени от страницата с логове.
В заключение
Това завършва нашата документация за Webhooks.
Надяваме се, че интеграцията на FastComments Webhook е лесна за разбиране и бърза за настройване.
Ако смятате, че сте открили пропуски в нашата документация, уведомете ни по-долу.