No description
Find a file
byrsapty 0eabebaca3 Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App
Flask API/admin backend, aiogram bot with delivery/pickup FSM flows,
monobank payment integration, and a Vite/React Telegram Mini App for
menu browsing and cart management.
2026-08-08 15:50:50 +03:00
bober_bbq Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
bot Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
docs Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
webapp Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
.env.example Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
.gitignore Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
README.md Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
requirements.txt Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
run_bot.py Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00
run_web.py Initial commit: Bober BBQ Telegram bot + backend + admin + Mini App 2026-08-08 15:50:50 +03:00

Bober BBQ — Telegram Bot + Mini App

Реалізація ТЗ на Telegram-бота та Web App для кафе/доставки Bober BBQ: меню, кошик (спільний для бота і Mini App), оформлення доставки/самовивозу, оплата monobank, сповіщення менеджера в Telegram, адмін-панель.

Структура проєкту

bober-bbq-bot/
├── bober_bbq/          # Flask backend: REST API + адмін-панель + БД-моделі
│   ├── api/             # /api/categories, /api/products, /api/cart, /api/settings, monobank webhook
│   ├── admin/            # Адмін-панель (Flask-Login + Jinja2)
│   ├── payments/          # Інтеграція monobank
│   ├── utils/              # Ціноутворення, графік роботи, auth Telegram WebApp, форматування замовлень
│   ├── templates/admin/     # HTML-шаблони адмінки
│   ├── static/                # CSS адмінки + завантажені фото товарів
│   ├── models.py                # SQLAlchemy-моделі (users, categories, products, cart, orders, settings)
│   └── app.py                     # Flask app factory
├── bot/                 # Telegram-бот (aiogram 3)
│   ├── handlers/          # /start, меню, кошик, доставка (FSM), самовивіз (FSM), оплата, контакти
│   ├── services/            # Кошик, замовлення, сповіщення менеджеру, оплата
│   ├── keyboards.py            # Reply/inline клавіатури
│   └── main.py                    # Точка входу бота (long polling)
├── webapp/               # Telegram Mini App (Vite + React + TypeScript)
│   └── src/                # Меню, кошик, контакти
├── run_web.py             # Продакшн-запуск Flask backend (waitress)
├── run_bot.py              # Запуск бота
└── requirements.txt

Як це працює разом

  • Кошик єдиний для бота і Web App: обидва читають/пишуть одну таблицю cart_items у БД, прив'язану до telegram_id користувача (розділ 4 ТЗ).
  • Web App (кнопка «🍽 Меню») відповідає лише за перегляд меню та кошик. Кнопки «Оформити доставку» / «Оформити самовивіз» у кошику Mini App викликають Telegram.WebApp.sendData(...) і закривають Web App — далі покроковий діалог (адреса, ім'я, телефон, оплата) веде вже сам бот, як і описано в розділах 5 та 7-10 ТЗ.
  • Бот і backend використовують одні й ті самі SQLAlchemy-моделі — бот працює з БД напряму (через спільний Flask app-контекст), без зайвого HTTP-стрибка. Web App ходить у backend через REST API з підписом Telegram initData (розділ 18.4 ТЗ — захист API).
  • monobank: створення інвойсу, кнопка оплати, перевірка статусу і вебхук підтвердження оплати — розділ bober_bbq/payments/monobank.py. Без MONOBANK_TOKEN бот не падає, а пропонує оплату при отриманні і просить менеджера зв'язатися з клієнтом.

Швидкий старт (Windows)

  1. Встановіть залежності (Python 3.11+, Node 18+):
pip install -r requirements.txt
cd webapp && npm install && npm run build && cd ..
  1. Скопіюйте .env.example.env і заповніть значення (токен бота, чати менеджера, WEBAPP_URL — публічний HTTPS-домен, бо Telegram Mini App вимагає HTTPS).

  2. Запустіть backend (API + адмінка + роздача зібраного Web App):

python run_web.py

Адмінка: http://localhost:8000/admin (логін/пароль — FLASK_ADMIN_USERNAME / FLASK_ADMIN_PASSWORD з .env, дефолт admin / значення з .env.example).

  1. Запустіть бота (окремий процес):
python run_bot.py

Перше ж підключення до БД автоматично створює таблиці й наповнює їх демонстративними категоріями/товарами (bober_bbq/seed.py) — заміните на реальне меню через адмінку.

Локальна розробка Web App окремо (гаряче перезавантаження)

cd webapp
npm run dev

Vite проксує /api/* на http://localhost:8000 (див. webapp/vite.config.ts). Оскільки поза Telegram немає справжнього initData, API у режимі debug=True приймає ?dev_user_id=<будь-яке число> як заглушку для розробки — лише коли FLASK_DEBUG/app.debug увімкнено, у проді цей обхід вимкнений.

Важливо перед продакшн-запуском

  • WEBAPP_URL і MONOBANK_WEBHOOK_URL мають бути реальними HTTPS-адресами (Telegram Mini App і monobank webhook не працюють по HTTP).
  • Додайте бота як адміністратора в чати/групи доставки та самовивозу, вкажіть їх chat_id в Налаштуваннях адмінки.
  • Детальніше — docs/DEPLOYMENT.md.
  • Список пунктів, які треба узгодити із замовником до продакшену (розділ 22 ТЗ) — docs/OPEN_QUESTIONS.md.