Контент-бот для napitki133.ru: 6 каналов на автопилоте
Бот-ротатор берёт материалы из библиотеки сайта, переписывает через ИИ и публикует в 3 Telegram + 3 MAX канала по расписанию — без редактора.
- 0 → 14Постов в неделю
- 3–4 ч/нед → 0Время на контент
- 6 Каналов публикации (TG + MAX)
Проблема
Сайт napitki133.ru — библиотека из сотен рецептов, лайфхаков и путеводителей. Весь этот контент лежал мёртвым грузом: нет дистрибуции, нет охвата за пределами поисковиков.
Задача
Сайт napitki133.ru — это большая библиотека: рецепты напитков, лайфхаки, путеводители, подкасты, радио, магазин. Сотни материалов по нишам. Но весь контент существовал только на сайте — в Telegram и MAX не было ничего, аудитория не получала напоминаний, публикация шла вручную или не шла вовсе.
Задача: построить автоматическую контентную систему, которая сама выбирает материалы, переписывает их через ИИ, распределяет по 3 тематическим каналам и публикует по расписанию — без участия редактора.
Это не RSS-бот и не новостник. Бот — это умный ротатор: работает с библиотекой как с вечнозелёным контентом, берёт как новые, так и старые материалы, не зацикливается, не повторяется слишком часто.
Архитектура системы
napitki133.ru (WordPress/WooCommerce)
→ Индексатор (WordPress REST API)
→ Каталог материалов (SQLite)
→ Планировщик (APScheduler)
→ Логика выборки (по кругу / вразнобой)
→ ИИ-генерация текста (OpenRouter)
→ Telegram (aiogram 3)
→ MAX (maxapi)
→ Лог публикаций (SQLite + Google Sheets)
Бот периодически обходит разделы сайта по WordPress REST API (/wp-json/wp/v2/posts?categories=XX) и сохраняет полный каталог материалов. Новые публикации на сайте автоматически попадают в ротацию при следующей индексации. Маппинг категорий — из Google Таблицы, заказчик меняет без правки кода.
Маппинг контента по каналам
Каждый раздел сайта жёстко привязан к своему каналу:
| Раздел сайта | Канал |
|---|---|
| Лайфхаки (50+ подкатегорий: лайфхаки абсента, вина, кофе, настойки…) | ЛАЙФХАКИ |
| Библиотека путеводителей (Таиланд и др.) | Путешествия |
| Напитки всех категорий: виски, коктейли, чай, кофе, смузи, пиво и т.д. | НАПИТКИ |
| Магазин — классические путеводители | Путешествия |
| Магазин — рецепты напитков | НАПИТКИ |
| Магазин — рецепты блюд | ЛАЙФХАКИ |
| Интернет-радио | ротация по всем трём |
| Аудио подкасты, аудио статьи, reels | ротация по кругу |
Итого: 6 точек публикации — каждый из 3 каналов работает одновременно в Telegram и MAX.
6 режимов работы
Бот умеет переключаться между режимами по расписанию:
А. Основной контент — 2 поста в день в каждый канал: утром и вечером. Материал — из каталога сайта по маппингу. ИИ переписывает под формат канала.
Б. Реклама магазина — раз в неделю в каждый канал уходит нативная подводка к товару/книге из WooCommerce. Мягкий формат: что это, кому пригодится, зачем.
В. Перекрёстная реклама — раз в неделю один канал нативно анонсирует другой. Без «подпишитесь», только интерес.
Г. Реклама сайта — раз в неделю во всех каналах с разным углом подачи: не копипаст одного текста.
Д. Реклама радио — раз в неделю, ротация каналов. Каждый раз новое настроение: вечер, дорога, дождь, кофе.
Е. Ротация аудио/видео — подкасты, аудио статьи и reels по кругу: 1→Путешествия, 2→Лайфхаки, 3→Напитки, потом снова. Раз в неделю, 1 канал.
Умная выборка и антидубли
Дата публикации на сайте — не главный критерий. Бот работает с контентом как с вечнозелёной библиотекой.
Комбинированный режим выборки: из каталога раздела исключаются недавно использованные материалы, из оставшегося пула выбирается следующий — по кругу, псевдослучайно или по заданному проценту смешивания. Режим настраивается в Google Таблице для каждого раздела отдельно.
Ограничения повторов хранятся в базе и настраиваются:
| Параметр | По умолчанию |
|---|---|
| Не повторять материал раньше чем через N дней | 14 дней |
| Не повторять товар магазина раньше чем через N дней | 21 день |
| Не брать 2 материала из одной подкатегории подряд | включено |
Бот хранит полную историю публикаций: что постили, куда, когда, какой текст был сгенерирован. Если всё в пуле «недавно» крутилось — пропускает слот и логирует причину.
Управление через Google Таблицу
Заказчик управляет всем без правки кода:
| Лист | Содержимое |
|---|---|
| Маппинг | Категория WordPress → канал; редактируется в любой момент |
| Расписание | Часы публикаций для каждого из 3 каналов |
| Частоты | Как часто магазин, сайт, радио, кросс-промо |
| Промпты | Системные промпты ИИ для каждого канала и типа контента |
| Каналы | ID каналов в Telegram и MAX |
| Настройки | Режим выборки, лимит повторов, интервалы, модель ИИ |
| История | Лог публикаций (заполняется ботом автоматически) |
Под капотом
Python 3.11+ — основной язык. aiogram 3 — публикация в Telegram. maxapi — публикация в MAX. APScheduler (AsyncIOScheduler) — всё расписание: основной контент, еженедельные режимы, индексация сайта. SQLite + aiosqlite — каталог материалов, история публикаций, счётчики ротации. gspread — чтение настроек из Google Таблицы. httpx — запросы к WordPress REST API и WooCommerce. OpenRouter — генерация текста; если API недоступен, fallback: публикуется заголовок + первые два предложения + ссылка. pydantic-settings — конфигурация из .env. Деплой на VPS через systemd с автозапуском.
Результат
| Показатель | До | После |
|---|---|---|
| Публикации в мессенджерах | 0 или вручную | 2 поста/день × 3 канала |
| Охват контента | Только поисковики | +6 точек публикации |
| Участие редактора | Требуется на каждый пост | 0 после настройки |
| Повторы контента | Не контролировались | Управляемые интервалы |
| Управление | Правка кода | Google Таблица |
| Форматы | Только основной контент | 6 режимов: контент, магазин, радио, кросс-промо |
Вся библиотека сайта перестаёт быть мёртвым архивом и начинает работать на аудиторию — системно, без ручного участия, по правилам заказчика.
Автономная контентная машина: 6 каналов, 2 поста в день, умная ротация без повторов, управление без кода.