Chat Digest · Telegram → Obsidian

TG Chat Assistant
конспектор проектных чатов

Бот добавляется в рабочий чат проекта и превращает переписку в базу знаний: каждый день — короткий дайджест «что решили и о чём договорились», живые страницы тем, журналы решений и пожеланий. Один бот ведёт много чатов; в форум-супергруппе каждый топик — отдельный проект со своим дайджестом. Результат складывается в Obsidian-совместимый Markdown и в раздел «Чаты» личного кабинета.

aiogram · приватность off SQLite + FTS5 · сырой лог OpenAI · конспект → дайджест vault Obsidian + кабинет
▼ как это устроено
01

Простыми словами

TG Chat Assistant — это «секретарь» рабочего чата. Он молча читает переписку, раз в день собирает из неё короткий дайджест и раскладывает важное по полочкам: о чём была речь (темы), что решили (журнал решений), что пожелали сделать (журнал пожеланий). Ничего не надо размечать руками — бот делает это сам через OpenAI.

Продукт открывается как база знаний в Obsidian (папка с Markdown-файлами и перекрёстными [[ссылками]]) и дублируется в раздел «Чаты» личного кабинета. Найти старое обсуждение можно командой /find прямо в чате.

  • Один бот — много чатов. Несколько чатов можно свести в один проект (общий дайджест).
  • Форум-супергруппа: каждый топик ведёт свой проект и свой дайджест — один чат-хаб на всю команду.
  • Дёшево: ≈ $0.02–0.05 в день на активный чат; дневной потолок расходов — в конфиге.
02

Архитектура и поток данных

data-flow · чат → лог → LLM-конвейер → vault/кабинетдайджест раз в день
чаты / топики Telegram-группы форум-топик = проект сырой лог SQLite + FTS5 привязки (чат,топик) LLM-конвейер конспект пачки · gpt-5.4-mini дайджест дня · gpt-5.5 извлечение тем/решений/пожеланий потолок расходов · APScheduler vault (Obsidian) дайджесты · темы · журналы кабинет «Чаты» Postgres · схема tg_assistant ingest триггеры запись upsert
Бот пишет в лог каждое сообщение (идемпотентно, правки тоже), а тяжёлую работу делает по триггерам: накопилось N сообщений или прошло T минут → конспект пачки; раз в день → дайджест проекта. LLM только конспектирует данные — переписка идёт в промпт строго как данные, а не как команды.
03

Конвейер: от сообщений к знанию

шагчто делаеттриггермодель
Ingest приём и нормализация сообщений/правок/подписей; маршрутизация по топику; полнотекстовый индекс на каждое сообщение без LLM
Конспект пачки сжимает пачку сообщений топика в короткий конспект; идемпотентно (watermark) N сообщений ИЛИ T минут gpt-5.4-mini
Дайджест дня сливает конспекты проекта за день в дайджест «читается за 1–2 минуты» cron (МСК) + /digest gpt-5.5
Извлечение структурирует дайджест: темы с тезисами, решения, пожелания (structured output) после дайджеста gpt-5.5

Устойчивость к простою и сбоям. Сообщения никогда не теряются: рестарт догоняет пропущенные дни, падение между шагами самовосстанавливается, превышение дневного потолка расходов аккуратно ставит пайплайн на паузу. Качество дайджеста доводится не правками на проде, а эталонным e2e-тестом с разметкой (ни одно решение/пожелание не должно потеряться).

04

Один чат-хаб — проект в каждом топике

В форум-супергруппе удобно держать все проекты в одном чате: топик на проект. Бот это понимает — привязка идёт по паре (чат, топик), и каждый топик получает свой отдельный дайджест и свою базу знаний, не смешиваясь с соседними.

  • Привязка точная: команда /project <проект> внутри топика привязывает именно этот топик. Непривязанный топик не конспектируется — его сообщения не попадают в чужой проект.
  • Форум-топик ≠ ответ-тред: бот различает настоящие топики форума и обычные цепочки ответов, чтобы не плодить «фантомные» проекты.
  • Каждому топику — свой ритм: конспект и «отметка прочитанного» считаются на каждую привязку независимо.
05

Сообщения «от имени бота» из терминала

Часто удобнее написать в чат/топик из терминала (через инструмент tg_send), не переключаясь по вкладкам. Это реальная коммуникация — её писал человек, — и она должна попадать в дайджест наравне с обычными сообщениями.

Загвоздка: Telegram не отдаёт боту его собственные сообщения, поэтому напрямую из чата конспектор их не увидит. Решение — журнал исходящих:

  • tg_send при каждой отправке дописывает строку в ~/.wgp/tg_outbox.jsonl: текст/подпись, время, чат и топик, message_id и автор (по умолчанию — пользователь ОС, переопределяется --from "Имя", чтобы подписать любого участника).
  • Конспектор раз в несколько минут читает журнал и заносит записи в свой лог как обычные сообщения автора нужного (чат, топик) — дальше они идут в конспект и дайджест.

Надёжно и без дублей: позиция чтения журнала и ключ (чат, message_id) делают перечитывание идемпотентным; непривязанный топик и файл без подписи — пропускаются. Граница: учитываются отправки с машины конспектора (журнал локальный).

06

Кабинет и команды

Смотреть результат можно в кабинете (раздел «Чаты»: дайджесты, темы, журналы по каждому проекту) и прямо в чате командами:

  • /project <slug> — привязать чат/топик к проекту (только админ).
  • /status — сколько сообщений, последний дайджест, расход LLM за день.
  • /find <текст> — полнотекстовый поиск по переписке (в рамках своего топика).
  • /digest, /topics, /wishes, /decisions — собрать дайджест и открыть разделы базы знаний.

Выгрузка в кабинет идёт после каждого дайджеста и устойчива к сбою сети: данные не теряются, повторная выгрузка не плодит дублей. Длинный контент усекается под лимиты схемы кабинета прямо перед отправкой, поэтому крупный дайджест не «зависает» в очереди на повторных попытках. Привязками можно управлять из кабинета — он становится основным источником, а /project остаётся запасным.

07

Безопасность и приватность

  • Переписка = данные, не команды. Текст чата уходит в промпт строго как данные; защита от prompt-инъекций зафиксирована тестом.
  • Приватное не в git. Лог переписки, база знаний и секреты — вне репозитория (он публичный); токены не попадают в логи.
  • При привязке бот предупреждает участников чата, что переписка обрабатывается через OpenAI API для построения дайджестов.
  • Доступ к кабинету — под узкой ролью БД (только своя схема), без общих ключей.
08

Легенда

Узлы схемы

сырой лог (SQLite + FTS5)
LLM-конвейер (по триггерам)
vault (Obsidian)
кабинет «Чаты»

Потоки

живой поток данных
связь / зависимость

Модели

конспект — лёгкая модель
дайджест/извлечение — сильная
TG Chat Assistant · Telegram-конспектор проектных чатов · Источник правды: README.md репозитория gram2Claude/tg_chat_assistant · Бот: @wexus_assistant_bot · Кабинет: раздел «Чаты»
← Все кейсы