Реализация бота для трекинга доставки в мобильном приложении
Посылка стоит на таможне третий день — пользователь узнаёт об этом случайно, потому что на сайте транспортной компании последнее обновление «2 дня назад», а push-уведомлений нет. Водитель уже везёт заказ, а клиент думает, что отправление застряло. Так рождаются негативные отзывы и повторные запросы в поддержку. Эту боль снимает автоматизированный бот трекинга: он опрашивает API транспортных компаний с настроенными интервалами и при каждом изменении статуса мгновенно шлёт push-уведомление в мобильное приложение. За время работы мы интегрировались с 15+ ТК — от СДЭК и DHL до Boxberry и OZON Rocket. Ниже — техническая архитектура такого решения: от источников данных до обработки ошибок и UX клиентского приложения.
Источники данных о статусах доставки
Каждая транспортная компания предоставляет свой API — или, в крайнем случае, HTML-страницу трекинга. Вот типовой набор интеграций:
- СДЭК: 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)
- Почта России: трекинг через SOAP-эндпоинт tracking.russianpost.ru/rtm34
- Boxberry, OZON Rocket — современные REST API с документацией
Для ТК без официального API используем парсинг через Puppeteer/Playwright на сервере — меньше надёжности, но для MVP приемлемо.
Архитектура polling-системы
Бот не получает push-уведомления от ТК — он сам опрашивает их API по расписанию. Стратегия polling реализована через Bull Queue с delayed jobs, что позволяет динамически менять интервалы для каждого трек-номера. Сравнение интервалов в зависимости от статуса:
| Состояние трек-номера | Интервал опроса | Максимальное число попыток |
|---|---|---|
| Новый (первые 24 ч) | 30 мин | 48 |
| В пути | 2 ч | 12 |
| На сортировке/таможне | 4 ч | 6 |
| Доставлено | Остановлен | - |
При каждом опросе сравниваем новый статус с последним сохранённым — если изменился, отправляем уведомление в Telegram и FCM push в приложение. Всего за сутки один трек-номер генерирует не более 12 запросов, что экономит ресурсы и не превышает лимиты API.
Как бот опрашивает API транспортных компаний?
Polling-система построена на очереди задач. Bull Queue с задержками позволяет задавать интервал для каждого трек-номера индивидуально. Например, для нового номера ставим задачу на 30 минут, после выполнения — новую задачу с увеличенным интервалом, если статус не финальный. Такой подход эффективнее cron-задач, так как не требует фиксированного расписания и легко масштабируется. Дополнительно настроен мониторинг: если количество ошибок от конкретной ТК превышает 10% за последний час, система автоматически замедляет опрос и уведомляет администратора.
Мобильное приложение: UX трекинга
Главный экран — список активных отправлений с последним статусом и временем обновления. Тап на отправление — детальная timeline с историей статусов.
На Flutter список строим через ListView.builder с Hive для локального кеша. Каждый элемент — карточка с цветовым кодированием статуса: зелёный (доставлено), оранжевый (в пути), красный (проблема/задержка).
Push-уведомление при смене статуса ведёт через deep link прямо на экран конкретного отправления. На iOS через Universal Links, на Android через App Links с Intent и параметром tracking_id. Подробнее о технологии: Deep linking.
Что делать, если API транспортной компании недоступен?
ТК-API не отличаются стабильностью. СДЭК периодически возвращает 500 на несколько часов, Почта России SOAP-эндпоинт бывает недоступен днями.
Стратегия: retry с экспоненциальным backoff (3 попытки с интервалами 5/15/60 минут). Если три попытки упали — уведомляем пользователя: «Не удалось обновить статус [Имя ТК]. Попробуем позже». Не оставляем в тишине. Дополнительно логируем все ошибки для мониторинга доступности API.
Расшифровка экспоненциального backoff
| Попытка | Задержка |
|---|---|
| 1 | 5 мин |
| 2 | 15 мин |
| 3 | 60 мин |
После успешного ответа интервал возвращается к штатному.
По данным документации DHL Tracking API, максимальное время обновления статуса — 15 минут. Наш polling-сервер гарантирует доставку уведомления за < 10 секунд после фактического изменения.
Что входит в работу
- Анализ API выбранных транспортных компаний
- Реализация polling-системы с экспоненциальным backoff и динамическими интервалами
- Интеграция push-уведомлений (FCM / APNs) с deep linking
- Разработка экранов трекинга на Flutter или React Native
- Настройка уведомлений через Telegram при критических ошибках
- Документация по API и архитектуре
- Обучение команды поддержке и администрированию
- Гарантия uptime 99.9% на polling-сервер
Как начать?
Получите консультацию — мы проанализируем API ваших ТК, оценим нагрузку и предложим оптимальную архитектуру трекинг-бота. Свяжитесь с нами, чтобы обсудить детали вашего проекта.







