Бот-диспетчер для биржи ATI.SU
Telegram-бот-диспетчер грузоперевозок на ATI.SU: подбирает заявки под машину, склеивает попутные грузы одного темп-класса в рейс, строит маршрут — плюс честный разбор подводных камней площадки.
TL;DR. Бот-диспетчер разбирает поток заявок с биржи ATI.SU, подбирает их под конкретную машину, склеивает попутные грузы одного температурного режима в один рейс и строит грузовой маршрут. Диспетчер утверждает цепочку одним тапом, водитель получает маршрутный лист прямо в Telegram. И отдельно — честный разбор того, что на самом деле можно вытащить из API ATI.SU, потому что площадка устроена не так, как кажется на первый взгляд. → Написать в Telegram
Зачем это нужно
Перевозчик с рефрижератором вручную мониторит биржу ATI.SU: открывает ленту заявок, прикидывает на глаз, что подходит под машину, что можно взять попутно, не конфликтует ли температурный режим у двух грузов в одном рейсе. Это ежедневная рутина, а хорошая связка «два попутных груза одного темп-класса» глазами находится не всегда — часть таких комбинаций просто теряется в потоке.
Бот не подменяет диспетчера, а сокращает выбор: вместо «просмотреть всю ленту заявок» — «утвердить одну из пяти готовых цепочек».
Что делает
- Фильтрует заявки под активную машину. У перевозчика в Telegram есть «гараж» — профиль машины: тип кузова, температурный режим, грузоподъёмность, доступные даты. Всё, что физически не подходит, отсекается сразу.
- Склеивает попутные грузы одного температурного класса в рейс. Цепочка проходит через пять фильтров по порядку: температура → перегруз → география → окно смены → экономика. Дошёл груз до конца цепочки — годится для рейса.
- Строит грузовой маршрут на self-hosted GraphHopper — не на обычном автомобильном роутере: грузовик со своими ограничениями по массе и габаритам едет не по тем дорогам, что легковая. Стек вокруг тот же, что и у остального бэкенда: Python/aiogram, PostgreSQL, Docker.
- Отдаёт диспетчеру карточку на утверждение. Human-in-the-loop: бот предлагает не одну «правильную» цепочку, а около пяти вариантов, выбор — за человеком. До 100% автоматизации это сознательно не доводится: цена ошибки (сорванный груз, штраф, испорченный температурный режим) выше цены лишних десяти секунд на подтверждение.
- Водителю уходит пошаговый маршрутный лист в Telegram; PWA — запасной канал на случай, если бот у водителя не открывается.
Нюансы площадки ATI.SU
Это самое ценное из разведки — грабли, на которые натыкается любой, кто планирует подключиться к API ATI.SU:
- Поиска грузов по общей бирже в API нет. Программно грузы видны только через
GET /v1.0/loads/search/byboards— поиск по «Персональным площадкам», закрытым спискам, куда владелец груза сам приглашает перевозчика. При этом транспорт искать можно по всей бирже (POST /v1.0/trucks/search/by-filter, платно) — асимметрия неожиданная, и именно она главный блокер: план «бот опрашивает биржу каждые 1–3 минуты» на живом API просто не собирается. - Обходные официальные каналы есть, но оба требуют коммерческого захода. Платный пуш «Перехват грузов» (уведомляет о новом грузе и даёт отправить встречное предложение) плюс вебхуки по теме «Грузы» — либо разбор email-уведомлений по сохранённому фильтру. Оба варианта закрываются только тикетом в поддержку API площадки, с проверкой реальной цены и охвата на руках, а не по документации.
- Парсинг сайта прямо запрещён пользовательским соглашением, санкция — блокировка аккаунта немедленно, без объяснений. Для перевозчика, у которого через этот аккаунт идёт весь поток заявок, это не риск штрафа, а риск потерять канал целиком. Поэтому — только официальные API и пуши.
- Оферта ограничивает передачу информации о грузах третьим лицам. Если бизнес-модель предполагает, что собранный рейс дальше уходит другому перевозчику или парку, — это стоит сверить с юристом до подключения, а не после.
- С геомаршрутизацией похожая история, только со стороны Яндекса, не ATI. У Router API и Матрицы расстояний нет бесплатного тарифа, а нужный сценарий использования их условиями прямо запрещён; платный доступ — сотни тысяч рублей в год. Поэтому маршруты строит self-hosted GraphHopper, а не облачный API.
Трудности и как решали
- Доступ к грузам — главный риск проекта, и инженерно тут ничего не сделать: закрывается только официальным коммерческим доступом от ATI.SU — тикетом в поддержку с проверкой цены и охвата, а не кодом.
- Маршрутизация решена — self-hosted GraphHopper снимает зависимость от чужого платного API и его лицензионных ограничений.
- Надёжность подбора цепочки держится на пятиступенчатом фильтре, который отсекает физически и юридически невозможные комбинации, а последнее слово — за диспетчером, не за алгоритмом.
Что в итоге
Инженерно сборка тянет на 7 из 10 — обычная интеграционная работа с API, картами и Telegram. Продуктовый риск выше, 8–9 из 10, и он не в коде: это доступ к самим грузам на площадке. Вот что стоит понимать любому, кто идёт в автоматизацию поверх ATI.SU — биржа не отдаёт свою витрину так, как кажется на первый взгляд, и выясняется это до того, как садишься писать код, а не после.