Клиент продаёт через Telegram-канал — канал и есть его витрина, и живёт он только за счёт постоянного потока постов: и подборок по теме (то, что уже выходит в смежных каналах), и собственных экспертных постов про товар. Вести это вручную невозможно: один человек не может весь день мониторить чужие каналы, переписывать посты и сочинять новые. Отдельная сложность в том, что у самого Telegram нет инструментов под регулярный контент — ни очереди постов, ни расписания публикаций, ни админки с модерацией, ни генерации. Всё, что в обычной CMS идёт из коробки, для канала приходится строить отдельно.
Цель — превратить ручное ведение канала в управляемую систему: чтобы поток постов собирался и готовился сам, а владельцу оставалось только одобрять и править готовое.
Собрал контент-систему управления каналом — два рабочих контура публикации, общий слой настроек и контур дистрибуции. Весь стек на мне: сбор, AI, админка, расписание, инфраструктура.
Контур 1 — входящий поток (сбор и рерайт, автономно). Userbot на Telethon подписан на тематические каналы-источники и слушает новые сообщения. Альбомы (несколько фото с одним grouped_id) буферизируются 3 секунды и собираются в единый пост; отдельно обработана сборка медиа из разных дата-центров Telegram (обход известных багов Telethon) и orphan-медиа без подписи, которое ждёт текст до 20 секунд. Сообщения складываются в очередь в PostgreSQL (async SQLAlchemy 2.0 + asyncpg, миграции Alembic), переписываются через AI с мульти-провайдером (OpenRouter / DeepSeek / Gemini) — ротация ключей и fallback между провайдерами — и публикуются в целевой канал с заданным интервалом. Цикл крутят четыре фоновые задачи с разными интервалами (рерайт, сборка постов, закрытие orphan-медиа, публикация) с корректным завершением по SIGINT/SIGTERM. Файлы на диск не качаются — хранятся только file reference от Telegram.
Контур 2 — исходящий поток (генерация оригинальных постов, модерация, расписание). Бот на aiogram 3. На входе — название товара; LangGraph-пайплайн делает веб-поиск через Tavily и генерирует экспертный пост через LLM с защитой от галлюцинаций (факты из поиска, а не из головы модели). Провайдеры с ротацией и автофолбэком (ProviderRouter: OpenAI-совместимые + Gemini). Готовый черновик уходит в TG-админку: создание поста, очередь с пагинацией, модерация inline-кнопками (принять, отклонить, отредактировать, перегенерировать, удалить, теги), медиа и альбомы. Посты ставятся в очередь и публикуются по расписанию — APScheduler с cron, который настраивается прямо через бота, без рестарта. Через бота же меняются системный промпт, расписание и конфиг LLM-провайдеров. Доступ — по белому списку: аккаунты-админы и редакторы заносятся в whitelist чатов в БД, кого не добавили — бот игнорирует; в личке полная админка, в рабочей группе несколько редакторов модерируют совместно.
Общий слой. Оба контура пишут в один целевой Telegram-канал и настраиваются через бота — так из «канала, который ведут вручную» получается канал с очередью, расписанием и модерацией.
Контур 3 — дистрибуция в VK. Отдельный бот слушает целевой канал и репостит контент в VK-группу с AI-рерайтом под площадку, управление бот-командами (/start, /pause, /stats). Расширяет охват того же контента на вторую площадку без двойной ручной работы.
Надёжность под автономную работу заложена в обоих контурах: мульти-провайдер с fallback (упал один — подхватывает следующий), фоновые задачи с graceful shutdown, 103 теста и контейнеризация (Docker + docker-compose).
Канал ведётся как система, а не вручную: входящий контур сам собирает и рерайтит посты из источников, исходящий — генерирует оригинальные посты с веб-поиском, модерацией и публикацией по расписанию, владельцу остаётся одобрять и править в один-два клика. В Telegram добавлены очередь, расписание и админка с модерацией, которых там нет из коробки. Мульти-провайдер с fallback, 103 теста, контейнеризация — это production, а не скрипт «на коленке». Третий контур разносит тот же контент в VK без отдельной работы.
Оценочно, по отраслевым нормам 2026 (Sprout Social, Hootsuite, Buffer): ручное ведение контент-канала — это 18–35 минут на пост, 4–7 постов в день силами одного человека и около 8 часов в неделю, причём стабильный ритм 90 дней удерживает лишь ~61%; с автоматизацией ориентиры сдвигаются к 6–12 минутам на пост, 10–18 постам в день и ~2 часам в неделю при удержании ритма ~83%.