TG Chat Assistant
конспектор проектных чатов
Бот добавляется в рабочий чат проекта и превращает переписку в базу знаний: каждый день — короткий дайджест «что решили и о чём договорились», живые страницы тем, журналы решений и пожеланий. Один бот ведёт много чатов; в форум-супергруппе каждый топик — отдельный проект со своим дайджестом. Результат складывается в Obsidian-совместимый Markdown и в раздел «Чаты» личного кабинета.
▼ как это устроеноПростыми словами
TG Chat Assistant — это «секретарь» рабочего чата. Он молча читает переписку, раз в день собирает из неё короткий дайджест и раскладывает важное по полочкам: о чём была речь (темы), что решили (журнал решений), что пожелали сделать (журнал пожеланий). Ничего не надо размечать руками — бот делает это сам через OpenAI.
Продукт открывается как база знаний в Obsidian (папка с Markdown-файлами и
перекрёстными [[ссылками]]) и дублируется в раздел «Чаты»
личного кабинета. Найти старое обсуждение можно командой /find прямо в чате.
- Один бот — много чатов. Несколько чатов можно свести в один проект (общий дайджест).
- Форум-супергруппа: каждый топик ведёт свой проект и свой дайджест — один чат-хаб на всю команду.
- Дёшево: ≈ $0.02–0.05 в день на активный чат; дневной потолок расходов — в конфиге.
Архитектура и поток данных
Конвейер: от сообщений к знанию
Устойчивость к простою и сбоям. Сообщения никогда не теряются: рестарт догоняет пропущенные дни, падение между шагами самовосстанавливается, превышение дневного потолка расходов аккуратно ставит пайплайн на паузу. Качество дайджеста доводится не правками на проде, а эталонным e2e-тестом с разметкой (ни одно решение/пожелание не должно потеряться).
Один чат-хаб — проект в каждом топике
В форум-супергруппе удобно держать все проекты в одном чате: топик на проект. Бот это понимает — привязка идёт по паре (чат, топик), и каждый топик получает свой отдельный дайджест и свою базу знаний, не смешиваясь с соседними.
- Привязка точная: команда
/project <проект>внутри топика привязывает именно этот топик. Непривязанный топик не конспектируется — его сообщения не попадают в чужой проект. - Форум-топик ≠ ответ-тред: бот различает настоящие топики форума и обычные цепочки ответов, чтобы не плодить «фантомные» проекты.
- Каждому топику — свой ритм: конспект и «отметка прочитанного» считаются на каждую привязку независимо.
Сообщения «от имени бота» из терминала
Часто удобнее написать в чат/топик из терминала (через инструмент tg_send),
не переключаясь по вкладкам. Это реальная коммуникация — её писал человек, — и она должна
попадать в дайджест наравне с обычными сообщениями.
Загвоздка: Telegram не отдаёт боту его собственные сообщения, поэтому напрямую из чата конспектор их не увидит. Решение — журнал исходящих:
tg_sendпри каждой отправке дописывает строку в~/.wgp/tg_outbox.jsonl: текст/подпись, время, чат и топик,message_idи автор (по умолчанию — пользователь ОС, переопределяется--from "Имя", чтобы подписать любого участника).- Конспектор раз в несколько минут читает журнал и заносит записи в свой лог как
обычные сообщения автора нужного
(чат, топик)— дальше они идут в конспект и дайджест.
Надёжно и без дублей: позиция чтения журнала и ключ (чат, message_id) делают
перечитывание идемпотентным; непривязанный топик и файл без подписи — пропускаются.
Граница: учитываются отправки с машины конспектора (журнал локальный).
Кабинет и команды
Смотреть результат можно в кабинете (раздел «Чаты»: дайджесты, темы, журналы по каждому проекту) и прямо в чате командами:
/project <slug>— привязать чат/топик к проекту (только админ)./status— сколько сообщений, последний дайджест, расход LLM за день./find <текст>— полнотекстовый поиск по переписке (в рамках своего топика)./digest,/topics,/wishes,/decisions— собрать дайджест и открыть разделы базы знаний.
Выгрузка в кабинет идёт после каждого дайджеста и устойчива к сбою сети: данные не
теряются, повторная выгрузка не плодит дублей. Длинный контент усекается под лимиты
схемы кабинета прямо перед отправкой, поэтому крупный дайджест не «зависает» в очереди
на повторных попытках. Привязками можно управлять из кабинета — он становится основным
источником, а /project остаётся запасным.
Безопасность и приватность
- Переписка = данные, не команды. Текст чата уходит в промпт строго как данные; защита от prompt-инъекций зафиксирована тестом.
- Приватное не в git. Лог переписки, база знаний и секреты — вне репозитория (он публичный); токены не попадают в логи.
- При привязке бот предупреждает участников чата, что переписка обрабатывается через OpenAI API для построения дайджестов.
- Доступ к кабинету — под узкой ролью БД (только своя схема), без общих ключей.