Бот-саммаризатор: мониторинг групповых чатов Telegram и MAX
Как я собрал самостоятельно развёртываемый сервис, который анализирует сообщения, готовит сводки и обнаруживает инциденты.
Содержание
В групповых чатах обсуждения быстро превращаются в поток, за которым сложно следить: важное сообщение теряется среди коротких ответов, повторяющиеся проблемы выглядят как отдельные случаи, а чтобы восстановить контекст, приходится перечитывать десятки веток.
Я сделал Summary Bot — сервис для мониторинга групповых чатов Telegram и MAX. Он собирает доступные сообщения, анализирует их с помощью языковой модели, формирует дневные и ночные сводки и помогает замечать потенциальные инциденты.
Что решает бот
Задача не сводится к кнопке «сократить переписку». Мне нужен был инструмент с несколькими сценариями:
- Сводки по расписанию. Получать обобщённую картину обсуждений без ручного чтения каждого сообщения.
- Саммари по запросу. Восстанавливать содержание диалогов, когда информация нужна сейчас.
- Алерты. Выделять возможные жалобы, конфликты и другие события, требующие внимания.
- Разделение доступа. Работать с подразделениями, руководителями, администраторами и подписками на уведомления.
При этом модель не принимает управленческие решения. Её выводы — подсказка для человека, а не доказательство того, что инцидент действительно произошёл.
Как устроено решение
У сервиса есть русскоязычный веб-интерфейс для конфигурации и просмотра результатов. Бэкенд принимает сообщения через интеграции с мессенджерами, сохраняет данные и запускает обработку. Для анализа используется внешний AI API.
Стек проекта: Node.js 24, React, Fastify, SQLite в режиме WAL и локальное файловое хранилище. База данных и файлы остаются на сервере владельца. При этом содержимое чатов, направляемое на анализ, передаётся выбранному AI-провайдеру — это важно учитывать при работе с конфиденциальными обсуждениями.
Ботов можно подключить к Telegram и MAX в режиме polling или webhook. Для обычного сервера polling удобен тем, что не требует публичного адреса для приёма событий.
Отдельно реализована настройка подразделений, ролей, получателей уведомлений, расписаний, часового пояса и AI-модели. Приложение не должно требовать заранее заданной организационной структуры.
Почему я сделал проект переносимым
Проект готовился не под один конкретный сервер. Поэтому конфигурация вынесена в переменные окружения: токены ботов, первый администратор, адрес приложения и параметры AI-провайдера задаются при развёртывании.
Для запуска используется Docker Compose. Данные хранятся в отдельном volume, а интерфейс можно разместить за собственным HTTPS reverse proxy.
У решения есть и осознанное ограничение: текущая схема с SQLite, планировщиком и polling предполагает один экземпляр приложения, а не произвольное горизонтальное масштабирование.
Также я убрал из публичной конфигурации привязки к конкретной инфраструктуре и реальные организационные данные. Это позволяет использовать репозиторий как основу для собственного развёртывания.
Как запустить
Публичный репозиторий содержит пример настроек и инструкцию по запуску:
git clone https://github.com/roblencheg/summary_bot.git
cd summary_bot
cp .env.example .env
chmod 600 .env
# Заполнить .env своими настройками
docker compose up -d --build
Для работы AI-анализа потребуется API, совместимый с Responses API и strict JSON Schema. Без AI-ключа интерфейс доступен, но анализ и генерация сводок не работают.
Перед использованием в реальных чатах нужно настроить права ботов, доступ администраторов и правила обработки данных. Для Telegram также может понадобиться отключить Privacy Mode, чтобы бот видел обычные сообщения группы.
Результат
Получился самостоятельный веб-сервис, в котором сбор сообщений, AI-анализ, расписания, уведомления и администрирование объединены в одном приложении.
Для меня ценность этого проекта не в том, чтобы сделать переписку короче. Гораздо важнее своевременно обнаружить существенное, сохранить контекст и избавить человека от необходимости постоянно просматривать весь поток сообщений.
Код и инструкция по развёртыванию: roblencheg/summary_bot.