Как подключить вебхуки для мониторинга задержек рейсов
Если ваш сервис отслеживает задержки рейсов, регулярный опрос (polling) API — не самый эффективный способ. Вебхуки избавляют от лишних запросов: Tablo API сам присылает POST-запрос на ваш URL, как только статус рейса меняется.
Когда нужны вебхуки, а не polling
- Вы отслеживаете конкретные рейсы (не весь поток данных по аэропорту)
- Важна скорость реакции на изменение статуса — например, для уведомлений пассажиров или пересчёта компенсации
- Хотите сократить число запросов к API и не упираться в лимиты (100 запросов / 10 минут на ключ)
Подписка на вебхук
Доступно на плане BUSINESS и выше (до 50 подписок) или PRO/ENTERPRISE (без лимита).
curl -X POST -H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"flight_name":"SU100","airport_code":"SVO","url":"https://your.app/webhook","secret":"s3cr3t"}' \
"https://api.tabloapi.ru/v1/webhooks"
Ответ:
{
"data": {
"id": 7,
"flight_name": "SU100",
"airport_code": "SVO",
"url": "https://your.app/webhook"
}
}
Формат события
При изменении статуса или подстатуса рейса на ваш URL приходит:
{
"event": "flight.status_changed",
"flight_number": "SU100",
"airport_code": "SVO",
"field": "status",
"old_status": "IN_FLIGHT",
"new_status": "LANDED",
"changed_at": "2026-07-17T10:28:00.000Z"
}
field принимает значения status или subStatus. Возможные статусы: SCHEDULED, DELAYED, CANCELLED, DEPARTED, IN_FLIGHT, LANDED.
Проверка подписи запроса
Каждый запрос содержит заголовок X-Signature — HMAC SHA256 от тела запроса, подписанный вашим secret. Проверяйте подпись до обработки события — это подтверждает, что запрос пришёл от Tablo API, а не от третьей стороны.
const crypto = require('crypto');
// Важно: парсить тело как raw Buffer, не JSON
app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
const sig = req.headers['x-signature'];
const expected = crypto
.createHmac('sha256', process.env.WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (sig !== expected) {
return res.status(401).send('Invalid signature');
}
const event = JSON.parse(req.body);
console.log(`${event.flight_number}: ${event.old_status} → ${event.new_status}`);
res.status(200).send('OK');
});
Управление подписками
Список активных подписок:
curl -H "X-API-Key: YOUR_KEY" "https://api.tabloapi.ru/v1/webhooks"
Удаление подписки:
curl -X DELETE -H "X-API-Key: YOUR_KEY" "https://api.tabloapi.ru/v1/webhooks/7"
Повторные попытки доставки
Если ваш сервер вернул ошибку (не 2xx) или не ответил за 10 секунд, Tablo API повторит доставку до 3 раз с экспоненциальным backoff (5 сек → 10 сек → 20 сек). Из этого следует важное требование: ваш эндпоинт должен быть идемпотентным — одно и то же событие может прийти несколько раз.
Лимиты по тарифам
| Тариф | Вебхук-подписок | |-------|------------------| | START | недоступно | | BUSINESS | до 50 | | PRO / ENTERPRISE | без лимита |
Подробнее о вебхуках и остальных эндпоинтах — в документации. Запросить доступ к API →