Бот-наблюдатель для рабочих чатов в MAX: что он умеет на сегодня, кто чем управляет и что ещё не сделано.
Исходная задача была узкой: бот в чатах MAX, который собирает информацию с объектов в единую систему, обрабатывает инциденты и гарантийные обходы, информирует ответственных и опционально пишет в YouGile. Ниже — пункт за пунктом.
| Из исходного запроса | Статус | Как реализовано |
|---|---|---|
| Сбор текстов в единую систему знаний | сделано | Каждое сообщение из чата (текст, голос, фото/PDF) сохраняется и классифицируется в общей базе на сервере в России. |
| Инциденты и гарантийные обходы | сделано | Триггерные слова → мгновенный алерт админам, не дожидаясь дайджеста; список слов редактируется прямо в боте. |
| Информирование ответственных лиц | сделано | Дайджест раз в 30 минут по каждому чату + мгновенные алерты по инцидентам и тегам начальника. |
| Интеграция по API с YouGile | сделано | Привязка чата к проекту, перенос переписки, создание задач командой, сводка по открытым задачам. |
Автосоздание задач в YouGile по ключевым словам в исходном ТЗ не обсуждалось и не запланировано — задача заводится осознанно, командой /задача.
«Чаттерный надзор» сидит в рабочих чатах строительных объектов в MAX, читает переписку (после согласия каждого участника на обработку ПДн) и превращает её в управляемую информацию: кто о чём сообщил, что из этого инцидент, что нужно сделать и куда это записать.
Пример: рабочий пишет в чат объекта голосовое «нужна смета на облицовку, авария на подстанции».
Если бы триггерного слова не было — сообщение просто легло бы в базу и попало в плановую сводку через 30 минут. Сам 30-минутный таймер хранит время последнего запуска в базе, а не только в памяти процесса — раньше частые перезапуски сервиса (при каждом деплое) сбрасывали внутренний отсчёт, и автодайджест мог не доехать до конца интервала; сейчас переживает любые перезапуски.
Роль присваивается человеку глобально (не привязана к одному чату) и действует во всех чатах, где есть бот. Обычный участник — вообще без роли.
| Роль | Сейчас | Получает дайджест/алерты | Управляет ролями | Привязка проекта, доступ, список несогласных |
|---|---|---|---|---|
| SUPER_ADMIN | Илья, Рафаэль | да, по всем чатам | да | да |
| ADMIN | Рафик | да, по всем чатам | нет | да |
| Участник группового чата | любой согласившийся | нет | нет | только своя /сводка и /задача |
| Клиент с выданным доступом | выдаётся командой /доступ |
нет | нет | /сводка из личных сообщений без членства в чате |
Важно: согласие на ПДн проверяется отдельно на каждого человека в каждом чате — присутствие в чате (даже с ролью SUPER_ADMIN) само по себе согласием не считается.
Ниже — не справочник команд (он ниже, в разделе «Все команды»), а конкретный порядок действий для трёх ролей на практике.
/задача нужна смета на облицовку./сводка: покажет и краткий пересказ переписки, и список открытых задач./доступ), но ты даже не состоишь в самом чате — те же команды /сводка работают прямо в личке с ботом./проект <название>: привязывает чат к проекту в YouGile (если такого проекта ещё нет — создаст новый)./доступ <id>; если человек уходит с проекта или доступ больше не нужен — /доступ_убрать <id> (для тех, кто и так состоял в чате, доступ отзовётся сам при выходе — но лучше не полагаться на автоматику там, где это критично)./несогласные./триггеры, /триггер_добавить <слово>, /триггер_убрать <слово> (эти три — в личке с ботом, не в общем чате)./admin в личке боту — список всех текущих администраторов с кнопкой «✕» на удаление каждого./admin_add <id> [admin|super] [имя] — назначить нового администратора или повысить существующего до SUPER_ADMIN.| Действие | Где | Кто | Результат |
|---|---|---|---|
| Любой текст | группа / личка | любой согласившийся | сохраняется, классифицируется: инцидент / лид / вопрос / общее |
| Голосовое сообщение | группа / личка | любой | расшифровывается локально, дальше — как обычный текст |
| Фото или PDF | группа / личка | любой | текст на изображении распознаётся, файл нигде не сохраняется |
Реальный тег (@) начальника | группа | любой | мгновенный алерт админам, не дожидаясь дайджеста |
| Сообщение боту в личку | личка | любой | уходит во «внутренний чат» дайджеста — видят все админы |
| Команда | Где | Результат |
|---|---|---|
/сводка | группа | LLM-сводка чата + открытые задачи из привязанного проекта YouGile |
/сводка | личка | то же самое, но только если выдан /доступ |
/задача <текст> | группа | создаёт настоящую задачу в привязанном проекте YouGile |
| Команда | Где | Результат |
|---|---|---|
/проект <название> | группа | привязывает чат к проекту YouGile — точное совпадение или новый проект |
/доступ <id> | группа | даёт человеку право на /сводка этого чата из личных сообщений |
/доступ_убрать <id> | группа | отзывает ранее выданный доступ вручную |
| (автоматически) | — | если доступ выдавался человеку, который на тот момент состоял в чате, и он из чата вышел — доступ отзывается сам в ближайшем цикле дайджеста; доступ, выданный «внешнему» человеку (не состоявшему в чате), так не отзывается — только вручную |
/несогласные | группа | список участников чата, не принявших согласие на ПДн |
/триггеры | личка | список слов, которые превращают сообщение в «инцидент» |
/триггер_добавить <слово> | личка | добавить новое триггерное слово |
/триггер_убрать <слово> | личка | убрать триггерное слово |
| Команда | Где | Результат |
|---|---|---|
/admin | личка | список всех администраторов, кнопка «✕» на удаление каждого |
/admin_add <id> [admin|super] [имя] | личка | добавить нового администратора или повысить существующего |
Требование с самого начала — ничего не должно уходить за пределы России и не должно храниться дольше необходимого.