О чём вообще речь
Карусели в инсте сейчас самый сильный формат. 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К/мес и пытаешься их синхронизировать. Либо собираешь агента – об этом дальше.
Раздел 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 и переавторизуйтесь.
Раздел 04 — Telegram-бот для согласования через MCP plugin
Чтобы Claude мог отправлять вам идеи и принимать ваш ответ – нужен Telegram-бот, подключённый к Claude через MCP (Model Context Protocol). Это бесплатно и собирается за 15 минут.
Шаг 1:
Создайте бота через BotFather
Откройте Telegram, найдите бота @BotFather. Команды по порядку:
/newbot Имя бота: Marketing Agent Username: @ваш_marketing_agent_bot
Сохраните токен – он понадобится в следующем шаге.
Шаг 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. Заполните:
- App name: например, «Carousel Publisher»
- Contact email: ваша почта
- Business account: оставьте пустым или укажите личный
После создания вы попадёте в дашборд приложения.
Шаг 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= &\ client_secret= &\ fb_exchange_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= "
В ответе вы увидите массив страниц – у каждой есть id. Дальше:
curl "https://graph.facebook.com/v19.0/ ?\ fields=instagram_business_account&access_token= "
Получите id Instagram Business Account – тоже сохраните.
Шаг 8:
Положите ключи в .env агента
На сервере, в рабочей папке агента:
cd ~/workspace nano .env # Содержимое: META_LONG_TOKEN= META_APP_ID= META_APP_SECRET= IG_BUSINESS_ID=
Файл .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: Загрузка контекста
Перед генерацией агент читает несколько файлов:
- Концепция блога – одна страница: о чём вы вообще пишете, кто аудитория, какой тон. Например: «Эксперты-онлайн, доход 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 из утренней выдачи и запускает второй промпт. Этот промпт пишет финальные тексты для всех слайдов плюс подпись и хэштеги.
Что агент делает по шагам
Шаг 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.
Почему такой подход: типографика рендерится идеально (все нейронки до сих пор фейлят кириллицу), исключены опечатки в названиях инструментов и цен, бесплатно, можно править в реальном времени, бренд-стандарт гарантирован.
Стек
- HTML5 + CSS3 вручную, без фреймворков
- Google Fonts: Inter (400-900) для заголовков, Fraunces (italic) для акцентов, JetBrains Mono для labels и цифр
- Playwright (Python sync_api) для рендера в PNG
- Шаблоны слайдов лежат в ~/workspace/carousel-templates/
Шаблон слайда обложки
Один HTML-файл = один слайд. Структура минимальная:
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;}
5 промптов для Claude.
−10
часов в неделю каждому эксперту
Рендер в 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. Поэтому процесс трёхступенчатый:
- Файлы кладём в публичную папку на сайте (или в 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}")
Подводные камни 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-функции на функцию каждой площадки.
ВКонтакте
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 часов «прогрева» в каждой – без признаков спама.
Раздел 11 — Cron, мониторинг и что делать если упало
Автоматизация без мониторинга – это бомба замедленного действия. Через месяц что-то сломается: 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 поста за неделю, делает анализ что у них сработало
- Кросс-постинг с адаптацией – одна и та же тема, но разный формат и тон для каждой соцсети: для VK – солиднее, для Threads – острее, для Instagram – визуальнее
Главное
Карусели на автопилоте – это первый кирпич. Когда он работает, дальше понятно, как складывать поверх остальные кирпичи: контент-план, аналитика, кросс-постинг, рилсы, ответы на DM, продажи через автоворонку. Через полгода у вас не один агент – у вас отдельная команда из агентов, которая ведёт маркетинг быстрее любого штатного отдела. И стоит дешевле одного джуниор-маркетолога.
✨ Что дальше
Как начать получать реальные деньги и клиентов с помощью нейросетей и личного блога?
Два пути – выберите свой
/ 01 · Самостоятельно
Закрытый клуб
Простые пошаговые инструкции, эфиры с разборами каждую неделю и 10+ готовых агентов, которые делают за участников контент, презентации, сайты и многое другое.
/ 02 · С нашей командой
Бесплатный разбор
Мы с командой составим для вас пошаговый план – как именно начать системно и управляемо привлекать клиентов через нейросети и блог.