Tablo API
← Все статьи
17 июля 2026 г.

Как подключить вебхуки для мониторинга задержек рейсов

Если ваш сервис отслеживает задержки рейсов, регулярный опрос (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 →