Вижу по логам, что многие заходят в бота, смотрят на пустую строку и уходят. Ребят, мы понимаем: составлять структуру груза руками — то еще удовольствие.

Поэтому мы раскатили DEMO-режим! 🚀 (Помним, что сначала /start по-любому)

Теперь в меню бота появилась кнопка «🚀 Запустить ДЕМО-пример» (или команда /demo).Что она делает:

  • Рандомит транспорт: от микро-паллеты до 40-футового контейнера.

  • Генерирует груз: подбирает адекватные габариты под выбранную машину.

  • Пакует на лету: вы сразу видите результат (Vol%, Крен, CoG) и скорость работы движка в миллисекундах.

  • Дает потрогать данные: прямо в чате можно скачать входной JSON этого расчета, чтобы использовать его как шаблон для своих задач.

  • Визуализирует: под постом сразу будет ссылка на 3D-сцену именно этого демо-расчета.

Заходите, кликайте, ломайте — нам важен ваш фидбек по скорости и качеству укладки! 📦🎯

Антропоморфизм или две злобных вишенки

Skewer-v4: 500k items/sec 3D Packing API. Go to Telegram: @routeload_bot

Смотрю на вас как в зеркало... но в ответ не тронь, мы не для таких как ты, правда? Да мы не для таких, мы были созданы для настоящих мужиков. Когда одухотворяют неживые вещи для общения с ними это Антропоморфизм, а как называется когда человек с головой другого человека не разговаривает, но одушевляет части его тела, для общения с ними? Хм, ну да ладно от вымысла к реальности, а реальность у нас - 5ая статья в серии Шампур-Скребок выходит в публичное пространство. Route Load bot (телеграмм) для укладки груза. но сначала...

Коротко о том, что было в предыдущих сериях

Если вы пропустили начало этого инженерного триллера, вот краткий дайджест того, как мы разгоняли «телегу» до сверхзвуковых скоростей:

  • Начали с малого: Разработали векторную логику для решения задачи коммивояжера (TSP). Итог — 10 000 точек за 0.4 секунды. Пролетели через сложные топологические фигуры вроде спиралей и трилистников.

  • Масштабировали на флот: Смоделировали погрузку 100 000 контейнеров на 12 судов. С помощью Celery-воркеров и FastAPI разложили 42 000 контейнеров за 2 минуты, учитывая стэк-лимиты и LIFO.

  • Ударились в хардкор (Царь-задача): В прошлой статье мы перешли к упаковке разногабарита. Внедрили учет веса, центра тяжести (COG) и очередности выгрузки (LIFO). Добились безумной производительности — 500 000 айтемов в секунду.

  • Сегодня: Мы перестаем прятать «движок» в консоли и выпускаем его в открытое плавание. Пятая часть — это про то, как превратить математический хардкор в доступный сервис через Telegram-бота, JSON-интерфейс и 3D-визуализацию в браузере.

Почему это важно сейчас?

Многие спрашивали: «Круто, а как потрогать?». Сегодня я покажу архитектуру публичного API, завернутого в Docker, защищенного API-ключами и доступного любому человеку со смартфоном в кармане. От векторных вычислений — к работающему продукту.

Route Load bot. Архитектура процесса: от JSON до 3D-сцены

Разговор с кодом — это тоже своего рода антропоморфизм, но когда сервер на 8 ГБ оперативки начинает «ворочать» кубы в пространстве, это уже чистая математика. Весь путь запроса в Route Load bot разбит на 5 четких этапов:

1. Рукопожатие: /start

Пользователь заходит в бота, и первое, что он видит — не просто «Привет», а четкую инструкцию и ссылку на Swagger-документацию. Мы не прячем «потроха»: если ты разработчик или логист со своей системой — бери API и пользуйся. Бот здесь выступает в роли дружелюбного интерфейса к мощному движку.

2. Прием «груза»: JSON-файлы

