Привет. Нужно сделать простенького бота для работников склада, которые утром будут сбрасывать фотоотчет со склада. ТЗ написано с помощью джипити. Можно сделать проще, идеи приветствуются. Главное, чтобы работало. Шаговая инструкция - далее фото - и следующий шаг. И приходило руководителю.
1) Цель и ожидаемый эффект
2) Роли пользователей
Работник (кладовщик): получает индивидуальные задания по своим зонам; отправляет фото + чеклист; получает фидбек.
Старший смены: видит дашборд выполнения по смене, принимает/отклоняет отчеты, открывает инциденты.
Цель
Сделать простой Telegram-бот, который каждый день в 09:30 отправляет одному работнику пошаговое задание: сфотографировать ключевые зоны на двух складах + зону возвратов + кладовку. После завершения бот отправляет сводку менеджеру.
Сценарий (пользователь → бот)
09:30 — бот отправляет: “Начать проверку”.
Этап 1 — Склад №1:
Фото каждого ряда (видно ряд полностью, проход не заставлен).
Фото общего вида склада №1.
Правила: товар только на стеллажах; по артикулам (не смешиваем); на полу ничего; пол чистый; документы отсортированы.
Этап 2 — Склад №2:
Фото каждого ряда (полная длина ряда).
Фото общего вида склада №2.
Правила как выше: чистота, проходы, без мусора и “временных” коробок.
Этап 3 — Зона возвратов:
Этап 4 — Кладовка/гардероб/принтер:
Финиш — бот показывает итог “Отчет отправлен менеджеру”.
Немедленные отклонения фото (бот показывает подсказку и просит переснять)
Видно не весь ряд или загорожены проходы.
Товар на полу или смешанные артикулы.
Мусор/пленка/коробки в рабочей зоне.
Нечеткое/темное фото.
Роли
Результат для менеджера
После завершения — одно сообщение типа:
Где разворачиваем это в Laravel и как
Техстек
Laravel 10/11 (твой существующий проект).
БД: SQLite/PostgreSQL (на пилот можно SQLite).
Очереди: Redis (или sync для теста).
Файлы: локально storage/app/public/photos (на пилот), далее — S3/MinIO.
Пакеты (composer)
composer require irazasyed/telegram-bot-sdk:^3.0 predis/predis:^2.0
(Если уже есть другой SDK — ок.)
ENV (пример)
TELEGRAM_BOT_TOKEN=xxxx
TELEGRAM_BOT_NAME=warehouse_pilot_bot
APP_URL=https://your-domain
TIMEZONE=Europe/Warsaw
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
QUEUE_CONNECTION=redis # или sync на пилот
Роуты
POST /bot/telegram/webhook # прием апдейтов
Контроллер/Сервис
App\Http\Controllers\BotWebhookController@handle — принимает апдейты, управляет состоянием “какой этап/какой ряд”.
Простой статус в БД: кто на каком шаге, сколько фото уже есть.
Минимальные таблицы
bot_users (id, telegram_id, role[worker|manager], name).
runs (id, worker_id, date, started_at, finished_at, status).
run_photos (id, run_id, stage[wh1|wh2|returns|cloak], note, path, created_at).
(На пилот KPI/чекбоксы не храним — только фото и этап.)
Планировщик (Scheduler)
Webhook
После деплоя:
curl -F "url=https://your-domain/bot/telegram/webhook" \
https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/setWebhook
Деплой
Все в существующем Laravel-проекте.
Для теста достаточно nginx + PHP-FPM + HTTPS (Let’s Encrypt).
На прод — Supervisor для queue:work (или пока QUEUE_CONNECTION=sync).
Объем работ фрилансера
Что сделать
Подключить Telegram webhook в Laravel.
Реализовать пошаговый флоу с 4 этапами (включая подсказки “как должно выглядеть фото”).
Сохранять фото локально, группировать по “утру/дате/этапу”.
После завершения — отправлять менеджеру сводку (одно сообщение с альбомом).
Команды для планировщика и инструкция по настройке webhook.
Настроить простой “reset” командой /reset для пилота (сбросить прогресс).
Приемка
В 09:30 работник получает напоминание.
Проходит все 4 этапа, бот принимает подходящие фото, отклоняет неподходящие (по правилам выше).
Менеджер получает одно итоговое сообщение с фото и отметками этапов.
Повторный запуск в тот же день возможен командой /start или /reset (для тестов).
Передача
Репозиторий (Git) + README.md с инструкцией.
.env.example заполнен полями бота.
Миграции (bot_users, runs, run_photos).
Команды: php artisan schedule:work (на тест), php artisan queue:work (по необходимости).
Настройка Supervisor (опционально).
Приложение: эталонные подсказки к фото (выводить в боте перед шагом)
Склад №1 (каждый ряд + общее):
— Ряд в кадре полностью; проходы чистые; товар на стеллажах, не на полу; без “временных” коробок; артикулы не смешанные.
Склад №2 (каждый ряд + общее):
— То же самое: полная длина ряда, чисто, отсутствуют лишние вещи, артикулы отдельно.
Зона возвратов:
— Целые — вместе; поврежденные/неполные — отдельно и подписанные; ничего на полу; порядок видно на фото.
Кладовка/принтер:
— Личные вещи в шкафах; обувь сложена; пол чистый; стол с принтером убран; есть бумага/скотч/лента.
Этот текст можно прямо публиковать на фриланс. Если нужно — соберу из этого PDF/Word и отдам файлом вместе с коротким шаблоном ответа для кандидатов, чтобы проще сравнивать предложения.