💫
Гайд · Нейронки × Контент

Карусели в инсту на автопилоте. Агент в Claude делает всё сам – от темы до публикации

Пошаговая инструкция: как настроить агента, который каждое утро присылает 3 идеи карусели в Telegram, после вашего выбора сам пишет тексты слайдов, после согласования рисует карточки и публикует готовый пост в Instagram. Со скриптами, ключами Meta API и шаблонами дизайна.

⏱ Время на настройку: 2–3 часа 💰 Бюджет: от $25/мес 🛠 Сложность: для тех, кто уже работал с серверами ✍️ Павел Ширяев
О чём вообще речь

Карусели в инсте сейчас самый сильный формат. 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. Никаких ботов-сёрфингов, эмуляторов мыши или серых схем – автоматизация работает в рамках условий использования каждого сервиса.

Что внутри

  1. Почему карусели сильнее всего и почему их надо автоматизировать
  2. Архитектура агента: что из чего собирается
  3. Установка Claude Code на VPS
  4. Telegram-бот для согласования через MCP plugin
  5. Подключение Instagram через Meta Graph API
  6. Промпт для утренней генерации идей
  7. Промпт для текстов слайдов
  8. Дизайн карточек через HTML+CSS+Playwright
  9. Автоматическая публикация в Instagram
  10. Расширение на ВК, Threads, MAX, Pinterest
  11. Cron, мониторинг и что делать если упало
  12. Апгрейды: трендовая музыка, A/B-тесты, аналитика

Раздел 01Почему карусели – самый сильный формат сейчас

Если коротко – потому что Instagram сейчас даёт каруселям сразу два привилегированных канала охвата. Любой пост-карусель попадает в основную ленту подписчиков и в их Explore. А с прошлогоднего обновления алгоритма – ещё и в Reels-ленту, если к карусели прикрепить трендовое аудио. Это значит охват формата рилса плюс глубина формата карусели.

Цифры за 2026 год говорят примерно следующее. Engagement rate карусели в среднем 1.92%. Single image – 0.45%. Reels – 0.5%. Save rate у карусели в 2–3 раза выше любого другого формата. А save для алгоритма – самый сильный сигнал ценности контента. Сильнее лайка, сильнее даже комментария.

Почему алгоритм любит карусели

Главная цифра

Карусель с трендовой музыкой даёт +27% к охвату относительно карусели без музыки. Я тестировал это на своём блоге – проверка на 60 постах за 2 месяца показала разницу даже больше, около +35% по reach.

Почему вручную не выйдет делать одну в день

Считаем минимум по времени, который занимает карусель сделанная аккуратно:

Итого 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-канал – окупит подписку на квартал вперёд.

Полный цикл за один день

08:00

Утренний кронтаб запускает агента

Claude собирает свежие инфоповоды (новости AI, трендовые темы), сверяется с историей предыдущих идей, генерирует 3 варианта рилса и 3 варианта карусели. Отправляет в Telegram-чат.

08:05

Эксперт выбирает идею

Вы видите сообщение, читаете идеи за минуту, отвечаете «Р1 К2» (рилс №1, карусель №2). Это всё – больше ничего делать не надо.

08:06

Агент пишет тексты слайдов

Получив выбор, агент берёт идею, пишет 5–7 слайдов: хук обложки, контент-слайды, CTA. Плюс подпись под пост и хэштеги. Отправляет на согласование в чат.

08:15

Эксперт согласовывает или просит поправить

Читаете текст, говорите «ок» или «поменяй слайд 3 на X». Агент либо принимает, либо переписывает.

08:20

Агент рисует карточки

Заполняет HTML-шаблон, рендерит через Playwright в PNG 1080×1350, складывает в папку готовых карточек.

09:00

Агент публикует пост в Instagram

Через Meta Graph API: загружает фотографии, создаёт carousel-контейнер, публикует с подписью и хэштегами. Отправляет вам ссылку на пост.

Всё, на этом ваш день начался. Контент в инсте опубликован, вы потратили 5 минут на согласование вместо 1.5 часа на ручную работу.

