Вітаю. Потрібно зробити простенького бота для працівників складу які вранці будуть скидати фото звіт зі складу. ТЗ написане за допомогою джіпіті. Можна зробити простіше ідеї вітаються. Головне щоб працювало. Крок інструкція - далі фото - і наступний крок. І приходило керівнику.
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 і віддам файлом разом із коротким шаблоном відповіді для кандидатів, щоб простіше порівнювати пропозиції.