Карусели в инсту на автопилоте. Агент в Claude делает всё сам – от темы до публикации
Пошаговая инструкция: как настроить агента, который каждое утро присылает 3 идеи карусели в Telegram, после вашего выбора сам пишет тексты слайдов, после согласования рисует карточки и публикует готовый пост в Instagram. Со скриптами, ключами Meta API и шаблонами дизайна.
Карусели в инсте сейчас самый сильный формат. Engagement rate 1.92% против 0.5% у рилсов и 0.45% у обычных фото. С трендовой музыкой пост попадает в Reels-ленту – охват умножается ещё на 1.5–2 раза. Алгоритм даёт каруселям второй заход: если человек не свайпнул, пост покажется ему ещё раз с другого слайда.
Но делать одну карусель в день вручную – это 1–1.5 часа: подобрать тему, написать тексты слайдов, оформить дизайн, согласовать, опубликовать. У эксперта такого времени нет. Поэтому я собрал агента в Claude, который каждое утро присылает мне 3 идеи в Telegram, после моего ответа сам пишет тексты слайдов, после моего «ок» – рисует карточки через HTML+CSS+Playwright и публикует пост в Instagram через Meta Graph API. С подписью, хэштегами и трендовой музыкой.
* Всё, что описано в гайде, использует официальные API: Anthropic для Claude, Telegram Bot API через MCP plugin, Meta Graph API для публикации в Instagram. Никаких ботов-сёрфингов, эмуляторов мыши или серых схем – автоматизация работает в рамках условий использования каждого сервиса.
Что внутри
- Почему карусели сильнее всего и почему их надо автоматизировать
- Архитектура агента: что из чего собирается
- Установка Claude Code на VPS
- Telegram-бот для согласования через MCP plugin
- Подключение Instagram через Meta Graph API
- Промпт для утренней генерации идей
- Промпт для текстов слайдов
- Дизайн карточек через HTML+CSS+Playwright
- Автоматическая публикация в Instagram
- Расширение на ВК, Threads, MAX, Pinterest
- Cron, мониторинг и что делать если упало
- Апгрейды: трендовая музыка, A/B-тесты, аналитика
Раздел 01Почему карусели – самый сильный формат сейчас
Если коротко – потому что Instagram сейчас даёт каруселям сразу два привилегированных канала охвата. Любой пост-карусель попадает в основную ленту подписчиков и в их Explore. А с прошлогоднего обновления алгоритма – ещё и в Reels-ленту, если к карусели прикрепить трендовое аудио. Это значит охват формата рилса плюс глубина формата карусели.
Цифры за 2026 год говорят примерно следующее. Engagement rate карусели в среднем 1.92%. Single image – 0.45%. Reels – 0.5%. Save rate у карусели в 2–3 раза выше любого другого формата. А save для алгоритма – самый сильный сигнал ценности контента. Сильнее лайка, сильнее даже комментария.
Почему алгоритм любит карусели
- Время в посте – человек свайпает, читает, смотрит. На карусель уходит 30–60 секунд против 3 секунд на одно фото. Алгоритм фиксирует «watch time» и поднимает охват
- Второй заход – если человек не свайпнул при первом показе, Instagram даёт каруселе ещё один шанс. Показывает её повторно с другого слайда. Один пост = два охвата с разным углом
- Save-rate – чеклисты, фреймворки, разборы сохраняют как закладки. Save сильнее лайка, поэтому каждое сохранение поднимает пост в выдаче
- DM-шеры – карусель удобно переслать другу со словами «зацени». Пересылка в личку – самый сильный сигнал для алгоритма после save
Карусель с трендовой музыкой даёт +27% к охвату относительно карусели без музыки. Я тестировал это на своём блоге – проверка на 60 постах за 2 месяца показала разницу даже больше, около +35% по reach.
Почему вручную не выйдет делать одну в день
Считаем минимум по времени, который занимает карусель сделанная аккуратно:
- Подбор темы и проверка что её ещё не делали – 10 минут
- Структура: хук обложки, 5–7 слайдов, CTA, подпись – 25 минут
- Дизайн карточек в Figma или Canva – 30–40 минут
- Согласование с собой (перечитать, поправить) – 10 минут
- Публикация: загрузка, выбор музыки, хэштеги – 10 минут
Итого 1.5 часа в день, 45 часов в месяц. У эксперта столько свободного времени нет. Поэтому либо ты не делаешь карусели и теряешь самый сильный формат, либо нанимаешь дизайнера и копирайтера за 50–80К/мес и пытаешься их синхронизировать. Либо собираешь агента – об этом дальше. Поверх карусели стоит собрать и общий контент-конвейер из 10 промтов для эксперта, где одно голосовое утром превращается в неделю публикаций на пяти платформах.