Раздел 03Установка Claude Code на VPS

Если у вас уже есть рабочий VPS с Claude Code – пропускайте раздел и переходите к четвёртому. Если нет – здесь полный путь от пустоты до работающего агента на сервере.

Шаг 1

Купите VPS

Минимальная конфигурация: 2 GB RAM, 1 vCPU, 20 GB SSD, Ubuntu 24.04. Этого хватает с запасом. Где брать: Hetzner Cloud (Германия, €4.5/мес), Selectel (Россия, ~400 руб/мес), Timeweb. Для Hetzner и большинства западных нужна карта с зарубежной банковской системой – через EasyPayments или иностранную карту друзей.

На Selectel – оплата российской картой, всё проще, но на бэкенде придётся настраивать VPN-выход для запросов в Anthropic из России.

Шаг 2

Создайте пользователя 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.

Шаг 3

Поставьте 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. Не обязательно, но ощутимо ускоряет.

Шаг 4

Установите Claude Code

npm install -g @anthropic-ai/claude-code

После установки запустите claude – вас попросят авторизоваться. Если открывается браузер – зайдите в Anthropic-аккаунт. Если у вас VPS без браузера, агент выдаст ссылку – откройте её на ноутбуке, подтвердите, скопируйте код доступа обратно в терминал сервера.

Шаг 5

Создайте рабочую директорию

mkdir -p ~/workspace
cd ~/workspace
git init

Здесь будут жить все скрипты и файлы агента: промпты, шаблоны карточек, queue публикаций, логи.

Как проверить что Claude работает

Запустите claude -p "Скажи 'привет' и больше ничего". Если ответ пришёл – Claude Code установлен корректно. Если ошибка про токен или подписку – вернитесь к шагу 4 и переавторизуйтесь.

Раздел 04Telegram-бот для согласования через MCP plugin

Чтобы Claude мог отправлять вам идеи и принимать ваш ответ – нужен Telegram-бот, подключённый к Claude через MCP (Model Context Protocol). Это бесплатно и собирается за 15 минут.

Шаг 1

Создайте бота через BotFather

Откройте Telegram, найдите бота @BotFather. Команды по порядку:

/newbot
Имя бота: Marketing Agent
Username: @ваш_marketing_agent_bot
<BotFather пришлёт токен вида: 7891234567:AAxxxxxx>

Сохраните токен – он понадобится в следующем шаге.

Шаг 2

Создайте чат для общения с агентом

Лично пишите боту /start – он не ответит, это нормально, бот ещё не запущен. Создайте новую группу в Telegram, добавьте туда своего бота как админа (Settings → Administrators → Add). Можно остаться единственным человеком в группе – так удобнее.

Узнайте chat_id вашей группы. Самый быстрый способ – через @getmyid_bot: добавьте его в группу, он пришлёт chat_id (он будет начинаться с -100), потом выкиньте его из группы.

Шаг 3

Установите Telegram MCP plugin для Claude

В Claude Code есть встроенный механизм plugin'ов. Telegram-плагин делает из бота полноценный канал общения. Установка одной командой:

claude /plugin install telegram

Когда плагин запросит токен – вставьте полученный от BotFather. Когда попросит chat_id – вставьте id группы. Дальше плагин сам поднимет polling, и Claude сможет получать сообщения от вас и отправлять ответы.

Шаг 4

Тест работы

В терминале запустите:

claude -p "Отправь в Telegram-чат сообщение 'тест'"

Если в группе появилось сообщение от бота – связь работает. Если нет – проверьте, что бот добавлен в группу и плагин активен (claude /plugin list).

Безопасность бота

Никому не показывайте токен бота. Он даёт полный контроль над аккаунтом бота: можно отправлять сообщения от его имени, читать всё что он получает. Если токен случайно засветился (например, в коммите на GitHub) – откройте BotFather, выберите бота, нажмите «Revoke current token» и получите новый.

Раздел 05Подключение Instagram через Meta Graph API

