Как это устроено
Демо — не макет. Это тот же бэкенд, с которого начнётся проект: Python 3, aiohttp, SQLite, воркер напоминаний и клиент Bot API MAX. Здесь мессенджер имитируется панелью «Чат с ботом», а время можно перематывать, чтобы увидеть правила воркера без ожидания.
Схема
Воркер — фоновая задача asyncio в том же процессе (или отдельный юнит systemd, если заказчик захочет разнести). Он идёт по минутам и хранит флаги в самой задаче: уровень напоминания, «предупреждён о сроке», «просрочена», «передана куратору». Поэтому перезапуск сервиса не дублирует сообщения и не теряет их.
Правила воркера
| Условие | Действие |
|---|---|
| Задача назначена и не принята 30 мин | мягкое напоминание исполнителю |
| 60 мин | строгое напоминание |
| 120 мин | сообщение руководителю, который поставил задачу |
| На бирже 30 мин без исполнителя | задача назначается куратору отдела |
| За 1 час до срока | напоминание исполнителю |
| Срок прошёл | метка «просрочена», уведомления исполнителю и автору |
| 08:00 каждый день | сводка: руководителям — что на проверке и просрочено, сотрудникам — их задачи, всем — именинники |
| Заметке 7 дней | удаляется вместе с историей правок |
| Регулярная задача принята | создаётся следующая: строго от срока или через период от завершения |
Что уже работает в демо
- Три роли: администратор, руководитель, сотрудник — права проверяются на сервере
- Задача лично или на биржу отдела; берёт первый нажавший, второй получает «Задачу уже взял …»
- Компания, отдел, тег, объект, срок, чек-лист, обязательное фото
- Шаблоны и регулярность: день, неделя, месяц, год; строго или скользяще
- Приёмка: оценка 1–5 или возврат на доработку с комментарием
- Чат в карточке с фото и PDF до 5 МБ, тип файла проверяется по содержимому
- Отмена: исполнитель указывает причину, руководитель подтверждает или отклоняет
- Заметки: объявления и неисправности, история правок, удаление через 7 дней
- Иерархия объектов: отель → корпус → этаж → номер, задачи по ветке
- Рейтинг за день и за месяц по сумме оценок
- Админка: сотрудники, роли, увольнение (открытые задачи возвращаются на биржу), отделы и кураторы, теги
- Защита от двойного клика: кнопка блокируется, а сервер по ключу идемпотентности не выполнит действие дважды
Интеграция с MAX
Клиент Bot API уже написан (app/max_api.py) по официальной схеме API: отправка сообщений с inline-кнопками callback и open_app, ответ на нажатие, подписка на webhook с секретом, проверка подписи initData мини-приложения через HMAC-SHA256.
- Нажатие «Взять в работу» в чате и в мини-приложении идёт через один и тот же код — в демо его можно проверить в панели чата.
- Кнопка «Открыть карточку» открывает мини-приложение сразу на нужной задаче (payload
task_25). - Что проверю на тестовом боте в первый день: лимиты запросов, передачу параметра deep-link в
start_param, формат загрузки фото через API, поведение webhook при недоступности сервера.
Надёжность и выкладка
- systemd: автоперезапуск, лимит памяти, журналы в journald
- Nginx: HTTPS (обязателен для webhook MAX), статика мини-приложения, проксирование API
- Бэкап:
sqlite3 .backupкаждую ночь и перед каждым обновлением, хранение 14 дней, копия на второй диск или в S3 - Кэш справочников в памяти, сброс при изменении
- SQLite в режиме WAL спокойно держит сотни сотрудников. Если нужна PostgreSQL — слой данных один, перевод занимает день
Как я это реализую
- День 1. Тестовый бот в MAX, webhook на ваш домен, проверка initData и deep-link. Роли и справочники. Уточняю спорные места ТЗ.
- День 2. Задачи лично и на биржу, чек-листы, фото, приёмка с оценкой и доработкой, уведомления в MAX с кнопками.
- День 3. Воркер: напоминания 30/60/120 минут, биржа → куратор, срок и просрочка. Выкладка на ваш сервер: systemd, Nginx, бэкапы. Сдача первого этапа — сотрудники уже работают.
- День 4. Шаблоны и регулярные задачи, отмена с подтверждением, чат с файлами, заметки.
- День 5. Объекты, рейтинг, утренняя сводка и именинники, нагрузочная проверка, инструкция администратору.
Стоимость и сроки
- роли, админка, справочники
- задачи лично и на биржу отдела
- чек-листы, обязательное фото, приёмка с оценкой и доработкой
- бот MAX: уведомления с кнопками, открытие карточки из чата
- воркер напоминаний и эскалаций
- выкладка на сервер, бэкапы
- шаблоны и регулярные задачи
- отмена с причиной и подтверждением
- чат в карточке с файлами
- заметки с историей и автоудалением
- иерархия объектов, рейтинг за день и месяц
- утренняя сводка и именинники
- оплата по этапам, после приёмки каждого
- исходный код и доступы — ваши
- 2 недели бесплатных правок после запуска
- инструкция для администратора
Сервер, домен и регистрация бота в MAX — на стороне заказчика; помогу всё настроить. Если в ТЗ появятся новые разделы, оценю их отдельно до начала работ.