API для такси-агрегаторов: как автоматизировать встречу в аэропорту
Заказ «встретить в аэропорту» — один из самых частых сценариев такси-агрегаторов, и самый чувствительный к точности данных: ранний выезд водителя — простой и лишний счётчик, поздний — недовольный пассажир с чемоданами на морозе. Оба случая решаются одним источником данных о фактическом времени прилёта вместо расписания.
Проблема: пассажир не знает код аэропорта
Пассажир указывает при заказе «встречаю рейс из Сочи, прилетаю в Москву» — но в Москве 4 аэропорта (DME, SVO, VKO, ZIA), и по одному номеру рейса не всегда очевидно, в какой конкретно. Опрашивать все четыре аэропорта отдельными запросами и на каждый настраивать свою логику — лишняя работа на стороне агрегатора.
Tablo API принимает несколько кодов через запятую в одном запросе:
curl -H "X-API-Key: YOUR_KEY" \
"https://api.tabloapi.ru/v1/flights?airport=DME,SVO,VKO,ZIA&type=arrival&date=2026-09-20"
Или проще — фильтр по IATA-коду города, если не важно, через какой конкретно из городских аэропортов идёт рейс:
curl -H "X-API-Key: YOUR_KEY" \
"https://api.tabloapi.ru/v1/flights?city_code=MOW&type=arrival&date=2026-09-20"
city_code=MOW — групповой IATA-код города (Москва), объединяющий все её аэропорты, а не код конкретного аэропорта. Каждый рейс в ответе также содержит city_arrival_code/city_departure_code — можно один раз сматчить рейс по городу и дальше работать с уже известным airport_code этого конкретного рейса.
Отслеживание конкретного рейса заказа
После того как рейс определён, подпишитесь на вебхук по этому конкретному номеру и дате, чтобы получить push-уведомление о посадке без опроса:
curl -X POST -H "X-API-Key: YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"flight_name": "SU1440",
"airport_code": "SVO",
"flight_date": "2026-09-20",
"deactivate_after_hours": 3,
"url": "https://your.app/webhook/order-9931",
"secret": "s3cr3t"
}' \
"https://api.tabloapi.ru/v1/webhooks"
deactivate_after_hours: 3 отключает подписку через 3 часа после посадки — заказ к этому моменту уже закрыт, отдельно чистить подписки не нужно.
Расчёт времени выезда водителя от факта, а не от расписания
app.post('/webhook/order/:orderId', express.raw({ type: 'application/json' }), async (req, res) => {
const sig = req.headers['x-signature'];
const expected = crypto.createHmac('sha256', WEBHOOK_SECRET).update(req.body).digest('hex');
if (sig !== expected) return res.status(401).end();
const event = JSON.parse(req.body);
if (event.new_status === 'LANDED') {
// выезд водителя рассчитывается от фактического, а не планового времени посадки
await scheduleDriverDispatch(req.params.orderId, { etaMinutes: 30 });
}
if (event.new_status === 'DELAYED') {
await notifyDriverDelay(req.params.orderId);
}
res.status(200).end();
});
Пассажир получает push «водитель выезжает» через минуту после реальной посадки, а не по устаревшему расписанию — и водитель не тратит время в очереди на разгон/паркинг заранее.
Ограничение датированных вебхуков
flight_date — это UTC-календарный день, а не локальный день аэропорта вылета. Для рейсов, вылетающих в первые несколько часов после полуночи по местному времени, дата на билете и flight_date в системе могут разойтись на сутки — на практике это касается небольшой доли ночных рейсов. Для агрегатора с высоким объёмом заказов имеет смысл на своей стороне подстраховаться и запрашивать оба соседних дня, если рейс попадает в окно 00:00–03:00 по местному времени аэропорта.
Мультиаэропортовый и городской фильтр доступны на всех тарифах, датированные вебхуки — от BUSINESS. Запросить доступ к API →