Чтобы агент мог публиковать в инсту автоматически – нужно официальное подключение через Meta Graph API. Это самый длинный шаг во всей настройке (45–60 минут), потому что Meta устроила сложную систему подтверждений. Но один раз пройдёте – и дальше всё работает само.

Шаг 1

Переведите Instagram-аккаунт в Business или Creator

Откройте Instagram → Настройки → Аккаунт → Переключиться на профессиональный аккаунт → Бизнес. Если у вас уже Creator – тоже подходит. С обычного личного аккаунта API не работает.

Шаг 2

Создайте или используйте Facebook Page

Meta API требует, чтобы Instagram был привязан к Facebook-странице. Если у вас её нет – откройте facebook.com/pages/create, создайте страницу. Можно «Бренд» с названием вашего бизнеса.

Связка: Instagram → Настройки → Аккаунт → Связанные аккаунты → Facebook → выберите вашу Page.

Шаг 3

Зарегистрируйтесь как разработчик в Meta

Откройте developers.facebook.com – зайдите по своему обычному Facebook-аккаунту. Согласитесь со стандартными правилами разработчика (никаких проверок не будет, это формальность).

Шаг 4

Создайте Meta App

В Meta for Developers: My Apps → Create App → Other → Business. Заполните:

После создания вы попадёте в дашборд приложения.

Шаг 5

Подключите продукт «Instagram Graph API»

В дашборде приложения слева: Add Product → Instagram → Set Up. Перейдите в раздел Instagram Graph API → Generate Access Tokens. Подключите свой Instagram Business аккаунт через кнопку «Add or remove pages» – выберите страницу, к которой привязан Insta.

Шаг 6

Получите долгоживущий токен (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 дней.

Шаг 7

Узнайте 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 – тоже сохраните.

Шаг 8

Положите ключи в .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). Все скрипты агента читают ключи отсюда.

Токен живёт 60 дней – обновляется автоматически

Long-lived token Meta истекает через 60 дней. Чтобы агент не сломался – добавьте cron-задачу, которая раз в 50 дней дёргает endpoint refresh-токена и переписывает .env. Готовый скрипт refresh_meta_token.py я даю в моём клубе – но и сами напишете, ничего сложного.

Раздел 06Промпт для утренней генерации идей

Самая важная часть – качество идей, которые приходят утром. Если агент даёт «общие темы про маркетинг», вы будете вечно их забраковывать. Если идеи попадают в нерв вашей аудитории и используют свежий инфоповод – вы кликаете «выбрать» с первого раза.

Сам промпт – это файл-инструкция, которую агент читает каждое утро. У меня он лежит в ~/workspace/cron-tasks/prompts/ideas-daily.md. Ниже – ключевые блоки.

Блок 1: Загрузка контекста

Перед генерацией агент читает несколько файлов:

Блок 2: Сбор инфоповодов

Агент собирает свежие новости через WebSearch:

Зачем нужны культурные тренды: одна из 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 из утренней выдачи и запускает второй промпт. Этот промпт пишет финальные тексты для всех слайдов плюс подпись и хэштеги.

Что агент делает по шагам

Шаг 1

Определить выбранную идею

Прочитать последнее ваше сообщение в Telegram, выделить цифру (К1, К2 или К3), достать соответствующую идею из лога утренних идей. Пометить её статусом «Выбрана» в логе.

Шаг 2

Загрузить контекст и стиль

Прочитать те же файлы стиля и стилистики, что и при генерации идей. Плюс отдельный файл правил для слайдов: оптимальная длина текста на слайде, какие обороты не использовать, какой CTA на финальном слайде.

Шаг 3

Написать тексты слайдов

5–8 слайдов: обложка, контент-слайды, CTA. Каждый – одна мысль. Короткие фразы (3–5 секунд на чтение). Конкретика, цифры, глаголы. Никакой воды, никаких триадных конструкций («без X. без Y. без Z.»).

Шаг 4

Подпись под пост

