
Мова 🇺🇦 Українська
Огляд
Впровадження
За лаштунками
Вебхуки
За допомогою FastComments можна викликати кінцеву точку API щоразу, коли коментар додається, оновлюється або видаляється з нашої системи.
Ми реалізуємо це за допомогою асинхронних вебхуків через HTTP/HTTPS.
Що таке вебхуки 
Вебхук — це механізм або інтеграція між двома системами, де "виробник" (FastComments) ініціює подію яку "споживач" (Ви) обробляє через виклик API.
Підтримувані події та ресурси 
FastComments підтримує вебхуки лише для ресурсу Comment.
Ми підтримуємо вебхуки для створення, видалення та оновлення коментарів.
Кожен з цих випадків розглядається як окрема подія у нашій системі, і тому має різну семантику та структуру вебхук‑подій.
Будь-яка кількість кінцевих точок може підписатися на одну й ту ж подію, з панелі керування або через API (див. Управління вебхуками через API). Кожен вебхук доставляється незалежно.
Налаштування локальної розробки 
Для локальної розробки використовуйте такий інструмент, як ngrok.
Щоб спростити підтримку безпеки системи, локальна розробка проходить той самий процес налаштування та захисту, що й інші середовища.
Крок 1: Додайте "localhost" до доменів у вашому акаунті.
Додайте "localhost" як домен тут.
Крок 2: Виберіть API-ключ
Ми будемо додавати конфігурацію вебхука для вашого домену, тому нам знадобиться API-ключ. Ви можете зробити це тут.
У полі "Associate with domain" — виберіть ваш домен "localhost".
ПРИМІТКА: Крім того, ви можете використовувати один API Secret для всіх тестових дій і проміжних середовищ. Просто додайте API Secret для "All Domains" і дайте йому назву на кшталт "test".
Переконайтеся, що у вас визначено API Secret для вашого виробничого домену (доменів). Події для всіх інших доменів використовуватимуть wildcard (тестовий) секрет.
Крок 3: Додайте свій вебхук
Поки запущено ngrok або подібний інструмент, встановіть значення для "localhost" тут.
Коли ви натиснете Send Test Payload, ми надішлемо дві тестові події, щоб перевірити, чи ви валідуєте API-ключ.
Після успішної валідації натисніть Save.
Крок 4: Додайте коментар
Тепер ви можете додавати, редагувати або видаляти коментарі, і ви маєте побачити, як ми викликаємо вашу локальну машину розробки з подіями, використовуючи ваш тестовий API-ключ. Може бути затримка до 30 секунд перед тим, як події досягнуть вашої машини.
Налаштування 
Виконуйте ті ж кроки для localhost, що й для продакшн. Переконайтеся, що у вас налаштовані домени продакшн та API Secrets.
Спочатку перейдіть до Webhooks admin. Це доступно через Manage Data -> Webhooks.
Сторінка показує всі вебхуки у вашому обліковому записі:
Натисніть New Webhook, щоб додати його. Кожен вебхук має URL, одну подію коментаря (створено, оновлено або видалено), домен та HTTP-метод:
Кожен вебхук доставляється незалежно. Ви можете надсилати одну й ту ж подію на кілька кінцевих точок, і вебхук, обмежений All Domains, отримує коментарі з усіх доменів, навіть якщо існує вебхук, специфічний для домену, для тієї ж події. Однакові URL, подія та домен не можна додати двічі.
Перед збереженням натисніть Send Test Payload, щоб перевірити, чи кінцева точка приймає підписаний запит. Дивіться наступний розділ "Testing" для деталей.
У списку ви можете редагувати, вимикати, повторно вмикати або видаляти вебхук. Вимкнення зберігає заплановані події, доки вебхук не буде повторно увімкнено; видалення їх скидає.
Вебхуки також можна створювати через API, наприклад за допомогою Zapier. Вони з’являються в тому ж списку з джерелом API. Дивіться Managing Webhooks via the API.
Тестування 
На сторінках створення та редагування вебхуків є кнопка Send Test Payload, яка надсилає запит на URL, який наразі вказано у формі, незалежно від того, чи було його збережено. Події Create та Update надсилають тестовий об'єкт WebhookComment, а тестування Delete надсилає тестове тіло запиту лише з ID.
Перевірка Payload-ів
Під час тестування інтеграції вебхуків переконайтеся, що вхідні запити містять такі заголовки:
X-FastComments-Timestamp- Unix-мітка часу (секунди)X-FastComments-Signature- підпис HMAC-SHA256
Вебхуки, створені до впровадження схеми підписів, також отримують заголовок token, що містить ваш API Secret. Нові вебхуки — ні.
Використовуйте перевірку підпису HMAC, щоб переконатися, що payload-и автентичні.
Інструменти тестування
Для перегляду вхідних payload-ів вебхуків під час розробки можна використовувати такі інструменти, як webhook.site або ngrok.
Типи подій
- Подія Create: спрацьовує, коли створюється новий коментар.
- Подія Update: спрацьовує, коли коментар редагується.
- Подія Delete: спрацьовує, коли коментар видаляється.
Кожен вебхук прив'язаний до однієї події та одного HTTP-методу (POST, PUT або DELETE). Кожна подія містить повні дані коментаря в тілі запиту (див. Структури даних для формату payload-а).
Структури даних 
Єдина структура, що надсилається через вебхуки, — це об'єкт WebhookComment, описаний нижче на TypeScript.
Структура об'єкта WebhookComment
Структура події "Create"
Тіло запиту події "create" — це об'єкт WebhookComment.
Структура події "Update"
Тіло запиту події "update" — це об'єкт WebhookComment.
Структура події "Delete"
Тіло запиту події "delete" — це об'єкт WebhookComment.
Зміни станом на 14 листопада 2023 року
Раніше тіло запиту події "delete" містило лише id коментаря. Тепер воно містить повний коментар на момент видалення.
Кожен ключ завжди присутній у тілі. Коли коментар не має значення для певного поля, тіло містить null
(або false для логічних значень та [] для списків), тому форма доставки ніколи не відрізняється від одного коментаря до іншого.
Run 
Коли користувачів згадують у коментарі, інформація зберігається у списку під назвою mentions. Кожен об'єкт у цьому списку
має таку структуру.
Run 
Кожен елемент списку badges має таку структуру. Типи значків дивіться в посібнику зі значками.
Run 
HTTP-методи
Ви можете налаштувати HTTP-метод для кожного типу події вебхука в адмін-панелі:
- Подія Create: POST або PUT (за замовчуванням: PUT)
- Подія Update: POST або PUT (за замовчуванням: PUT)
- Подія Delete: DELETE, POST або PUT (за замовчуванням: DELETE)
Оскільки всі запити містять ID, операції Create та Update є ідемпотентними за замовчуванням (PUT). Повторення того самого запиту Create або Update не повинно створювати дублікати об'єктів на вашому боці.
Заголовки запиту
Кожен запит вебхука містить такі заголовки:
| Заголовок | Опис |
|---|---|
Content-Type | application/json |
token | Ваш API Secret |
X-FastComments-Timestamp | Unix-мітка часу (у секундах), коли запит було підписано |
X-FastComments-Signature | Підпис HMAC-SHA256 (sha256=<hex>) |
Інформацію про перевірку підпису HMAC дивіться в розділі Безпека та API-токени.
Безпека та токени API 
FastComments webhook requests include multiple authentication mechanisms for security.
Відправлені заголовки
| Заголовок | Опис |
|---|---|
token | Ваш API Secret (для зворотної сумісності) |
X-FastComments-Timestamp | Unix-часова мітка (секунди) коли запит був підписаний |
X-FastComments-Signature | HMAC-SHA256 підпис навантаження |
Перевірка підпису HMAC (рекомендовано)
Ми настійно рекомендуємо перевіряти підпис HMAC, щоб переконатися, що навантаження вебхука є автентичними і не були підроблені.
Формат підпису: 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; // Запобігання повторній атаці
}
// Перевірити підпис
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 для підвищеної безпеки, оскільки вона захищає від повторних атак.
Керування вебхуками через API 
Вебхуки також можна керувати через REST API. Саме так інтеграції, як-от Zapier, підписуються на події коментарів, не торкаючись панелі керування, і це відповідає шаблону REST Hooks: підписка, отримання подій, відписка.
Підписки через API живуть поруч з вебхуками, налаштованими в панелі керування. Подія коментаря доставляється кожному вебхуку, що відповідає її домену, кожен як окрема доставка, незалежно від того, як було створено вебхук.
Автентифікація
Кожен запит потребує ваш API Key у заголовку x-api-key (або параметрі запиту API_KEY) та ваш tenant ID у параметрі запиту tenantId. Обидва показані на сторінці API Secret у панелі керування.
Підписка
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 | Так | Абсолютна URL-адреса http або https. |
event | Так | comment-created, comment-updated або comment-deleted. |
domain | Ні | Домен з конфігурації вашого облікового запису. За замовчуванням *, що отримує події для кожного домену. |
method | Ні | POST (за замовчуванням), PUT або DELETE. |
Відповідь містить підписку:
{
"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 на ту саму подію та домен повертає наявну підписку, а не створює дублікат, тому клієнт може безпечно повторювати запит. Кожен tenant може мати до 50 підписок через API.
Список
GET https://fastcomments.com/api/v1/webhooks?tenantId=YOUR_TENANT_ID
Повертає всі вебхуки для tenant, включно з тими, що керуються в панелі керування ("source": "dashboard"). Фільтруйте за event, domain або source.
Відписка
DELETE https://fastcomments.com/api/v1/webhooks/SUBSCRIPTION_ID?tenantId=YOUR_TENANT_ID
Видалення підписки також відкидає будь-які події, які ще очікують у черзі для неї. Лише підписки, створені через API, можна видалити таким чином; вебхук з панелі керування або id, якого не існує у вашому обліковому записі, відповідає 404 з кодом not-found. Вебхуки панелі керування редагуються на сторінці Webhooks.
Корисні навантаження та підпис
Доставки використовують те саме корисне навантаження, що й вебхуки панелі керування (див. Data Structures) і підписуються тією самою схемою HMAC (див. Security & API Tokens). Підписки через API ніколи не отримують застарілий заголовок token, тому перевіряйте натомість заголовок X-FastComments-Signature.
Приклади корисних навантажень
GET https://fastcomments.com/api/v1/webhooks/sample-payloads?tenantId=YOUR_TENANT_ID&event=comment-created&limit=3
Повертає найновіші коментарі облікового запису точно в тому вигляді, в якому їх несе доставка, щоб інтеграція могла показати реальні приклади даних до прибуття першої події. event є необов'язковим і лише перевіряється, оскільки кожна подія доставляє той самий об'єкт коментаря. limit за замовчуванням дорівнює 3 і приймає від 1 до 10. Коштує 2 API кредити.
{
"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
Якщо кінцева точка підписки через API відповідає HTTP 410 Gone, FastComments трактує це як відписку: підписка видаляється разом з подіями в черзі, і подальші доставки не здійснюються. Вебхуки, налаштовані в панелі керування, ніколи не видаляються автоматично; для них 410 є звичайним збоєм. Будь-який інший статус збою повторюється і зрештою вимикає вебхук, як описано в How it Works & Handling Retries.
Панель керування
Підписки через API з'являються у списку Webhooks із джерелом API, де адміністратор може редагувати, вимикати, знову вмикати або видаляти їх.
Як це працює та обробка повторних спроб 
Усі зміни об'єкта Comment у системі викликають подію, яка потрапляє в чергу.
Початковий вебхук зазвичай надсилається протягом шести секунд після виникнення джерела події.
Ви можете відстежувати цю чергу в панелі адміністрування Webhooks на випадок, якщо ваш API вийде з ладу.
Якщо запит до вашого API не вдається, ми повторно помістимо його в чергу за певним графіком.
Цей графік — 1 Minute * the retry count. Якщо виклик не вдається один раз, він спробує ще раз через
хвилину. Якщо він не вдасться двічі, тоді зачекає дві хвилини, і так далі. Це зроблено для того, щоб ми
не перевантажували ваш API, якщо він виходить з ладу з причин, пов'язаних з навантаженням.
Вебхуки можна скасувати на сторінці журналу.
На завершення
Цим завершується наша документація Webhooks.
Ми сподіваємося, що інтеграція FastComments Webhook є зрозумілою та швидкою у налаштуванні.
Якщо ви вважаєте, що виявили будь-які прогалини в нашій документації, повідомте нас нижче.