MAX Summary Groups Bot

Бот MAX: ежедневный AI-дайджест групповых чатов и автоответы по ключевым словам.

Skills & deliverables:
PythonFastAPIMAX Messenger APIGigaChatSQLiteAPSchedulerDocker

Project description

Документация

Компоненты

  • Сбор сообщений из групповых чатов MAX (бот — администратор чата)
  • SQLite: сообщения, чаты, настройки, админы, ключевые слова
  • GigaChat: формирование краткого саммари по каждому чату
  • APScheduler: отправка дайджеста по расписанию
  • FastAPI: webhook в production, long polling в разработке

Переменные окружения (.env)

ПеременнаяНазначение
MAX_BOT_TOKENТокен бота (business.max.ru → Чат-боты → Интеграция)
SUMMARY_RECIPIENT_USER_IDuser_id получателя дайджеста в ЛС
GIGACHAT_CREDENTIALSКлюч GigaChat (developers.sber.ru)
GIGACHAT_MODELМодель, например GigaChat
BOT_MODEpolling или webhook
WEBHOOK_URLПубличный HTTPS URL /webhook (production)
WEBHOOK_SECRETСекрет для заголовка X-Max-Bot-Api-Secret
WEBHOOK_PORTЛокальный порт, по умолчанию 8080

config.yaml

ПараметрЗначение
digest.timeВремя отправки дайджеста (HH:MM, Europe/Moscow)
digest.periodprevious_day — вчера 00:00–24:00; current_day — с 00:00 сегодня
digest.include_empty_chatstrue/false — включать чаты без сообщений
trigger_modereply_in_chat / notify_owner / both
keywordsСписок word + template для автоответов

CLI

python run.py run
python run.py run --ngrok
python run.py digest
python run.py digest --today
python run.py digest --yesterday
python run.py backfill

Production

  1. BOT_MODE=webhook, WEBHOOK_USE_NGROK=false
  2. Указать WEBHOOK_URL и WEBHOOK_SECRET
  3. HTTPS:443 → localhost:WEBHOOK_PORT (nginx/caddy)
  4. docker compose up -d или systemd unit deploy/max-summary-bot.service
  5. Том ./data для SQLite

Health

GET /health — проверка работы сервиса

Инструкция пользователя

Роли

РольДействия
Администратор ботаНастройка через ЛС, добавление бота в группы, ключевые слова
Получатель дайджестаЕжедневно получает AI-сводку по всем чатам в ЛС
Участник группыПишет сообщения; при ключевом слове — автоответ или уведомление

Первый запуск (администратор)

  1. Заполнить .env: MAX_BOT_TOKEN, SUMMARY_RECIPIENT_USER_ID, GIGACHAT_CREDENTIALS
  2. Настроить config.yaml: время дайджеста, period, trigger_mode, keywords
  3. Добавить бота администратором во все нужные групповые чаты
  4. Запустить бота: python run.py run
  5. Выполнить python run.py backfill — подтянуть сообщения за вчера
  6. Открыть бота в ЛС — должно появиться меню с кнопками

Ежедневный дайджест (получатель)

  • Приходит автоматически в digest.time (часовой пояс Europe/Moscow)
  • Формат: дата → блоки по каждому чату с AI-резюме
  • Если сообщений не было — уведомление «за день не было сообщений»
  • Ручная отправка (админ/CLI): python run.py digest, --today, --yesterday

Ключевые слова (участники групп)

  • Срабатывание: подстрока в тексте, без учёта регистра
  • reply_in_chat — бот отвечает в чат шаблоном (reply)
  • notify_owner — уведомление получателю в ЛС
  • both — оба действия
  • Повтор того же слова в том же чате блокируется на 5 минут

Примеры слов: проблема, срочно, ошибка, не работает, заявка, жалоба, возврат, оплата, доставка, помощь

Админ-панель (кнопки в ЛС)

КнопкаДействие
СтатусРежим, webhook, число чатов, ключевые слова, время дайджеста, получатель
ДайджестСменить время (HH:MM), период (previous_day / current_day)
ТриггерыРежим: ответ в чате / уведомление / оба
Ключевые словаПросмотр, добавление (слово + шаблон), удаление
ПолучательЗадать user_id получателя дайджеста
АдминыДобавить/удалить администраторов
ОбновитьОбновить главное меню

После смены времени дайджеста — перезапуск бота (расписание читается при старте).

Добавление бота в новый чат

  1. Добавить бота администратором в группу
  2. Бот отправит приветствие о подключении
  3. Чат попадёт в базу, новые сообщения сохраняются

Устранение неполадок

ПроблемаРешение
Дайджест пустойПроверить, что бот был админом в нужный день; выполнить backfill
Webhook не работает локальноVPN для ngrok; python run.py run --ngrok
GigaChat недоступенДайджест уйдёт с fallback — список сообщений без AI
Нет доступа к админкеПопросить админа добавить ваш user_id
Доступ запрещёнВаш user_id не в списке администраторов

Безопасность

  • Не передавать .env и токены третьим лицам
  • При утечке MAX_BOT_TOKEN — перевыпустить на business.max.ru
  • Webhook защищён заголовком X-Max-Bot-Api-Secret