Подпись не дублирует карусель. Подпись = другой угол: личная история, эмоция, контекст по теме. 3–6 коротких абзацев. Заканчивается тем же CTA, что финальный слайд (или логично продолжает).

Шаг 5

Хэштеги

5–8 точечных хэштегов по теме. Без воды. Микс высокочастотных (#нейросети, #маркетинг) и нишевых (#онлайншкола, #воронкипродаж).

Шаг 6

Прогнать через нейропаттерн-чек

Перед отправкой агент сам себя проверяет на 10 AI-маркеров: «при этом», «однако», «таким образом», «давайте разберёмся», «важно отметить», красивые пустые фразы, симметричные структуры. Если нашёл – переписывает.

Шаг 7

Отправить на согласование

Финальный текст в формате «Слайд 1: ..., Слайд 2: ..., Подпись: ..., Хэштеги: ...» отправляется в Telegram. Заканчивается фразой: «Согласуем? После «ок» делаю дизайн».

Главный принцип промпта

Прозрачность для эксперта: агент не пытается замаскировать что он AI и не пытается «казаться человечнее, чем нужно». Если идея пришла из конкретного источника, агент это указывает. Если факт не подтверждается – выкидывает. Если стиль не получился – пишет «не выходит, дайте мне ещё угол» вместо отправки слабого варианта.

Раздел 08Дизайн карточек через HTML+CSS+Playwright

Это самая красивая часть всей системы. Дизайн карточек агент собирает не в Figma и не в каком-то AI-генераторе картинок, а руками – через HTML+CSS, отрендеренный через Playwright в PNG.

Почему такой подход: типографика рендерится идеально (все нейронки до сих пор фейлят кириллицу), исключены опечатки в названиях инструментов и цен, бесплатно, можно править в реальном времени, бренд-стандарт гарантирован.

Стек

Шаблон слайда обложки

Один 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. Без этого на телефонах текст выглядит мыльно.

Бренд-правила (важно)

Жёсткие правила, которые я выработал на 50+ карусели

Никаких ников и дат на самих карточках. @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. Поэтому процесс трёхступенчатый:

  1. Файлы кладём в публичную папку на сайте (или в S3/Cloudflare R2)
  2. Для каждого слайда создаём IG Media Container с типом IMAGE и параметром is_carousel_item=true
  3. Из всех контейнеров создаём один CAROUSEL-контейнер
  4. Публикуем 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}")
Подводные камни Meta API

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

Через 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, которая:

# 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

Раз в день агент проверяет:

Если что-то не так – агент пишет в 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, продажи через автоворонку. Через полгода у вас не один агент – у вас отдельная команда из агентов, которая ведёт маркетинг быстрее любого штатного отдела. И стоит дешевле одного джуниор-маркетолога.

FAQЧасто задаваемые вопросы

Можно ли запустить без VPS, прямо с компьютера?

Технически да, но компьютер должен быть включён 24/7. Проще арендовать VPS за $5/мес и забыть.

Не забанит ли Instagram за публикацию через API?

Нет. Meta Graph API – официальный канал для бизнес-аккаунтов. Бан грозит только за серые сервисы и эмуляторы.

Сколько слайдов делать в одной карусели?

Оптимально 7–10 слайдов. Алгоритм даёт каруселям повторный показ – человек видит пост ещё раз с другого слайда.

Можно ли использовать ту же схему для VK или Threads?

Да. Меняется только последний модуль публикации – остальная архитектура (Claude + Telegram-бот + HTML-слайды) работает везде.

✨ Что дальше

Как начать получать реальные деньги и клиентов с помощью нейросетей и личного блога?

Два пути – выберите свой

/ 01 · Самостоятельно

Закрытый клуб

Простые пошаговые инструкции, эфиры с разборами каждую неделю и 10+ готовых агентов, которые делают за участников контент, презентации, сайты и многое другое.

или
/ 02 · С нашей командой

Бесплатный разбор

Мы с командой составим для вас пошаговый план – как именно начать системно и управляемо привлекать клиентов через нейросети и блог.