ramas
← Projects

Бот-диспетчер для биржи 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 — биржа не отдаёт свою витрину так, как кажется на первый взгляд, и выясняется это до того, как садишься писать код, а не после.

→ Написать в Telegram

Связь · кратко и по делу

Понравилось — забирай в Telegram. Хочешь увидеть всё сразу — на главную.