Канал-агрегатор отличается от авторского блога одним: скорость и охват темы важнее голоса автора. Подписчик приходит за тем, чтобы за 30 секунд понять, что сегодня важного произошло в его нише. Если в первые две недели вы пропустите три громкие истории или, наоборот, опубликуете один и тот же сюжет четыре раза из разных источников, отписки полетят быстрее, чем привлечение.
Это практический протокол сборки такого канала в MAX-мессенджере на платформе Content Pilot: что подключить, как отфильтровать дубли, на каком расписании держать поток и в какой момент перестать копировать чужие посты и начать переписывать их через LLM.
Зачем именно пять источников
Самый частый вопрос на старте: «У меня уже есть один сильный TG-канал по теме, зачем ещё четыре?» По той же причине, по которой ни одна редакция не строит ленту на одном корреспонденте. У монопотока три проблемы.
Пробелы в повестке. Любой источник выбирает события по своей редполитике: один хорошо берёт макроновости, но игнорирует регионалку; другой пишет регионалку, но отстаёт по федералке на 2–3 часа. С одним каналом будут систематические пропуски.
Синхронные простои. Источник попадает под флуд-вейт Telegram, ломается VK-токен, RSS возвращает 502 — и канал молчит. С пятью одновременная поломка маловероятна. Платформа хранит для каждого источника error_type (CHANNEL_PRIVATE, RATE_LIMITED, FEED_NOT_FOUND, HTTP_ERROR), и в админке видно, какой именно источник лежит.
Слабая дедупликация при одном источнике. С пятью пересекающимися каналами система видит, что сюжет упомянут одновременно в трёх местах — это сигнал важности. Один источник такого сигнала не даёт.
Верхняя граница — практическая. Платформа потянет и пятнадцать, но растёт нагрузка на парсинг (каждый источник опрашивается scheduler-job monitoring.py каждые 5 минут) и появляется риск получить «среднее арифметическое всех источников» — поток без характера.
Подбор пятёрки: три критерия отбора
Соблазн собрать пятёрку «по охвату» — пять самых крупных каналов в нише — на практике плохая стратегия: крупные публикуют похожее похожим тоном, и лента превратится в эхо. Полезнее отбирать по трём критериям.
Актуальность
Источник должен публиковать несколько раз в день с предсказуемым ритмом. Платформа смотрит только на посты не старше MAX_POST_AGE_DAYS = 7; всё, что старше, в кандидаты не попадёт. Мёртвый канал с последним постом месяц назад не даст ничего. Перед подключением посмотрите даты последних 10 постов — если между ними проходит больше суток, кандидат слабый.
Охват темы
Пятёрка должна покрывать тему с разных углов. Для региональной новостной ленты разумная конструкция:
- один большой федеральный TG-канал (повестка отрасли в целом);
- один-два региональных TG или VK (локальная повестка);
- один отраслевой RSS (экспертные публикации, аналитика);
- один нишевый источник (узкий сегмент темы);
- один с авторской подачей (для тона и реакций).
Пересечение в 30–40% — нормально и даже желательно: оно даёт сигнал важности при дедупликации. А вот 100% пересечение — пять каналов, перепечатывающих одно и то же из ТАСС — это потеря разнообразия.
Качество исходника
Здесь чаще всего попадают впросак. Подключают популярный сайт по RSS — а в фид приходят анонсы по 50–100 символов: «Жители города возмущены. Подробности по ссылке». LLM не может качественно переписать 80 символов, а в copy-mode такой анонс выглядит обрезанной строкой. Это известное ограничение: крупные региональные ресурсы вроде 74.ru, ura.news, 1obl кладут в фид только заголовки и тизеры.
Платформа умеет авто-обнаружение фидов — кидаете vc.ru, она ищет <link rel="alternate" type="application/rss+xml">, fallback на /rss, /feed, /atom.xml. Но качество найденного фида — на стороне сайта. Практическая проверка: после первого парсинга посмотрите медианную длину постов в карточке источника. Меньше 200 символов — замените источник.
Чекпоинт
«У меня выбрано шесть источников, два из них — крупные федеральные TG. Пересечение по сюжетам около 60%. Это нормально или избыточно?»
60% — слишком много. Сократите до пяти, оставив один федеральный (тот, что публикует быстрее), и добавьте на освободившееся место RSS отраслевого издания или нишевый канал. Цель — чтобы внутри пятёрки источники друг друга дополняли, а не дублировали.
Подключение: три типа источников
Telegram — парсер на Telethon (MTProto). Для публичных каналов достаточно username. Для приватных нужно подключить свою TG-сессию: /start → ⚙️ Настройки аккаунта → 📱 Telegram-сессия. Сессия шифруется (Fernet). Половина интересного контента в нишах — в закрытых каналах, поэтому без сессии вы себя сильно ограничиваете.
VK — сообщества через VK API (community wall). Указываете ID или короткое имя. Регулярно проверяйте, что сообщество не сменило приватность.
RSS / Atom — auto-discovery: кидаете URL сайта, парсер ищет фид сам. Если автодискавери нет — попробуйте классические пути вручную. Реальный размер постов в фиде увидите только после первого парсинга.
Фильтры и пересечения: RAG-дедупликация
Это та часть, ради которой агрегатор вообще можно делать на платформе, а не на скрипте «парсим и публикуем». При пяти источниках дубли неизбежны: один и тот же информповод выходит в трёх местах с разрывом 15 минут. Без дедупа канал быстро превратится в свалку.
Как устроена защита
Платформа держит три коллекции в Qdrant: статьи, source-посты и эмбеддинги. Перед генерацией каждого нового поста система берёт эмбеддинг кандидата, ищет похожих в коллекциях за последние 7 дней и сравнивает по cosine similarity с порогом 0.75. Это важно — порог именно на 0.75, не выше; иначе через сетку проскальзывают близкие пересказы одной и той же новости. Если похожее найдено — кандидат отбрасывается, берётся следующий из топ-N. Если все 5 кандидатов отбракованы — генерация падает с ошибкой «источник слишком бедный для качественной статьи».
Pushdown-фильтр
До апреля 2026 фильтр работал по схеме «забрать из Qdrant топ-100, потом отсечь старые в SQL» — и часто после пересечения оставался ноль постов, хотя в коллекции лежали тысячи. С апреля 2026 фильтр протолкнут внутрь Qdrant: при поиске передаётся Filter(must=[range(published_at_ts)], must_not=[is_processed=True]), и Qdrant сам отдаёт только свежие необработанные. Чем дольше живёт ваш проект, тем больше истории в коллекции — но это больше не проблема.
LLM-судья на границе
На границе порога (например, similarity 0.78 — формально дубль, по сути развитие сюжета: «вчера было обвинение, сегодня — реакция») система зовёт LLM-судью на Claude Haiku 4.5 с тремя вердиктами: DUPLICATE, DEVELOPMENT, DIFFERENT. Пороги: AUTO_PASS=0.55 (всё ниже — не дубль), AUTO_SKIP=0.99 (всё выше — точно дубль). Между ними решает Haiku. Вердикты кешируются в Valkey на час.
На практике это даёт агрегатору гибкость: сюжетные продолжения публикуются, простые перепечатки отсекаются. Без судьи пришлось бы выбирать между «слишком жёсткий порог — теряем продолжения» и «слишком мягкий — публикуем дубли».
Чекпоинт
«В подключённых источниках три канала из одного информагентства — они дублируют друг друга на 90%. Дедуп их разведёт?»
Разведёт, но это лишняя нагрузка: каждый дубль проходит парсинг, эмбеддинг, проверку, и только потом отбрасывается. Дешевле и чище — оставить один канал из этой группы и заменить два освободившихся слота на источники из других сегментов.
Расписание и публикация
Когда пятёрка собрана и фильтры настроены, остаётся выстроить ритм.
Цель публикации. В проекте есть три варианта publication_target: BOT (preview-режим, статья падает в личный чат бота), CHANNELS (публикуется в подключённые каналы) и EMAIL. По умолчанию свежий проект имеет BOT, но как только вы подключаете первый канал, цель автоматически переключается на CHANNELS. Это апрельский фикс: больше не нужно вручную переключать тумблер.
Контент-тип и стиль. Из шести типов (NEWS / ANALYTICS / LIFEHACKS / REVIEWS / CASES / FORECASTS) для агрегатора почти всегда правильный выбор — NEWS. Стиль — NEWS или EXPERT, в зависимости от тона ниши. Длина — SHORT (до 500 слов): у новостного формата нет ресурса на лонгриды.
Частота. Для агрегатора нормальный диапазон — 4–12 постов в сутки. Меньше — канал выглядит мёртвым, больше — у читателя устают глаза. Расписание задаётся в проекте; scheduler-job publish_articles.py публикует APPROVED-статьи каждые N минут согласно интервалу.
Подпись. На канал можно прикрепить кастомную подпись — она клеится в конец каждого поста. Для агрегатора имеет смысл указать в подписи рубрикатор или ссылку на источник обратной связи.
Проверка качества
Через 5–7 дней работы вернитесь к проекту и проведите аудит.
Длина опубликованного. Если в ленте проскакивают посты по 100–150 символов — какой-то источник кладёт в фид анонсы. Найдите его в карточке проекта и замените или поменяйте режим (см. ниже).
Однообразие повестки. Если 7 из 10 постов за день — про одно и то же, дедуп не отрабатывает на пограничных кейсах. Возможно, два источника публикуют почти-одинаковый текст с similarity около 0.74 — на грани порога. Просто исключите один.
Ошибки парсинга. В админке видно error_type по каждому источнику. CHANNEL_PRIVATE — нужно подключить TG-сессию. RATE_LIMITED — рассмотрите прокси (раздел /admin/proxies). FEED_NOT_FOUND — RSS изменил адрес.
Дубли, которые прошли. Случается. Не ругайтесь на платформу сразу: проверьте, не публикует ли один источник в полночь, а второй в 3 утра ту же новость, разнесённую на 3 часа. Ради таких случаев и существует LLM-судья — но он не идеален. Если видите систематический промах, откатите пост в moderation_status=REJECTED и посмотрите в карточке статьи, какой источник её породил.
Когда переключать с rewrite=False на rewrite=True
В режиме FROM_SOURCES у платформы два под-режима — самая практически важная развилка для владельца агрегатора, и большинство ошибок здесь от того, что её не понимают.
Copy-mode (rewrite=False)
Платформа берёт пост из источника, прогоняет через signature-cleaner (regex + postfilter — выкидывает «Подписывайтесь на наш канал», «Source: …» и прочий мусор), форматирует под канал и публикует. LLM не трогается. Цена — фактически только публикация (около 5 ₽ за пост плюс минимальная обработка). Самый дешёвый и быстрый режим.
Когда подходит: на старте, при валидации концепции; когда источники — крупные качественные TG-каналы, чьи посты сами по себе хорошо читаются; когда нужна максимальная скорость публикации.
Минусы: у вас не свой стиль — текст звучит как пишет источник. На разнородных источниках лента выходит лоскутным одеялом: один пост — официальный пресс-релиз, другой — троллинг. Если канал должен звучать единым голосом, copy-mode не подойдёт.
Rewrite (rewrite=True)
Топ-N постов из источников за 7 дней (отсортированных по охватам), система выбирает лучший, делает рерайт через LLM по вашему профилю стиля. Цена обычно 10–50 ₽ за пост в зависимости от модели и длины (calculator считает по таблицам тарифов OpenRouter). Это рабочий режим зрелого агрегатора.
Когда подходит: канал должен звучать единым голосом; источники разнородные (TG + VK + RSS); вы хотите подмешать StyleExtractor-профиль (3–5 эталонных постов из вашего канала, система через стат-анализ + LLM выявит маркеры — эмодзи, любимые ▪️/→, среднюю длину); нужны не сырые новости, а отжатые сводки с авторской подачей.
Практическая последовательность
Реалистичная траектория для нового канала:
- Неделя 1–2 (валидация).
FROM_SOURCES rewrite=False+ 5 источников. Цель — посмотреть объём контента, нет ли проблем с источниками, сходится ли повестка с ожиданиями. Бюджет минимальный. - Неделя 3–4 (доработка). Заменяем слабые источники (короткие RSS-анонсы, дубликаторы из одного агентства). Подключаем TG-сессию, если не подключили. Подкручиваем расписание.
- Неделя 5+ (переключение). Когда поток стабилен и аудитория растёт, имеет смысл вложиться в свой голос. Готовим
style_examples, кидаем в проект,StyleExtractorделаетauto_profile. Переключаем на rewrite=True. Расходы вырастут до 10–50 ₽/пост, но канал будет звучать как ваш, а не как сборная Frankenstein-лента.
Можно идти и обратно: если бюджет упал или источники сами стали сильнее, имеет смысл откатить часть постов в copy-mode. И ещё одно: никто не запрещает держать два проекта на одном канале назначения с разными стратегиями — один на rewrite=False для срочных новостей, второй на rewrite=True для авторских сводок раз в день.
Экономика и резюме
Базовая ставка: 1 рубль = 1 токен, минимальное пополнение 200 ₽, пакет 25 000 ₽ даёт +15% (28 750 токенов). Для агрегатора с 8 постами в сутки в copy-mode суточный расход около 40 ₽ (5 ₽ × 8). В rewrite при средней цене 25 ₽/пост — около 200 ₽. Месяц — 1 200 ₽ против 6 000 ₽. Цифры варьируются: GPT-4 дороже Claude Haiku, картинки добавляют сверху.
Сборка в семи шагах:
- Создаём проект: ContentType=NEWS, Style=NEWS, Length=SHORT.
- Подключаем 5 источников по правилу «федеральный + 1–2 региональных + отраслевой RSS + нишевый + авторский». Для приватных TG — заранее подключаем сессию.
- Подключаем MAX-канал назначения.
publication_targetпереключится на CHANNELS автоматически. - Стартуем в
FROM_SOURCES rewrite=Falseна 1–2 недели, расписание 6–8 постов в сутки. - Через неделю — аудит: длина постов, повестка, ошибки источников. Заменяем слабые.
- Когда лента стабилизировалась — собираем 3–5 эталонных постов в style_examples и переключаемся на rewrite=True.
- Дальше — мониторинг повестки, дозамена источников по сигналам, эксперименты с подписью.
Канал-агрегатор — не «настроил и забыл». Источники меняют поведение, ниша эволюционирует, фильтры со временем требуют подкрутки. Но базовая инфраструктура — пять источников, RAG-дедупликация с pushdown-фильтром, два режима генерации, авто-переключение цели публикации — даёт вам платформу, на которой такой канал в MAX строится за выходные, а не за квартал.