Пользователь кидает файл order.json (через скрепку или текстом). На этом этапе в игру вступают Pydantic-схемы. Если в данных мусор (например, количество коробок qty: 0 или отрицательные размеры), бот вежливо (или не очень) укажет на ошибку, не нагружая основной движок бессмысленными расчетами.

  • Инициализация: Создаем виртуальный склад.

  • Расчет: Движок считает 3D-упаковку и балансировку центра тяжести (COG — Center of Gravity). Это критично: если перегрузить одну сторону фуры, на первом же повороте «антропоморфизм» закончится кюветом.

  • Кэширование: Результат летит в Redis с TTL 30 минут. Это наш «оперативный склад», откуда потом подтянется визуализация.

3. Вердикт: КПД и Центр тяжести

В ответ пользователь получает сухие, но важные цифры:

  • КПД: Насколько плотно мы «забили» контейнер.

  • Смещение COG: Насколько безопасно распределен вес.

  • Интерактив: Ссылка на 3D и кнопки рейтинга (1⭐ — 5⭐).

4. Обратная связь: PostgreSQL помнит всё

Когда юзер кликает на оценку (например, 4⭐), открывается асинхронная сессия с PostgreSQL. Мы пишем всё: task_id, оценку, @username и таймстамп. Это не просто статистика — это база для обучения алгоритма в будущем. Если мужики ставят 1 звезду, значит, упаковка «не лезет» в реальный контейнер, и надо править коэффициенты.

5. Визуализация: Магия в браузере

Самый «вкусный» этап. При переходе по ссылке срабатывает роут FastAPI @app.get("/visualize/{task_id}").

  1. Система ныряет в Redis.

  2. Достает сохраненный расчет.

  3. Рендерит Jinja2-шаблон visualize.html.

  4. Пользователь получает полноценную 3D-модель, которую можно крутить, вертеть и изучать, как именно движок разложил его коробки.

После отправки валидного джейсона, прилетает ссылка на визуализацию, выглядит это так.
После отправки валидного джейсона, прилетает ссылка на визуализацию, выглядит это так.

Что под капотом (Сервисное меню)

Помимо основного флоу, мы внедрили стандартный набор «выживания» в Телеграме:

  • help: Чтобы не забыть, зачем мы здесь.

  • stats: Лимит в 300 запросов (пока щедро, для всех).

  • tasks: История последних 10 расчетов (подтягиваем из БД).

  • feedback: Прямая связь с разработчиками.

Грабли, Docker и «Злобные вишенки» деплоя

Теория — это когда всё понятно, но ничего не работает. Практика — это когда всё работает, но не сразу. Когда мы начали паковать всё это в Docker на боевом сервере в Питере, вылезли те самые «вишенки»:

  1. Лимиты Docker Hub: Оказалось, что анонимные скачивания образов в 2026 году — это лотерея. Пришлось переезжать на зеркала, чтобы Nginx вообще соизволил скачаться.

  2. Битва за SSL: Пока DNS-записи домена skewer-api.ru расползались по миру, Certbot отказывался выдавать «замочек». Пришлось подождать, пока интернет «узнает» наш новый адрес.

  3. Анти-спам: В первой версии бот был слишком подозрительным — банил за любое лишнее движение. Настроили Redis-мидлварь так, чтобы она отсекала только явных ботов, давая спокойно работать.

Итог: Пробуйте в деле

Мы не стали строить закрытую крепость. Проект открыт, API доступно, а бот готов крутить ваши коробки 24/7.

🚀 Попробовать прямо сейчас: @routeload_bot Система принимае�� отзывы, комментарии. Если появится интерес, не стесняйтесь связываться

Не стесняйтесь:Пишите в бота, тестируйте свои реальные заказы. Если есть идеи по алгоритмам или вы нашли баг — стучитесь в фидбэк или прямо здесь в комментариях. Мы создали это для работы, а работа должна быть удобной.

сваггер https://skewer-api.ru/docs#/ он есть, но по апи ключу. пользуйтесь ботом и если уже решите что, нужен сваггер, то обращайтесь в фидбэк, я все увижу и отвечу. Сейчас сервис OPEN IN TELEGRAM. @routeload_bot без апи ключа не протестируете (вижу , что пытаетесь, поэтому акцентирую внимание на боте).