Раздел 02Архитектура агента: что из чего собирается
Прежде чем нырять в шаги – общая картина. Агент-каруселист – это шесть компонентов, которые работают вместе на одном VPS-сервере.
| Компонент | Роль | Стоимость |
|---|---|---|
| Claude Code на VPS | Мозг агента: думает, пишет, рисует, публикует | $20/мес (Pro) |
| VPS-сервер (Linux) | Чтобы агент работал 24/7 – на ноутбуке нельзя, спит когда вы спите | €4–6/мес |
| Telegram-бот | Интерфейс согласования: идеи, тексты, утверждение | Бесплатно |
| Meta Graph API | Официальный канал публикации в Instagram | Бесплатно |
| Playwright + HTML | Рендер дизайна карточек: PNG из шаблонов | Бесплатно |
| Cron + systemd | Запускает агента в нужное время каждое утро | Бесплатно |
Итого ~$25/мес на сам стек. Один пост, который собирает 3 заявки в TG-канал – окупит подписку на квартал вперёд.
Полный цикл за один день
Утренний кронтаб запускает агента
Claude собирает свежие инфоповоды (новости AI, трендовые темы), сверяется с историей предыдущих идей, генерирует 3 варианта рилса и 3 варианта карусели. Отправляет в Telegram-чат.
Эксперт выбирает идею
Вы видите сообщение, читаете идеи за минуту, отвечаете «Р1 К2» (рилс №1, карусель №2). Это всё – больше ничего делать не надо.
Агент пишет тексты слайдов
Получив выбор, агент берёт идею, пишет 5–7 слайдов: хук обложки, контент-слайды, CTA. Плюс подпись под пост и хэштеги. Отправляет на согласование в чат.
Эксперт согласовывает или просит поправить
Читаете текст, говорите «ок» или «поменяй слайд 3 на X». Агент либо принимает, либо переписывает.
Агент рисует карточки
Заполняет HTML-шаблон, рендерит через Playwright в PNG 1080×1350, складывает в папку готовых карточек.
Агент публикует пост в Instagram
Через Meta Graph API: загружает фотографии, создаёт carousel-контейнер, публикует с подписью и хэштегами. Отправляет вам ссылку на пост.
Всё, на этом ваш день начался. Контент в инсте опубликован, вы потратили 5 минут на согласование вместо 1.5 часа на ручную работу.

