Реализация бота для трекинга доставки в мобильном приложении
Посылка стоит на таможне третий день — пользователь не знает, потому что трекинговый сайт ТК показывает последнее обновление «2 дня назад» и нет никаких уведомлений. Бот для трекинга доставки превращает пассивное ожидание в активное информирование.
Источники данных о статусах доставки
Каждая транспортная компания — отдельный API или парсинг. Крупные игроки предоставляют официальные API:
-
СДЭК: REST API (
api.cdek.ru), OAuth 2.0, статусы в реальном времени -
DHL: Tracking API (
api.dhl.com/track/shipments), API key -
FedEx: Track API v1 (
apis.fedex.com/track/v1/trackingnumbers) -
Почта России: трекинг через
tracking.russianpost.ru/rtm34(SOAP, что неприятно, но работает) - Boxberry, OZON Rocket — REST API с документацией
Для компаний без официального API или с закрытым доступом используем парсинг через Puppeteer/Playwright на сервере — менее надёжно, ломается при редизайне сайта, но для MVP подходит.
Архитектура polling-системы
Бот не может получать push-уведомления от ТК — он сам должен опрашивать их API. Стратегия polling:
- Новый трек-номер: первые 24 часа — опрос каждые 30 минут
- Статус «в пути»: каждые 2 часа
- Статус «на сортировке» или «на таможне»: каждые 4 часа
- Статус «доставлено»: трекинг останавливается
Это реализуется через планировщик (Bull Queue с delayed jobs). При каждом опросе сравниваем новый статус с последним сохранённым — если изменился, отправляем уведомление в Telegram и FCM push в приложение.
Мобильное приложение: UX трекинга
Главный экран — список активных отправлений с последним статусом и временем обновления. Тап на отправление — детальная timeline с историей статусов.
На Flutter список строим через ListView.builder с Hive для локального кеша. Каждый элемент — карточка с цветовым кодированием статуса: зелёный (доставлено), оранжевый (в пути), красный (проблема/задержка).
Push-уведомление при смене статуса ведёт через deep link прямо на экран конкретного отправления. На iOS через Universal Links, на Android через App Links с Intent и параметром tracking_id.
Обработка ошибок API транспортных компаний
ТК-API не отличаются стабильностью. СДЭК периодически возвращает 500 на несколько часов, Почта России SOAP-эндпоинт бывает недоступен днями.
Стратегия: retry с экспоненциальным backoff (3 попытки с интервалами 5/15/60 минут). Если три попытки упали — уведомляем пользователя: «Не удалось обновить статус [Имя ТК]. Попробуем позже». Не оставляем в тишине.
Интеграция бота с 2–3 транспортными компаниями и мобильным клиентом — 2–3 недели. Поддержка 10+ ТК с унифицированным парсером — 5–7 недель.







