Технічна документація: Telegram‑бот Smart Reports bot
Вступ
Телеграм‑бот Smart Reports bot — це автоматизований помічник для мережі ресторанів та служб доставки. Бот інтегрується з локальним сервером Syrve та хмарним API Syrve Cloud, виконує моніторинг процесів, надсилає попередження та формує звіти. Його мета — допомагати менеджерам оперативно реагувати на проблеми без необхідності входу в систему лояльності.
Бот реалізований з використанням асинхронного фреймворку aiogram 3 та планувальника APScheduler. Основні можливості охоплюють моніторинг кухні та доставки, контроль виручки, формування регулярних і on‑demand звітів, а також управління користувачами та чатами.
Основні функції
-
Моніторинг кухні та доставки. Бот регулярно опитує API Syrve Cloud і попереджає, коли час приготування або доставки перевищує задані порогові значення.
-
Контроль виручки. Користувач може встановити ліміт виручки для кожної точки; бот надсилає повідомлення, якщо поточна виручка перевищує цей ліміт, і надає можливість підтвердити інкасацію.
-
Формування звітів. Бот вміє відправляти короткі та детальні звіти про виручку, роботу кухні, доставку та персонал за розкладом або за запитом.
-
Управління користувачами, адміністраторами та чатами. Адміністратор може додавати користувачів, визначати для них доступні організації, призначати адмінів та керувати чатами, у які надсилаються звіти.
-
Гнучке налаштування. Параметри задаються через змінні середовища та конфігураційні файли (JSON), що дозволяє адаптувати бота під конкретну мережу.
Опис сервісів
1. DeliveryService
Використовується для роботи з доставками. Підраховує кількість доставок за сьогодні, обчислює середній час, знаходить затримки («черепахи»). Порогове значення затримки задається змінною SLOW_LIMIT_MIN (за замовчуванням 51 хв).
2. KitchenService
Обробляє дані про відкриті замовлення (зал і доставка). Для кожного замовлення визначає час перебування на кухні (kitchenDuration) та перевищення порогу KITCHEN_SLOW_MIN (21 хв за замовчуванням). Повертає:
-
Суму й кількість замовлень у роботі.
-
Максимальний час перевищення.
-
Список замовлень‑черепах.
3. ReportService
Формує звіти за організаціями. Основні методи:
-
build_report_for_org(org)— детальний звіт (виручка, кухня, персонал). -
totals_for_org(org)— стислий набір показників. -
monitor_kitchen()— використовується планувальником для контролю кухні. -
broadcast_report()/broadcast_all_orgs()— надсилання звітів у чати.
4. DailyReportService
Обчислює загальний денний звіт для користувача: сумарний виторг, кількість замовлень, кількість доставок, середній чек.
5. EmployeeService
Забезпечує підрахунок персоналу за потрібними ролями. Використовується у звітах.
6. RevenueWatcher
Періодично перевіряє виручку за сьогодні щодо встановленого ліміту для кожного користувача. Якщо виручка перевищує ліміт, бот надсилає попередження з кнопкою «Інкасація зроблена». При натисканні бот зберігає поточний рівень виручки як базовий (since). Ліміти зберігаються у revenue_limits.json і автоматично оновлюються.
7. KitchenWatcher
Перевіряє кухню кожні N хвилин (за замовчуванням 1 хв). Надсилає повідомлення лише тоді, коли з’являються нові черепахи, щоб запобігти спаму. Присутній механізм антиспаму: повідомлення надсилаються не частіше ніж раз у 320 секунд.
8. DeliveryWatcher
Аналізує доставку кожні N хвилин (за замовчуванням 15). Для кожного чату відслідковує середній час та список затримок; повідомлення надсилаються лише при зміні цих показників. Кнопки в повідомленні дозволяють переглянути деталі конкретного замовлення.
9. Планувальник (Report Scheduler)
Файл report_scheduler.py містить налаштування CRON‑триґерів APScheduler. За замовчуванням:
-
Снепшоти виручки: 13:00, 16:00, 19:00, 22:00.
-
Снепшоти персоналу: 09:00, 10:00, 13:00, 16:00, 19:00, 22:00.
-
Моніторинг кухні та доставки: щохвилини.
Адміністратори можуть змінити CRON‑вирази для іншого графіку.
Команди
Загальнодоступні
-
/start,/help— показує довідкову інформацію. -
/ping— перевірка роботи бота (повертає «pong»). -
/report— детальний звіт для однієї точки або меню вибору (якщо кілька точок). -
/report all— зведений звіт по всіх доступних організаціях. -
/kitchen— контроль кухні; показує кількість активних замовлень, суму і максимальний час перевищення, кнопки ведуть до деталей. -
/kitchen <номер>— детальна картка замовлення за номером (доставка або зал). -
/delivery— зведення по доставках за сьогодні; включає середній час та максимальні затримки. -
/delivery <UUID або номер>— показує деталі конкретного замовлення. -
/daily— денний підсумковий звіт для користувача (сумарний виторг, кількість замовлень, доставок, середній чек). -
/limits— перегляд встановлених лімітів виручки. -
/cancel— скасувати поточну операцію (використовується в діалогах).
Команди для адмінів
-
/setlimit— встановлення ліміту виручки. Адмін вибирає точку та вводить ліміт. -
/dellimit— видалення ліміту виручки. -
/users— перегляд користувачів та їх точок. -
/adduser <telegram_id>— додати користувача у whitelist та вибрати точки. -
/removeuser <telegram_id>— видалити користувача із whitelist та очистити його точки. -
/addadmin <telegram_id>— призначити користувача адміном. -
/removeadmin <telegram_id>— прибрати користувача зі списку адмінів. -
/addchat— додати поточний чат до розсилки. -
/removechat— прибрати поточний чат із розсилки. -
/autorpt— ручний запуск автоматичної розсилки звітів.
Вибір організацій (точок)
Коли адмін додає користувача, бот пропонує вибрати, до яких організацій (точок) той матиме доступ. Вибір здійснюється через інтерактивні кнопки. Інформація про відповідність користувачів точкам зберігається в user_orgs.json. Користувачі можуть переглядати звіти лише за вибраними точками.
Ліміти виручки
-
Ліміт задається у гривнях для конкретного користувача та точки.
-
Бот відстежує різницю між поточною виручкою за день та значенням
since. Якщо перевищення понад ліміт — надсилає попередження з кнопкою «Інкасація зроблена». -
Натиснувши кнопку, користувач підтверджує інкасацію: поточний виторг зберігається у
since, відлік починається заново. -
Для скасування інкасації є кнопка «↩️ Скасувати», яка повертає попередній стан.
-
Ліміти зберігаються у файлі
revenue_limits.jsonта підтримують автоочищення для нового дня.
Моніторинг кухні та доставки
-
Пороги. Значення порогу для кухні (
KITCHEN_THRESHOLD) та доставки (DELIVERY_THRESHOLD) можна задати через змінні середовища або.env. -
Фільтрація. Бот повідомляє лише про замовлення, що перевищили порогові значення, щоб уникнути спаму.
-
Інтервали. Частоту перевірок можна змінити, модифікуючи параметри
interval_minу конструкторахKitchenWatcher,DeliveryWatcherтаRevenueWatcherуbot/main.py. -
Кнопки. Сповіщення включають кнопки з номерами замовлень, що дозволяє швидко перейти до деталей.
Планувальник та розклад
APScheduler використовується для автоматичного надсилання звітів:
-
Снепшоти виручки: 13:00, 16:00, 19:00, 22:00.
-
Снепшоти персоналу: 09:00, 10:00, 13:00, 16:00, 19:00, 22:00.
-
Денний звіт: 23:00.
-
Моніторинг кухні та доставки: щохвилини.
CRON‑вирази задаються у bot/services/report_scheduler.py і можуть бути змінені під ваші потреби.
Розширення та кастомізація
Код бота побудовано у дусі принципів SOLID та використовує впровадження залежностей (Dependency Injection). Це полегшує розширення й модифікацію:
-
Нові watcher’и. Можна створити власний клас з методом
start()та_runner()і підключити його аналогічно до інших. -
Додавання команд. Щоб додати команду, напишіть функцію‑handler у
bot/handlers/commands.pyта зареєструйте її в Router. -
Підключення інших API. Створіть клієнт у
bot/api/, сервіс уbot/services/і впровадьте його доmain.py. -
Тести. Перед розгортанням змін рекомендовано запускати тести (розміщені в
bot/tests/), щоб переконатися у відсутності регресій.
Підтримка та діагностика
-
Логування. Логування налаштовується у
bot/utils/logger.py. Повідомлення можна виводити у файл або стандартний потік; рівень логів та формат можна змінити. -
Підключення. Якщо бот не підключається до Syrve, перевірте правильність
SYRVE__host,SYRVE__login,SYRVE__password_sha1та підключення до мережі. -
Чати. Якщо повідомлення не приходять, перевірте
report_chats.jsonта переконайтесь, що бот має права надсилати повідомлення у відповідний чат. -
Діагностика. Команда
/pingповертає «pong» та допомагає перевірити, що бот працює. Для більш детальної діагностики перегляньте логи.
Висновок
Бот Smart Reports bot автоматизує контроль ключових бізнес‑процесів мережі ресторанів: слідкує за швидкістю роботи кухні та доставки, контролює виручку, формує звіти та сповіщає про проблеми у режимі реального часу. Завдяки модульній архітектурі та інтеграції з API Syrve бот легко налаштовувати та розширювати відповідно до специфічних потреб вашого бізнесу.
Використовуючи цей бот, менеджери отримують можливість оперативно реагувати на затримки та перевищення лімітів, приймати рішення на основі актуальних даних та скорочувати час на рутинні операції.
No comments to display
No comments to display