Раздел 03Установка Claude Code на VPS
Если у вас уже есть рабочий VPS с Claude Code – пропускайте раздел и переходите к четвёртому. Если нет – здесь полный путь от пустоты до работающего агента на сервере.
Купите VPS
Минимальная конфигурация: 2 GB RAM, 1 vCPU, 20 GB SSD, Ubuntu 24.04. Этого хватает с запасом. Где брать: Hetzner Cloud (Германия, €4.5/мес), Selectel (Россия, ~400 руб/мес), Timeweb. Для Hetzner и большинства западных нужна карта с зарубежной банковской системой – через EasyPayments или иностранную карту друзей.
На Selectel – оплата российской картой, всё проще, но на бэкенде придётся настраивать VPN-выход для запросов в Anthropic из России.
Создайте пользователя marketer
Не работайте от root. После первого SSH-входа создайте отдельного пользователя:
adduser marketer
usermod -aG sudo marketer
mkdir -p /home/marketer/.ssh
cp ~/.ssh/authorized_keys /home/marketer/.ssh/
chown -R marketer:marketer /home/marketer/.ssh
chmod 700 /home/marketer/.ssh
chmod 600 /home/marketer/.ssh/authorized_keys
Дальше работаем через ssh marketer@your-server-ip.
Поставьте Node.js, Python и зависимости
sudo apt update && sudo apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs python3 python3-pip python3-venv git tmux
sudo npm install -g bun
Bun используется как быстрая замена npm для Claude Code. Не обязательно, но ощутимо ускоряет.
Установите Claude Code
npm install -g @anthropic-ai/claude-code
После установки запустите claude – вас попросят авторизоваться. Если открывается браузер – зайдите в Anthropic-аккаунт. Если у вас VPS без браузера, агент выдаст ссылку – откройте её на ноутбуке, подтвердите, скопируйте код доступа обратно в терминал сервера.
Создайте рабочую директорию
mkdir -p ~/workspace
cd ~/workspace
git init
Здесь будут жить все скрипты и файлы агента: промпты, шаблоны карточек, queue публикаций, логи.
Запустите claude -p "Скажи 'привет' и больше ничего". Если ответ пришёл – Claude Code установлен корректно. Если ошибка про токен или подписку – вернитесь к шагу 4 и переавторизуйтесь.
Раздел 04Telegram-бот для согласования через MCP plugin
Чтобы Claude мог отправлять вам идеи и принимать ваш ответ – нужен Telegram-бот, подключённый к Claude через MCP (Model Context Protocol). Это бесплатно и собирается за 15 минут.
Создайте бота через BotFather
Откройте Telegram, найдите бота @BotFather. Команды по порядку:
/newbot
Имя бота: Marketing Agent
Username: @ваш_marketing_agent_bot
<BotFather пришлёт токен вида: 7891234567:AAxxxxxx>
Сохраните токен – он понадобится в следующем шаге.
Создайте чат для общения с агентом
Лично пишите боту /start – он не ответит, это нормально, бот ещё не запущен. Создайте новую группу в Telegram, добавьте туда своего бота как админа (Settings → Administrators → Add). Можно остаться единственным человеком в группе – так удобнее.
Узнайте chat_id вашей группы. Самый быстрый способ – через @getmyid_bot: добавьте его в группу, он пришлёт chat_id (он будет начинаться с -100), потом выкиньте его из группы.
Установите Telegram MCP plugin для Claude
В Claude Code есть встроенный механизм plugin'ов. Telegram-плагин делает из бота полноценный канал общения. Установка одной командой:
claude /plugin install telegram
Когда плагин запросит токен – вставьте полученный от BotFather. Когда попросит chat_id – вставьте id группы. Дальше плагин сам поднимет polling, и Claude сможет получать сообщения от вас и отправлять ответы.
Тест работы
В терминале запустите:
claude -p "Отправь в Telegram-чат сообщение 'тест'"
Если в группе появилось сообщение от бота – связь работает. Если нет – проверьте, что бот добавлен в группу и плагин активен (claude /plugin list).
Никому не показывайте токен бота. Он даёт полный контроль над аккаунтом бота: можно отправлять сообщения от его имени, читать всё что он получает. Если токен случайно засветился (например, в коммите на GitHub) – откройте BotFather, выберите бота, нажмите «Revoke current token» и получите новый.
Раздел 05Подключение Instagram через Meta Graph API
Чтобы агент мог публиковать в инсту автоматически – нужно официальное подключение через Meta Graph API. Это самый длинный шаг во всей настройке (45–60 минут), потому что Meta устроила сложную систему подтверждений. Но один раз пройдёте – и дальше всё работает само.
Переведите Instagram-аккаунт в Business или Creator
Откройте Instagram → Настройки → Аккаунт → Переключиться на профессиональный аккаунт → Бизнес. Если у вас уже Creator – тоже подходит. С обычного личного аккаунта API не работает.
Создайте или используйте Facebook Page
Meta API требует, чтобы Instagram был привязан к Facebook-странице. Если у вас её нет – откройте facebook.com/pages/create, создайте страницу. Можно «Бренд» с названием вашего бизнеса.
Связка: Instagram → Настройки → Аккаунт → Связанные аккаунты → Facebook → выберите вашу Page.
Зарегистрируйтесь как разработчик в Meta
Откройте developers.facebook.com – зайдите по своему обычному Facebook-аккаунту. Согласитесь со стандартными правилами разработчика (никаких проверок не будет, это формальность).
Создайте Meta App
В Meta for Developers: My Apps → Create App → Other → Business. Заполните:
- App name: например, «Carousel Publisher»
- Contact email: ваша почта
- Business account: оставьте пустым или укажите личный
После создания вы попадёте в дашборд приложения.
Подключите продукт «Instagram Graph API»
В дашборде приложения слева: Add Product → Instagram → Set Up. Перейдите в раздел Instagram Graph API → Generate Access Tokens. Подключите свой Instagram Business аккаунт через кнопку «Add or remove pages» – выберите страницу, к которой привязан Insta.
Получите долгоживущий токен (60 дней)
Базовый токен живёт 1 час – для автоматизации это бесполезно. Нужен long-lived token на 60 дней. Делается через специальный endpoint:
curl "https://graph.facebook.com/v19.0/oauth/access_token?\
grant_type=fb_exchange_token&\
client_id=<APP_ID>&\
client_secret=<APP_SECRET>&\
fb_exchange_token=<SHORT_LIVED_TOKEN>"
Где APP_ID и APP_SECRET берёте в дашборде приложения (Settings → Basic), а SHORT_LIVED_TOKEN – тот, что получили в шаге 5. Ответ придёт JSON-ом с новым токеном – он живёт 60 дней.
Узнайте Instagram Business Account ID
Это идентификатор вашего инста-аккаунта в API:
curl "https://graph.facebook.com/v19.0/me/accounts?access_token=<LONG_TOKEN>"
В ответе вы увидите массив страниц – у каждой есть id. Дальше:
curl "https://graph.facebook.com/v19.0/<PAGE_ID>?\
fields=instagram_business_account&access_token=<LONG_TOKEN>"
Получите id Instagram Business Account – тоже сохраните.
Положите ключи в .env агента
На сервере, в рабочей папке агента:
cd ~/workspace
nano .env
# Содержимое:
META_LONG_TOKEN=<long-lived токен>
META_APP_ID=<App ID>
META_APP_SECRET=<App Secret>
IG_BUSINESS_ID=<ID Instagram Business>
Файл .env не уходит в git (добавьте в .gitignore). Все скрипты агента читают ключи отсюда.
Long-lived token Meta истекает через 60 дней. Чтобы агент не сломался – добавьте cron-задачу, которая раз в 50 дней дёргает endpoint refresh-токена и переписывает .env. Готовый скрипт refresh_meta_token.py я даю в моём клубе – но и сами напишете, ничего сложного.

