08.03.2026 Бот работает более недели, дней 10 наверное и всего зарегестрированных 17 человек, при почти 8тыс просмотров этой статьи и ни один человек даже не нажал /demo и не посмотрел обсчет случайно генерированного кузова и груза. Это стимул провести исследование на приблизительно такие цифры: есть Заказчик - условный Магнит, у него оборот на 45 Распределительных Центров с обслуживанием около 600 точек в каждом. Надо посчитать не только объем экономии в денежном эквиваленте по грузу, а по всем факторам и сделать итоговую таблицу. Так как приблизительно я уже прикинул на общедоступных цифрах 2024 года, то тут сообщаю, что цифра по Магниту около 2,5 млрд рублей в год, но оставим детали для будущей статьи. Надеюсь народ "проснется" еще и начнет тестировать алгоритм.

05.03.2026 13-00 Решил добавить информативности, кто сколько раз заходит в демо и сколько запросов делается.

добавили два поле Пользовтелю: total_requests и last_action
добавили два поле Пользовтелю: total_requests и last_action
Добавили Енум Рользователю, это я про UserAction
Добавили Енум Рользователю, это я про UserAction

Дописали логику в начало хендлеров (у меня их два)

После правок команда не локальном применяем миграции (алембик - 2 команды) и далее rsync -avz --delete --exclude '.venv' --exclude 'venv' --exclude 'pycache' --exclude '.git' --exclude '.env' --exclude '.pytest_cache' --exclude '.vscode' --exclude 'backup' --exclude '*.json' --exclude 'pytest.ini' --exclude 'instruction.md' /home/andreymazo/Projects/skewer_api/ root@мойномерсервера:/root/мойкорневойдиректорий/ и на сервере docker exec -it skewer_engine_v4 alembic upgrade head и docker compose up -d --build имяконтейнераприложенияи проверяем логи docker logs -f skewer_engine_v4. Заходим в бота, жмем демо и проверяем базу. У меня Дбивер настроен (настраивайте безопасно, на сервере нельзя просто пробрасывать какой-нить порт - это опасно)

те два поля, что мы писали в Пользователя. Работают.
те два поля, что мы писали в Пользователя. Работают.

На все ушло минут 20 (больше сюда копипастил).

03.03.2026 23-00 У меня был настроен бэкап базы по нажатию, сх файл. но он не работал, в енве файле на сервере не хватало переменных. теперь ок

02.03.2026 17:20 Опять обнаружил на телефоне косяк. Система "умничает" - ставит косячные кавычки, если вручную копируете ,то есть палчиком проводите по всему тексту. В браузере джейсон проходит, но на телефоне выдаст ошибку кавычек. Вечером исправлю.

02.03.2026 18-00 Копируйте кликом ,не выделяйте вручную. Телеграмм автоматически заменяет кавычки. По клику - все ок.

01.03.2026 10-00 Довольно много зарегистрировалось, но дальше регистрации не пошло. И пустые фидбэки. Проверил на телефоне не поддерживается мой формат джейсона, а в браузере все ок, визуализация работает. Если вы зарегистрировались, и что-то не пошло, не стеняйтесь нажать фидбэк и оставить сообщение, я быстрее исправлю. Правильный вывод в телефоне вечером сяду допилю.

01.03.2026 19-00 Демо работает, нажимаете, получаете джейсон и правите его под себя. Пока 20 метров в длину контейнер - максимум. Если кому-то надо увеличить, пишите, все сделаем.

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

28.02.2026 22-00 Поэтому мы раскатили 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 без апи ключа не протестируете (вижу , что пытаетесь, поэтому акцентирую внимание на боте).