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


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


После правок команда не локальном применяем миграции (алембик - 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}").
Система ныряет в Redis.
Достает сохраненный расчет.
Рендерит Jinja2-шаблон
visualize.html.Пользователь получает полноценную 3D-модель, которую можно крутить, вертеть и изучать, как именно движок разложил его коробки.

Что под капотом (Сервисное меню)
Помимо основного флоу, мы внедрили стандартный набор «выживания» в Телеграме:
help: Чтобы не забыть, зачем мы здесь.stats: Лимит в 300 запросов (пока щедро, для всех).tasks: История последних 10 расчетов (подтягиваем из БД).feedback: Прямая связь с разработчиками.
Грабли, Docker и «Злобные вишенки» деплоя
Теория — это когда всё понятно, но ничего не работает. Практика — это когда всё работает, но не сразу. Когда мы начали паковать всё это в Docker на боевом сервере в Питере, вылезли те самые «вишенки»:
Лимиты Docker Hub: Оказалось, что анонимные скачивания образов в 2026 году — это лотерея. Пришлось переезжать на зеркала, чтобы Nginx вообще соизволил скачаться.
Битва за SSL: Пока DNS-записи домена
skewer-api.ruрасползались по миру, Certbot отказывался выдавать «замочек». Пришлось подождать, пока интернет «узнает» наш новый адрес.Анти-спам: В первой версии бот был слишком подозрительным — банил за любое лишнее движение. Настроили Redis-мидлварь так, чтобы она отсекала только явных ботов, давая спокойно работать.
Итог: Пробуйте в деле
Мы не стали строить закрытую крепость. Проект открыт, API доступно, а бот готов крутить ваши коробки 24/7.
🚀 Попробовать прямо сейчас: @routeload_bot Система принимает отзывы, комментарии. Если появится интерес, не стесняйтесь связываться
Не стесняйтесь: Пишите в бота, тестируйте свои реальные заказы. Если есть идеи по алгоритмам или вы нашли баг — стучитесь в фидбэк или прямо здесь в комментариях. Мы создали это для работы, а работа должна быть удобной.
сваггер https://skewer-api.ru/docs#/ он есть, но по апи ключу. пользуйтесь ботом и если уже решите что, нужен сваггер, то обращайтесь в фидбэк, я все увижу и отвечу. Сейчас сервис OPEN IN TELEGRAM. @routeload_bot без апи ключа не протестируете (вижу , что пытаетесь, поэтому акцентирую внимание на боте).