Раздел 06Промпт для утренней генерации идей
Самая важная часть – качество идей, которые приходят утром. Если агент даёт «общие темы про маркетинг», вы будете вечно их забраковывать. Если идеи попадают в нерв вашей аудитории и используют свежий инфоповод – вы кликаете «выбрать» с первого раза.
Сам промпт – это файл-инструкция, которую агент читает каждое утро. У меня он лежит в ~/workspace/cron-tasks/prompts/ideas-daily.md. Ниже – ключевые блоки.
Блок 1: Загрузка контекста
Перед генерацией агент читает несколько файлов:
- Концепция блога – одна страница: о чём вы вообще пишете, кто аудитория, какой тон. Например: «Эксперты-онлайн, доход 100К–1М/мес, тон – прямой, без воды»
- Контент-столпы – 6 рубрик, в которых вы публикуетесь: AI, воронки, личный бренд, кейсы школы, личное, инструменты
- История идей – лог всего, что уже было использовано за последние 30 дней. Чтобы не предлагать одно и то же дважды
- Стиль – правила тона из ваших постов: какие обороты любите, каких избегаете, какая длина хука
Блок 2: Сбор инфоповодов
Агент собирает свежие новости через WebSearch:
- Новости AI за 24–48 часов: релизы моделей, скандалы, виральные демо
- Тренды Google за сегодня: вирусные культурные моменты – знаменитости, мемы, спортивные события
- Что обсуждают на Reddit r/popular и в русскоязычных каналах ниши
Зачем нужны культурные тренды: одна из 3 идей должна быть «AI × культурный момент» – это формат с самым высоким viral potential. Например: «На Коачелле вышел Бибер с дипфейком отца» – из этого делается идея «3 нейронки, которые мог бы использовать любой блогер ради такого же эффекта».
Блок 3: Жёсткая проверка фактов
Перед генерацией идей агент проверяет каждую цифру и название минимум через 2 независимых источника. Если факт не подтверждается – выкидывает идею. Это ключевая защита от галлюцинаций.
Один раз я ленился и не вписал в промпт явную проверку – Claude уверенно предложил карусель про «новый релиз Gemini 4.0», которого ещё не было. Если бы я слепо принял – опубликовал бы пост с фейком, и потом бы оправдывался в комментариях.
Блок 4: Формат вывода
Агент возвращает 3 идеи рилса и 3 идеи карусели в одном сообщении. Структура каждой идеи:
🎴 Хук обложки одной фразой
Рубрика: [один из 6 столпов]
О чём слайды: [3-5 ключевых тезисов]
Залетит потому что: [save / share / спор в комментах]
В конце сообщения – призыв ответить «Р1 К2» или «Р2 К3», и пометка «Источники проверены».
Запуск каждое утро
Кронтаб на сервере вызывает обёрточный скрипт run-task.sh, который запускает Claude в неинтерактивном режиме с этим промптом:
# crontab -e
0 0 * * * /home/marketer/workspace/cron-tasks/run-task.sh ideas-daily \
/home/marketer/workspace/cron-tasks/prompts/ideas-daily.md
0 0 * * * – это полночь по UTC, что соответствует 8 утра по Бали (UTC+8) или 7 утра по Москве. Меняйте под свой часовой пояс.
Раздел 07Промпт для текстов слайдов
Когда вы ответили «К2» – агент берёт идею №2 из утренней выдачи и запускает второй промпт. Этот промпт пишет финальные тексты для всех слайдов плюс подпись и хэштеги.
Что агент делает по шагам
Определить выбранную идею
Прочитать последнее ваше сообщение в Telegram, выделить цифру (К1, К2 или К3), достать соответствующую идею из лога утренних идей. Пометить её статусом «Выбрана» в логе.
Загрузить контекст и стиль
Прочитать те же файлы стиля и стилистики, что и при генерации идей. Плюс отдельный файл правил для слайдов: оптимальная длина текста на слайде, какие обороты не использовать, какой CTA на финальном слайде.
Написать тексты слайдов
5–8 слайдов: обложка, контент-слайды, CTA. Каждый – одна мысль. Короткие фразы (3–5 секунд на чтение). Конкретика, цифры, глаголы. Никакой воды, никаких триадных конструкций («без X. без Y. без Z.»).
Подпись под пост
Подпись не дублирует карусель. Подпись = другой угол: личная история, эмоция, контекст по теме. 3–6 коротких абзацев. Заканчивается тем же CTA, что финальный слайд (или логично продолжает).
Хэштеги
5–8 точечных хэштегов по теме. Без воды. Микс высокочастотных (#нейросети, #маркетинг) и нишевых (#онлайншкола, #воронкипродаж).
Прогнать через нейропаттерн-чек
Перед отправкой агент сам себя проверяет на 10 AI-маркеров: «при этом», «однако», «таким образом», «давайте разберёмся», «важно отметить», красивые пустые фразы, симметричные структуры. Если нашёл – переписывает.
Отправить на согласование
Финальный текст в формате «Слайд 1: ..., Слайд 2: ..., Подпись: ..., Хэштеги: ...» отправляется в Telegram. Заканчивается фразой: «Согласуем? После «ок» делаю дизайн».
Прозрачность для эксперта: агент не пытается замаскировать что он AI и не пытается «казаться человечнее, чем нужно». Если идея пришла из конкретного источника, агент это указывает. Если факт не подтверждается – выкидывает. Если стиль не получился – пишет «не выходит, дайте мне ещё угол» вместо отправки слабого варианта.
Раздел 08Дизайн карточек через HTML+CSS+Playwright
Это самая красивая часть всей системы. Дизайн карточек агент собирает не в Figma и не в каком-то AI-генераторе картинок, а руками – через HTML+CSS, отрендеренный через Playwright в PNG.
Почему такой подход: типографика рендерится идеально (все нейронки до сих пор фейлят кириллицу), исключены опечатки в названиях инструментов и цен, бесплатно, можно править в реальном времени, бренд-стандарт гарантирован.
Стек
- HTML5 + CSS3 вручную, без фреймворков
- Google Fonts: Inter (400-900) для заголовков, Fraunces (italic) для акцентов, JetBrains Mono для labels и цифр
- Playwright (Python sync_api) для рендера в PNG
- Шаблоны слайдов лежат в
~/workspace/carousel-templates/
Шаблон слайда обложки
Один HTML-файл = один слайд. Структура минимальная:
<!doctype html>
<html lang="ru">
<head>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400..900&family=Fraunces:ital@1&display=swap" rel="stylesheet">
<style>
body{
width:1080px;height:1350px;margin:0;padding:80px;
background:#06070E;color:#fff;
font-family:'Inter',sans-serif;
display:flex;flex-direction:column;justify-content:space-between;
}
h1{font-weight:900;font-size:104px;line-height:0.96;
letter-spacing:-0.045em;text-wrap:balance;}
h1 em{font-family:'Fraunces';font-style:italic;color:#FFCD1F;}
.number{font-weight:900;font-size:340px;color:#FFCD1F;
letter-spacing:-0.06em;line-height:0.85;}
</style>
</head>
<body>
<h1>5 промптов для Claude.</h1>
<div class="number">−10</div>
<div>часов в неделю каждому эксперту</div>
</body>
</html>
Рендер в PNG через Playwright
from playwright.sync_api import sync_playwright
from pathlib import Path
import time
DIR = Path("/home/marketer/workspace/carousel-output/2026-05-02")
slides = [f"slide-{i}" for i in range(1, 8)]
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
ctx = browser.new_context(
viewport={"width": 1080, "height": 1350},
device_scale_factor=2,
)
for name in slides:
page = ctx.new_page()
page.goto(f"file://{DIR}/{name}.html", wait_until="networkidle")
page.evaluate("document.fonts.ready")
time.sleep(1.5)
page.screenshot(
path=str(DIR / f"{name}.png"),
clip={"x": 0, "y": 0, "width": 1080, "height": 1350},
)
page.close()
browser.close()
device_scale_factor=2 – это retina-рендер, итоговое изображение 2160×2700 в файле, но воспринимается как чёткое 1080×1350. Без этого на телефонах текст выглядит мыльно.
Бренд-правила (важно)
Никаких ников и дат на самих карточках. @username, дата выпуска, технические метаданные – всё это удешевляет вид. Подпись/CTA должны жить в посте под фото, не на самой картинке.
Body-текст не меньше 36px. На карточке желательно 40–44px – это значит читается на iPhone когда карусель занимает 85% ширины экрана.
Заголовки 80–110px с отрицательным letter-spacing (-0.03 to -0.05em).
Один акцентный цвет на всё. Не больше двух цветов в палитре. Чёрный/тёмно-синий фон + белая типографика + один акцент (жёлтый, лайм, фуксия).
text-wrap: balance на всех заголовках – браузер сам распределит слова по строкам ровно. Без висячих строк.
Промпт для генерации HTML карточек
Агент получает тексты слайдов от вас и сам собирает HTML по шаблону. Промпт примерно такой:
Возьми тексты слайдов из последнего согласованного сообщения.
Для каждого слайда:
1. Скопируй ближайший шаблон из ~/workspace/carousel-templates/
(cover для обложки, prompt для текстовых блоков, cta для финала)
2. Замени placeholder-текст на реальный
3. Сохрани в ~/workspace/carousel-output/{дата}/slide-{N}.html
После всех слайдов – запусти render.py.
Проверь что все 7 PNG созданы и каждый ровно 1080x1350.
Раздел 09Автоматическая публикация в Instagram
Готовые PNG-файлы лежат в ~/workspace/carousel-output/2026-05-02/. Дальше – скрипт, который через Meta Graph API заливает их в инсту как один пост-карусель.
Логика публикации
Meta API не принимает файлы напрямую – оно принимает только URL. Поэтому процесс трёхступенчатый:
- Файлы кладём в публичную папку на сайте (или в S3/Cloudflare R2)
- Для каждого слайда создаём IG Media Container с типом IMAGE и параметром is_carousel_item=true
- Из всех контейнеров создаём один CAROUSEL-контейнер
- Публикуем CAROUSEL-контейнер
Готовый скрипт публикации
import os
import requests
import time
from pathlib import Path
LONG_TOKEN = os.environ["META_LONG_TOKEN"]
IG_ID = os.environ["IG_BUSINESS_ID"]
PUBLIC_BASE = "https://blog.pavelshiriaev.ru/carousel-output/2026-05-02"
def create_image_container(image_url):
r = requests.post(
f"https://graph.facebook.com/v19.0/{IG_ID}/media",
data={
"image_url": image_url,
"is_carousel_item": True,
"access_token": LONG_TOKEN,
},
timeout=30,
)
r.raise_for_status()
return r.json()["id"]
def create_carousel(container_ids, caption):
r = requests.post(
f"https://graph.facebook.com/v19.0/{IG_ID}/media",
data={
"media_type": "CAROUSEL",
"children": ",".join(container_ids),
"caption": caption,
"access_token": LONG_TOKEN,
},
timeout=30,
)
r.raise_for_status()
return r.json()["id"]
def publish(creation_id):
r = requests.post(
f"https://graph.facebook.com/v19.0/{IG_ID}/media_publish",
data={"creation_id": creation_id, "access_token": LONG_TOKEN},
timeout=30,
)
r.raise_for_status()
return r.json()["id"]
slides = sorted(Path("/var/www/blog.pavelshiriaev.ru/carousel-output/2026-05-02").glob("slide-*.png"))
caption = open("/home/marketer/workspace/carousel-output/2026-05-02/caption.txt").read()
container_ids = [create_image_container(f"{PUBLIC_BASE}/{s.name}") for s in slides]
time.sleep(8) # дать Meta обработать каждый контейнер
carousel_id = create_carousel(container_ids, caption)
time.sleep(5)
post_id = publish(carousel_id)
print(f"Опубликовано: https://www.instagram.com/p/{post_id}")
1. Картинки должны быть публичны. Meta скачивает их по URL. Папка /var/www/blog.pavelshiriaev.ru/carousel-output/ доступна по https – Meta её видит.
2. Между созданием контейнеров и публикацией нужен sleep. Meta обрабатывает каждый контейнер несколько секунд. Если опубликовать сразу – получите ошибку «media not yet processed». 5–10 секунд хватает.
3. Лимит – 25 постов в сутки. Технический лимит Meta. Для одного эксперта – с запасом, не упрётесь.
4. Хэштеги в caption. Они должны быть в самой подписи, не отдельным полем. Просто добавьте их в конце caption-текста.
Сборка всего цикла
Все этапы – генерация идей, текстов, дизайн, публикация – управляются одним мастер-скриптом, который агент Claude запускает по cron'у. Его псевдокод:
1. На утро: генерация 3 идей рилса + 3 идеи карусели → Telegram
2. Ждать ответа эксперта 30 минут
3. Если ответил «К2»: запустить промпт текстов слайдов для идеи 2 → Telegram
4. Ждать «ок» 30 минут
5. Если получено «ок»: собрать HTML, отрендерить PNG в карусель-папку
6. Скопировать карусель-папку в /var/www для публичного доступа
7. Через Meta API: загрузить контейнеры, создать CAROUSEL, опубликовать
8. Отправить в Telegram ссылку на опубликованный пост
9. Записать всё в лог
Если на любом шаге эксперт не ответил – агент откладывает выполнение и пишет «жду ответа». Если эксперт сказал «поправь Х» – агент переписывает и запрашивает согласование заново.
Раздел 10Расширение на ВК, Threads, MAX, Pinterest
Один раз собрав агента под Instagram, расширить на другие площадки – дело часа на каждую. Логика та же: подмена API publish-функции на функцию каждой площадки. Какие площадки вообще стоят сил эксперта в 2026 году – разобрано в гайде про первую тысячу подписчиков на 4 площадках.
ВКонтакте
VK API сильно проще Meta'овского. Получаете ключ доступа группы через vk.com/dev/access_token (метод implicit flow), используете метод wall.post. Карусель в VK называется «вложения с photo» – загружаете каждое фото через photos.getWallUploadServer, потом attaches: photo123_456 в wall.post.
Threads
У Threads с конца 2025 года есть официальный API. Подключение похоже на Insta: Meta App + Threads product + access token. Метод публикации: POST /me/threads с media_type=CAROUSEL и массивом children. Документация: developers.facebook.com/docs/threads.
Ограничение: в Threads карусель максимум 10 элементов и подпись до 500 символов.
MAX
В MAX есть Bot API (похожий на Telegram Bot API). Для публикации в канал MAX от имени бота: sendMediaGroup с массивом фотографий. Документация: dev.max.ru.
Ограничение: MAX не показывает «карусель» как отдельный формат – там это media group, листается отдельно. Для эксперта – нормально, аудитория формат поймёт.
Через Pinterest API (нужен Business аккаунт). Метод POST /pins, для каждой картинки – отдельный pin. У Pinterest нет нативной карусели, но можно сделать «доску» (board) и публиковать туда серию пинов как набор.
YouTube Shorts
YouTube не поддерживает карусели как формат. Если хотите экспортировать – собирайте из 7 PNG короткое слайд-шоу (5 секунд на слайд) через ffmpeg, выкладывайте как Shorts. Получается video-карусель на 35 секунд.
ffmpeg -framerate 0.2 -pattern_type glob -i 'slide-*.png' \
-c:v libx264 -pix_fmt yuv420p -vf "scale=1080:1920:force_original_aspect_ratio=decrease,pad=1080:1920:(ow-iw)/2:(oh-ih)/2" \
output.mp4
Через сервисы-автопостеры
Если не хочется писать API-интеграции под каждую площадку – используйте SMMplanner, Postoplan или Buffer. Они принимают RSS на вход или ручную загрузку, и сами публикуют в нужные соцсети по расписанию.
Минусы: платно (~$15–30/мес), часть функций (трендовая музыка, карусели через VK API) могут быть недоступны или работать криво.
Не публикуйте одно и то же одновременно везде – алгоритмы соцсетей не любят дубли. Лучше: Insta в 9:00, VK в 12:00, Threads в 15:00, MAX в 18:00. Один пост, четыре площадки, 8 часов «прогрева» в каждой – без признаков спама.
Раздел 11Cron, мониторинг и что делать если упало
Автоматизация без мониторинга – это бомба замедленного действия. Через месяц что-то сломается: Meta обновит API, Anthropic поменяет авторизацию, картинка не пройдёт модерацию. Вам нужно знать про это раньше, чем подписчики заметят пропуск.
Где живёт расписание
На VPS – системный crontab. Запускается через обёртку run-task.sh, которая:
- Запускает Claude Code в неинтерактивном режиме
- Передаёт промпт из конкретного файла
- Логирует stdout/stderr в
~/workspace/cron-logs/{задача}_{дата}.log - Удаляет логи старше 7 дней (чтобы не забивать диск)
# crontab -e
# Утренние идеи – 8:00 по Бали (UTC+8 = 0:00 UTC)
0 0 * * * /home/marketer/workspace/cron-tasks/run-task.sh ideas-daily \
/home/marketer/workspace/cron-tasks/prompts/ideas-daily.md
# Обновление Meta-токена раз в 50 дней
0 3 1,15 * * /home/marketer/workspace/cron-tasks/run-task.sh refresh-token \
/home/marketer/workspace/cron-tasks/prompts/refresh-meta-token.md
# Daily health check – проверяет что токены живы и квоты ок
30 7 * * * /home/marketer/workspace/cron-tasks/run-task.sh health-check \
/home/marketer/workspace/cron-tasks/prompts/health-check.md
Health-check
Раз в день агент проверяет:
- Жив ли Meta-токен (запрос к
/me– если 401, токен истёк) - Хватает ли квоты Anthropic (через
/usage) - Достаточно ли места на диске (df -h)
- Не зависли ли процессы Claude (ps aux | grep claude)
Если что-то не так – агент пишет в Telegram «⚠ Проблема: токен Meta истёк, осталось 2 дня». Вы успеваете отреагировать заранее.
Логи и дебаг
Все запуски агента пишут логи. Структура папки:
~/workspace/cron-logs/
├── ideas-daily_2026-05-02_00-00.log
├── carousel-publish_2026-05-02_09-00.log
├── health-check_2026-05-02_07-30.log
└── refresh-token_2026-05-01_03-00.log
Если что-то сломалось – вы сразу знаете в каком таске и где смотреть. Один tail -100 по нужному логу обычно показывает причину.
Молчаливая поломка хуже громкой. Если агент перестал публиковать неделю назад, а вы заметили только сегодня – вы потеряли 7 постов и не знаете когда сломалось. Поэтому health-check + Telegram-алёрты на любую аномалию – это не «приятно иметь», это «обязательно».
Раздел 12Апгрейды: трендовая музыка, A/B-тесты, аналитика
Когда базовая система работает 2–3 недели – расширения напрашиваются сами. Вот что добавляют те, кто использует агента дольше всего.
Трендовая музыка
Карусели с трендовым аудио получают +27% к охвату. Meta API позволяет прикрепить аудио к посту через параметр audio_name. Агент перед публикацией заходит на страницу Reels-feed (через playwright + cookies реального браузерного сеанса), достаёт топ-10 треков с пометкой «Trending», выбирает подходящий по настроению через Claude, прикрепляет к посту.
Тонкость: Trending API у Meta пока в beta, и трекинг работает не на всех аккаунтах. Альтернатива – ручной выбор раз в неделю: вы заходите в Reels на телефоне, делаете список 5 треков, кладёте их в файл trending-music.json, агент берёт оттуда случайный.
A/B-тесты обложек
Самое тонкое место карусели – обложка (первый слайд). От неё зависит swipe rate – процент людей, которые перешли ко второму слайду. Если меньше 50% – значит хук слабый.
Агент может делать 2 версии обложки с разными хуками, публиковать в разные дни одну и ту же карусель с разными первыми слайдами, потом сравнивать охват. Через 2–3 месяца у вас собирается своя библиотека «формул хуков», которые работают именно у вашей аудитории.
Аналитика после публикации
Через 24 часа после публикации агент дёргает Insights API – собирает: reach, impressions, saves, shares, swipe-through rate. Складывает в Notion-таблицу. Раз в неделю агент сам себе делает отчёт: что сработало, что нет, какие темы дают больше всего сохранений.
Через 3 месяца такой аналитики у вас на руках самые точные данные про вашу аудиторию, какие никакой SMM-агентство не даст.
Связка с Notion для контент-плана
Вместо того чтобы агент сам предлагал темы – можно подключить Notion как источник идей. У вас в Notion таблица «Темы для каруселей» с колонками: тема, рубрика, статус (черновик / готово к публикации / опубликовано). Агент по утрам берёт из неё первую тему со статусом «готово», публикует, обновляет статус.
Это удобно когда у вас уже есть стратегический контент-план на квартал и вы хотите чтобы агент его выполнял, а не предлагал что-то своё.
Ещё дальше
- Автоответы на DM – агент мониторит DM-ы и автоматически отвечает на типовые вопросы про продукт
- Парсинг конкурентов – раз в неделю агент проходится по 5 конкурентам в нише, выписывает их топ-3 поста за неделю, делает анализ что у них сработало. Готовая сборка такого агента с утренней подборкой и кнопками в Telegram – в гайде про нейроохотника
- Кросс-постинг с адаптацией – одна и та же тема, но разный формат и тон для каждой соцсети: для VK – солиднее, для Threads – острее, для Instagram – визуальнее
Карусели на автопилоте – это первый кирпич. Когда он работает, дальше понятно, как складывать поверх остальные кирпичи: контент-план, аналитика, кросс-постинг, рилсы, ответы на DM, продажи через автоворонку. Через полгода у вас не один агент – у вас отдельная команда из агентов, которая ведёт маркетинг быстрее любого штатного отдела. И стоит дешевле одного джуниор-маркетолога.
FAQЧасто задаваемые вопросы
Можно ли запустить без VPS, прямо с компьютера?
Технически да, но компьютер должен быть включён 24/7. Проще арендовать VPS за $5/мес и забыть.
Не забанит ли Instagram за публикацию через API?
Нет. Meta Graph API – официальный канал для бизнес-аккаунтов. Бан грозит только за серые сервисы и эмуляторы.
Сколько слайдов делать в одной карусели?
Оптимально 7–10 слайдов. Алгоритм даёт каруселям повторный показ – человек видит пост ещё раз с другого слайда.
Можно ли использовать ту же схему для VK или Threads?
Да. Меняется только последний модуль публикации – остальная архитектура (Claude + Telegram-бот + HTML-слайды) работает везде.
Как начать получать реальные деньги и клиентов с помощью нейросетей и личного блога?
Два пути – выберите свой
Закрытый клуб
Простые пошаговые инструкции, эфиры с разборами каждую неделю и 10+ готовых агентов, которые делают за участников контент, презентации, сайты и многое другое.
Бесплатный разбор
Мы с командой составим для вас пошаговый план – как именно начать системно и управляемо привлекать клиентов через нейросети и блог.