Files

5.7 KiB
Raw Permalink Blame History

Why

У пользователя есть собственные ресурсы (канал Telegram «Дед в АйТи» @dedinit, сайт dedinit.ru, далее — феды/видео), но они живут разрозненно: контент, опубликованный в одном месте, не попадает в другие. Цель — собственный контент-хаб: единая точка сбора ВСЕХ постов пользователя из разных платформ, один банк своего контента, и автораспространение этого контента по тематическим новостным ботам VESTI (и в перспективе — по другим платформам), чтобы органически росла аудитория на всех площадках.

Задача НЕ «сделать копию канала»: канал @dedinit — полноценный источник данных в общей логике проекта (как любой TG-канал): краулер → классификатор → кандидат → подтверждение → публикация в тематические каналы → банк статей. Отличие от внешних источников — это СВОЙ контент (is_own=1): он всегда кандидат на публикацию («инъекция» в ленту), не блокируется политикой чужих форвардов и помечается атрибуцией автора.

What Changes

  • Добавить канал @dedinit (id 1150165846) в sources.yaml как источник own: true (свой контент пользователя), направление определяется классификатором (канал разносторонний: Linux, IT, AI, игры...).
  • Краулер: посты своего канала помечаются is_own=1, для них продолжает работать дедуп (sha256/url); политика форвардов для своего канала — как обычно (чужие форварды → fwd-поля без медиа).
  • Классификатор: свой контент с relevance critical/high → «сильные кандидаты» (самокатегоризация; приоритет в ленте подтверждения).
  • Автораспространение (distribution): подтверждённый пост рассылается НЕ только в один канал @dedinit_vesti___bot, а во ВСЕ тематические боты/каналы, соответствующие направлениям поста (один пост может попасть в несколько лент). Режим — по-прежнему «черновик на подтверждение», но подтверждение ведёт к множественной публикации (fan-out).
  • Веб: фильтр «Свои» (только is_own посты), отображение бейджа «СВОЙ», выбор направлений для рассылки при подтверждении.
  • Расширить таблицы: posts.is_own, posts.is_own_canonical (первичный экземпляр), sources.own, published.distributed_dirs (какие направления розданы).

Capabilities

New Capabilities

  • own-content: Свой контент-хаб: пометка постов пользователя (is_own), приоритет в кандидатах, сквозная ссылка на оригинал во всех публикациях.

Modified Capabilities

  • tg-crawler: пометка is_own по источникам с own: true; политика форвардов для своих каналов не отличается от внешних (dedup + fwd-поля).
  • classifier: свой контент → «сильный кандидат» (relevance critical/high при словарном попадании; classified=True даже без LLM-подтверждения, если есть направление).
  • tg-publisher: fan-out по нескольким направлениям; атрибуция «Дед в АйТи» + ссылка на оригинал.
  • vesti-web: фильтр «Свои», бейдж, выбор направлений рассылки при подтверждении.
  • news-store: бандл своего поста помечается origin=own + ссылка на оригинал в frontmatter.

Impact

  • Затронутые сервисы/порты: без новых портов; краулер (cron), классификатор, tg-publisher, веб 127.0.0.1:8400 — те же.
  • Файлы: sources/sources.yaml (новый источник), crawler/telegram_crawler.py, classifier/classify.py, publisher/bot.py, publisher/card.py, web/app.py, db/schema.sql (миграции ADD COLUMN is_own и др.).
  • Данные: 1039 постов канала @dedinit появятся как is_own посты; медиа своего канала скачивается (это контент пользователя — можно).
  • Секреты: не требуются новые (та же Telethon-сессия, токены ботов в .env).
  • Rollback: отключение источника own: false / удаление поля is_own; существующие внешние посты не затрагиваются; данные не удаляются (правило пользователя).