Claude Cursor Skill

canva-creator

Берёт согласованный контент-бриф и выполняет кампанию от начала до конца: строит календарь публикаций, генерирует макеты для постов в соцсетях через ~~дизайн (VistaCreate, Supa, Поликрафт), пишет тексты подписей и писем, ставит публикации в очередь через ~~crm. Макеты делаются то

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download ilyautov-small-business-ru-small-business-ru_skills_canva-creator-044f539.zip · 27 KB
Part of ilyautov/small-business-ru — 34 skills

Install

skills CLI npx skills add https://github.com/ilyautov/small-business-ru/tree/main/small-business-ru/skills/canva-creator
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install ilyautov-small-business-ru@llmmart
Git git clone https://github.com/ilyautov/small-business-ru.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole ilyautov/small-business-ru collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Генератор макетов (canva-creator)

Согласованный бриф — это ещё не кампания: посты сами себя не нарисуют и в очередь не встанут. Скилл доводит бриф до готовых креативов под VK, Telegram, Дзен и Одноклассники, пишет подписи и тексты писем и ставит публикации в очередь — пошагово, с твоим согласием на каждом гейте, без сюрпризов с лимитами и пустыми заглушками.

Сервис дизайна: Canva заблокирована в РФ. Основной путь — ~~дизайн: VistaCreate (быв. Crello), Supa, Поликрафт, Сберографика. Имена Canva-конкретные команды в этом файле — обобщённые шаблоны API ~~дизайна. Если у владельца есть доступ к Canva (VPN/зарубежный аккаунт) — те же шаги применимы к Canva Connect API напрямую.

Зона действия

Скилл ведёт кампанию через пять последовательных стадий, каждая — за гейтом согласования владельца:

бриф → календарь → инвентаризация ассетов → макеты (~~дизайн) → тексты → постановка в очередь (~~crm)
Путь Каналы Что производит скилл
Макет (соцсети) Telegram, VK, Яндекс Дзен, Одноклассники, RuTube Макет ~~дизайна + подпись + запланированная публикация в ~~crm
Только текст Email-рассылка (новостная, маркетинговая, цепочка) Тема + прехедер + тело письма, выдаётся владельцу инлайн для отправки

Если клиент явно работает на зарубежную аудиторию, к списку каналов можно добавить Instagram/Facebook/X — но по умолчанию в РФ это не основные площадки (Meta признана экстремистской и запрещена в РФ). ⚠️

~~дизайн не используется для писем ни при каких обстоятельствах — никаких шаблонов, автозаполнения, копий дизайнов, загрузки ассетов, экспортов. Владелец явно вывел письма из дизайн-пути, потому что автозаполнение email-шаблонов даёт заглушки-картинки, когда слотов под изображения больше, чем фото, а превью вариантов не рендерятся в чате. Если владелец просит email-макет — см. reference/gotchas.md, текст для перенаправления.


Предполётная проверка

Перед Стадией 1 подтвердите:

  1. Бриф. Владелец сослался на согласованный бриф или вставил его. Если нет: «Мне нужен контент-бриф, прежде чем собирать кампанию. У вас есть бриф из скилла content-strategy, или составим сейчас?»

  2. Тариф ~~дизайна. Бесплатный/базовый тариф требует ручного выбора шаблона из библиотеки владельца (без API-автозаполнения). Платный/командный тариф (где есть API) может автозаполнять из брендовых шаблонов.

  3. Доступ к ~~crm. Постановка постов в очередь требует тарифа ~~crm с модулем планирования публикаций (например, CRM-маркетинг в Битрикс24). Если модуля нет → пропустите Стадию 5 и выгрузите CSV (см. reference/hubspot-staging.md).

  4. Брендовые ассеты. Подтвердите путь к фото товаров на диске или что бренд-кит загружен в ~~дизайн.

  5. Бюджет генерации. Оцените объём макетов кампании и покажите его до Стадии 1. По умолчанию — 3 кандидата на каждую строку под макет; каждый макет стоит ~5 вызовов API (автозаполнение + экспорт + опрос статуса).

    Бюджет генерации для этой кампании:
      Строк под макет (соцсети): 8
      Кандидатов на строку:      3   (по умолчанию — скажите «один кандидат» для 1)
      Всего макетов:             24
      Вызовов API (примерно):    ~120  (автозаполнение + экспорт + опрос)
    
    Лимит ~~дизайна: см. тариф. Генерация займёт ~2–3 минуты, в пределах
    лимитов вашего тарифа. Продолжаем?
    

    Если расчётное число макетов превышает 30, сразу рекомендуйте режим одного кандидата — большие кампании быстро упираются в лимит. Владелец может переопределить значение на 1, 2 или 3 кандидата на строку до старта Стадии 1. Зафиксируйте выбранное значение на всю сессию.


Рабочий процесс

Стадия 1 — Календарь публикаций

Возьмите из брифа: контент-темы, каналы, частоту, жёсткие даты (запуски, акции, праздники).

Постройте таблицу-календарь со столбцом Путь, который направляет каждую строку либо в ~~дизайн, либо в текстовый набор:

Дата Канал Путь Тема Тип ассета Угол подписи/темы
02.06 Telegram Макет (соцсети) Запуск льняной линии Квадратный пост «наконец-то платье…»
05.06 Email Только текст Запуск льняной линии Тело письма «Лён, который дышит»

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

Контрольная точка 1. Покажите календарь. Спросите: «Совпадает с планом? Какие даты сдвинуть, каналы добавить, темы поменять?» Дорабатывайте до согласования, затем вслух повторите разбивку — «N строк идёт через ~~дизайн, M строк через текстовый набор» — прежде чем двигаться дальше. Поймать неверную категоризацию здесь — бесплатно; после генерации макетов — уже нет.


Стадия 2 — Инвентаризация ассетов (только строки под макет)

Email-строки пропускают эту стадию целиком. Для каждой строки Макет (соцсети) соберите манифест: что нужно шаблону и что уже есть.

  1. Перечислите каждый слот под изображение по имени. Квадратные посты обычно имеют 1–2 слота; карусели и товарные сетки — 5+. Перечисляйте поимённо (Header_Image, Product1_Image, Product2_Image, …), никогда не сворачивайте в «фото товаров».

    • С API брендовых шаблонов: читайте имена полей из метаданных шаблона.
    • Без API (базовый тариф): считайте каждый отдельный прямоугольник под изображение в шаблоне.
  2. Инвентаризируйте доступные ассеты. Тексты из брифа (названия товаров, тексты акций, слоганы, цены в ₽), фото товаров, уже загруженные в ~~дизайн, или на диске владельца, цвета и шрифты бренд-кита.

  3. Постройте таблицу пробелов по слотам. Одна строка на слот на макет — не на макет.

    Дата Имя слота Тип слота Доступный ассет Статус
    02.06 Hero_Image изображение bloom_summer.jpg → asset_id ожидается загрузить
    02.06 Headline текст «Лён, наконец-то» готово
    09.06 Product1_Image изображение — ОТСУТСТВУЕТ
  4. Разрешите несоответствия слот/ассет с владельцем. Если слотов под изображения больше, чем фото в брифе, остановитесь и спросите:

    В шаблоне «Летняя карусель» 5 слотов под изображения. Бриф дал мне 1 фото
    (bloom_summer.jpg). Чем заполнить остальные 4?
    
      1. Повторить то же фото во всех 5 слотах
      2. Вы пришлёте ещё 4 фото (пути к файлам)
      3. Выбрать шаблон попроще с меньшим числом слотов
    

    Никаких вызовов генерации, пока владелец не выберет. Генерация с пустыми слотами даёт макеты с дефолтными заглушками-пейзажами ~~дизайна.

  5. Загрузите недостающие фото и зафиксируйте подтверждённые ID ассетов. Загрузите файл, дождитесь статуса success задачи загрузки. Запишите asset.id из ответа — только это значение работает в поле изображения при автозаполнении. Пустая строка, URL, путь к файлу или устаревший ID молча отрендерят дефолтную картинку-пейзаж вместо фото.

  6. Подтвердите манифест. Покажите владельцу заполненную таблицу по слотам: каждый слот разрешён, каждый asset.id изображения подтверждён. Это последняя остановка перед вызовами API ~~дизайна.


Стадия 3 — Генерация макетов

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

Генерируйте макеты по одной строке календаря за раз, по 3 кандидата на строку (или по значению, выбранному на предполёте). Каждая строка идёт по одному циклу: сгенерировать кандидатов → проверить → экспортировать → визуально проверить → перегенерировать сбойные → показать → дождаться выбора владельца → следующая строка. Пауза 30 секунд между строками. Это держит всплеск на уровне 3 генераций + 3 экспортов за ~30 с — с запасом под лимит частоты запросов ~~дизайна. Не распараллеливайте несколько строк; одна строка за раз — это защита, которая не даёт владельцу упереться в квоту посреди кампании.

Частота опроса. Опрашивайте статус задачи каждые 3–5 секунд, не чаще. Более частый опрос жжёт квоту, не ускоряя завершение.

URL превью — встраивать безопасно только один тип. Ответы автозаполнения возвращают временные превью, которые истекают за минуты; встраивание их как markdown-картинок даёт битые заглушки «Показать изображение». Постоянные URL экспорта не истекают. Нативные карусели Cowork рендерят результат автозаполнения напрямую через аутентифицированную сессию коннектора — дайте им отрендериться самим, не встраивайте повторно.

Цикл по строке

  1. Определите шаблон. (Один раз за сессию — тот же шаблон по всем строкам, если календарь не смешивает типы ассетов.)

    • С API брендовых шаблонов: список шаблонов, отфильтрованный по типу ассета.
    • Без API (базовый тариф): найдите дизайны по имени шаблона, покажите топ-3 владельцу, подтвердите один до генерации.
  2. Сгенерируйте кандидатов строки параллельно. Запустите 3 кандидата строки одновременно (или N с предполёта).

    • С API автозаполнения: запрос автозаполнения на каждого кандидата с ID шаблона и значениями полей. Опрашивайте все задачи параллельно.
    • Без API: создайте копии дизайна. Опишите правки текста и изображений, которые владелец применяет в ~~дизайне; соберите обратно ID дизайнов.
  3. Проверьте статус задачи. Для каждого кандидата подтвердите, что задача вернула status == "success" и присутствует ID готового дизайна. Ошибки — по каждому дизайну:

    • JOB_FAILED → прочтите сообщение об ошибке, поправьте значения полей или ID ассетов, повторите один раз.

    • RATE_LIMIT_EXCEEDED (первый раз за сессию) → подождите 60 с, повторите этого одного кандидата один раз. Это покрывает временные всплески.

    • RATE_LIMIT_EXCEEDED (второй раз за сессию) или любая ошибка quota_exceeded / дневного лимита → остановите генерацию немедленно. Не повторяйте. Покажите прогресс и спросите:

      ~~дизайн ограничивает кампанию по частоте запросов. Статус:
        ✓ Сгенерировано:  посты 1–4 (12 макетов)
        ⏸ Осталось:        посты 5–8 (12 макетов не сгенерированы)
      
      Как продолжить?
        1. Перейти на 1 кандидата на оставшуюся строку (4 макета) — закончим сейчас
        2. Пауза — продолжим через 60 минут, когда квота восстановится
        3. Остановить генерацию — работаем с тем, что есть, переходим к текстам
      

      Дождитесь выбора владельца. Не зацикливайтесь на повторах.

  4. Экспортируйте каждого успешного кандидата в постоянный PNG. Запустите экспорты строки параллельно.

    • Экспорт в формат png, опрос задачи до успеха, захват постоянного URL.
    • Постоянные URL — это то, что встраивается в превью и прикрепляется к публикации в ~~crm позже. Превью из ответа автозаполнения ниже по конвейеру не используется.
  5. Визуально проверьте каждый экспорт. Посмотрите на изображение и отклоните любое из этих — все указывают на незаполненный слот или неверный ассет:

    • Обобщённый пейзаж с облаками и зелёными холмами (дефолтная заглушка)
    • Сплошные серые прямоугольники там, где должно быть фото
    • Текст-рыба или дефолтный текст шаблона
    • Сюжет не соответствует брифу (не тот товар, не тот бренд)

    Если кандидат не прошёл проверку: перепроверьте манифест по сбойному слоту, поправьте asset.id, перегенерируйте только этого кандидата, переэкспортируйте, перепроверьте.

  6. Повтор по одному кандидату при частичном сбое. Если 1 из N кандидатов строки сбойнул на Шаге 3 или 5, перегенерируйте только его — не переделывайте всю строку и не показывайте частично битую карусель. Если вторая попытка тоже сбоит:

    Третий кандидат для поста 09.06 продолжает сбоить — ~~дизайн вернул
    [ошибка / отрендерил заглушку]. Как продолжить?
    
      1. Пропустить — показать остальные 2 и идти дальше
      2. Сменить на шаблон попроще для этого кандидата
      3. Попробовать ещё раз с другим фото
    
  7. Покажите кандидатов строки. Дайте нативной карусели Cowork отрендерить результат автозаполнения. Под ней добавьте текст-подсказку:

    Кандидаты на 09.06 готовы — пролистайте карусель выше.
    Какой использовать для поста 09.06?
    

    Если карусель не рендерится или одна позиция битая, встройте постоянные PNG-URL экспорта из Шага 4. Финальный запасной вариант: ссылка на URL редактирования дизайна. Никогда не встраивайте повторно временные URL превью.

  8. Пауза 30 секунд, затем следующая строка.

Контрольная точка 2. Готово, когда владелец выбрал один макет на каждую строку календаря. Если просит перегенерацию — перегенерируйте только этого кандидата.


Стадия 4 — Написание текстов

Для каждой строки календаря напишите текст. Соцсети получают подпись; email-строки — полное письмо.

Подписи для соцсетей — Telegram, VK, Дзен, Одноклассники:

  • Длина: под канал (Telegram-пост — лонгрид допустим, но держите хук в начале; VK ≤ ~1000 знаков рекомендуется для ленты; короткие посты ОК).
  • Структура: хук → одна выгода товара → призыв к действию → 3–5 хештегов (не 30).
  • Голос: под тон-маркеры брифа. Если бриф говорит «по-дружески, неформально» — не пишите корпоративный текст.
  • Без воды. Без «Отличные новости!» и «Спешим сообщить». Открывайте с ценности.

Письма — Claude пишет всё письмо целиком; без ~~дизайна:

  • Тема: ≤ 50 знаков, конкретно, без кликбейта. «Места на весну заканчиваются» лучше, чем «Не упустите!».
  • Прехедер: ≤ 90 знаков, дополняет тему, не повторяет её.
  • Тело: обычная проза, 100–250 слов. Открывающая строка, ради которой дочитают → 1–2 абзаца по сути → один ясный призыв к действию → подпись.
  • Голос: те же тон-маркеры, что в соцсетях. Владельцы хотят, чтобы письма звучали как они, а не как шаблонная новостная рассылка.
  • Без отсылок к картинкам. Не пишите «см. изображение выше». Если владельцу нужны визуалы — он добавит их в своём сервисе рассылки.
  • Один призыв на письмо. Выберите главное действие и ведите к нему.

Покажите подписи инлайн под каждой строкой соцсетей. Покажите письма целиком инлайн под каждой email-строкой:

Тема: <тема письма>
Прехедер: <текст прехедера>

<тело письма>

Разобранные примеры — reference/examples/boutique-brief-campaign.md.

Контрольная точка 3. «Какие подписи или письма переписать? Укажите дату и что поменять.» Дорабатывайте до согласования.

Маркировка рекламы: подписи и креативы для платного размещения (Яндекс Директ, VK Реклама, Telegram Ads, посевы в чужих каналах за деньги) требуют маркировки — токен ОРД и передача данных в ЕРИР (обязательно в РФ с 2022 г.). Органические посты в собственных каналах владельца маркировки не требуют. Уточните статус размещения у владельца. ⚠️


Стадия 5 — Постановка в очередь ~~crm + передача писем

Поставьте посты для соцсетей в очередь через ~~crm (Битрикс24, amoCRM). Письма не ставятся в очередь — они выдаются владельцу инлайн для копирования в его сервис рассылки. Справку по полям API см. в reference/hubspot-staging.md.

  1. Создайте кампанию. Заведите кампанию в ~~crm с названием и датами начала/окончания из календаря.

  2. Поставьте в очередь каждый пост для соцсетей. По одной публикации на строку Макет (соцсети):

    • канал: сопоставьте канал из календаря с подключённым аккаунтом в ~~crm
    • время публикации: дата-время в будущем — проверьте, что оно ещё не прошло, перед постановкой
    • тело: согласованная подпись
    • вложение: постоянный PNG-URL экспорта из Стадии 3
    • статус: ЗАПЛАНИРОВАНО (никогда не ОПУБЛИКОВАНО)
  3. Подтвердите очередь. Запросите список запланированных публикаций, покажите его, дайте прямую ссылку на кампанию в ~~crm.

  4. Выдайте письма для передачи. Для каждой email-строки покажите согласованную тему + прехедер + тело инлайн, сгруппировав по дате отправки. Владелец копирует их в свой сервис рассылки (~~почта, Unisender, Sendsay, DashaMail).

Финальная контрольная точка.

Ваши посты для соцсетей поставлены в очередь в ~~crm: [ссылка]
Они выйдут по расписанию — любой пост можно отменить или отредактировать в ~~crm.

Письма готовы ниже — скопируйте каждое в свой сервис рассылки, когда будете
готовы отправить:

  05.06 — «Места на весну заканчиваются»
  15.07 — «Окна летнего обслуживания заполняются»

Что поправить, прежде чем закончим?

Гейты согласования

  • Никаких вызовов ~~дизайна для email-строк. Перепроверяйте столбец Путь перед каждым вызовом API.
  • Никаких публикаций. Каждый пост в ~~crm ставится как ЗАПЛАНИРОВАНО; владелец контролирует выход вживую.
  • Всегда показывайте бюджет генерации на предполёте. Владелец видит общее число макетов и согласовывает до старта Стадии 1.
  • Одна строка за раз в Стадии 3. Кандидаты внутри строки запускаются параллельно, но строки последовательны с паузой 30 с — это защита от исчерпания квоты.
  • На второй ошибке квоты — пауза и вопрос. Никогда не зацикливайтесь на повторах.
  • Всегда экспортируйте в постоянный PNG перед показом. Успех задачи не значит, что макет отрендерился корректно.
  • Никогда не встраивайте повторно временные превью-URL. Они истекают.
  • Никогда не перегенерируйте всю строку, когда сбоит один кандидат. Только повтор по кандидату.
  • Никогда не выбирайте шаблон автоматически на базовом тарифе. Всегда подтверждайте.
  • Никогда не пропускайте инвентаризацию по слотам. Многослотовые шаблоны рендерят заглушки-пейзажи, когда любой слот пуст.
  • Никогда не пропускайте Контрольную точку 1. Генерация до согласования календаря — крупнейший источник напрасной работы в этом скилле.
  • Маркировка рекламы для платных размещений. Не ставьте платный креатив в очередь без подтверждённого статуса маркировки (ОРД/ЕРИР). ⚠️

Справочные материалы

  • reference/canva-api.md — API ~~дизайна (VistaCreate/Supa): эндпоинты, загрузка ассетов, форматы экспорта
  • reference/hubspot-staging.md — постановка постов в очередь через ~~crm и CSV-запасной вариант для тарифов без планировщика
  • reference/gotchas.md — хорошие/плохие паттерны для каждого режима сбоя, который скилл встречал в работе
  • reference/examples/boutique-brief-campaign.md — полные разобранные примеры (одно-слотовый соцпост, многослотовый шаблон)
Files (small-business-ru)
  • reference
    • examples
      • boutique-brief-campaign.md 10 KB
        # Разобранный пример: бриф бутика → кампания
        
        **Бизнес:** «Лён и Нить» — женский бутик одежды, Краснодар
        **Тариф `~~дизайна`:** командный (VistaCreate, без API брендовых шаблонов)
        **`~~crm`:** Битрикс24 с модулем CRM-маркетинга (планирование публикаций)
        **Источник брифа:** вывод скилла content-strategy (согласован владельцем)
        
        ---
        
        ## Вход: согласованный бриф (резюме)
        
        ```
        Продвигать активно: льняные летние платья (топ-продавец, рост +22% м/м)
        Держать ровно: аксессуары
        Сезонная возможность: переход к школьному сезону (сдвиг 15.08)
        Акция: при покупке 2 платьев — аксессуар в подарок (с 01.06 по 31.07)
        Каналы: лента Telegram, VK, сторис VK
        Частота: 3× в неделю, пн/ср/пт, 10:00 МСК
        Голос: тёплый, разговорный, лёгкий юмор. Без корпоративщины.
        ```
        
        ---
        
        ## Стадия 1: календарь публикаций (показан на согласование)
        
        | Дата | Канал | Тема | Тип ассета | Угол подписи |
        |------|-------|------|------------|--------------|
        | 02.06 | Лента Telegram | Запуск льняных платьев | Квадратный пост | Знакомство — «наконец-то платье, в котором можно и туда, и туда» |
        | 04.06 | Лента VK | Льняные платья | Горизонтальный пост | Соцдоказательство — «самая разбираемая вещь этой весны» |
        | 06.06 | Сторис VK | Акция «2+1» | Сторис (вертикаль) | Срочность акции — переход в магазин |
        | 09.06 | Лента Telegram | Совет по стилю | Квадратный пост | Польза — «3 способа носить льняное миди» |
        | 11.06 | Лента VK | За кулисами | Горизонтальный пост | История бренда — как их шьют |
        | 13.06 | Сторис VK | Образ на выходные | Сторис (вертикаль) | Лайфстайл — «твоя суббота — собрана» |
        | … | … | … | … | … |
        
        *Владелец согласовал — «перенеси 11.06 на 12.06, 11-го я пощу про распродажу. В остальном отлично».*
        *(Календарь обновлён; переходим к Стадии 2.)*
        
        ---
        
        ## Стадия 2: генерация макетов (базовый/командный путь без API-шаблонов)
        
        **Обмен по выбору шаблона:**
        
        ```
        Claude: Нашёл 3 шаблона квадратных постов в вашей библиотеке VistaCreate:
          1. Бутик Квадрат — Кремовый  (правлен апр. 2026)
          2. Летняя акция — Песочный    (правлен март 2026)
          3. Карточка товара — Жирный   (правлен фев. 2026)
          Какой использовать для постов в ленту?
        
        Владелец: Кремовый, №1.
        
        Claude: Принято. Использую «Бутик Квадрат — Кремовый» для всех постов в ленту.
                Создаю заготовки дизайнов — дам ссылки, чтобы вы вставили фото товаров
                и текст в VistaCreate, потом вернётесь, и я экспортирую.
        ```
        
        *[Дизайны созданы; владелец заполняет в VistaCreate; возвращает ID дизайнов]*
        
        **Вывод экспорта:**
        ```
        Экспортирую превью...
        ✓ Пост в ленту 02.06    → https://<сервис>/export/abc123.png
        ✓ Пост VK 04.06          → https://<сервис>/export/def456.png
        ✓ Сторис 06.06           → https://<сервис>/export/ghi789.png
        […]
        ```
        
        *Владелец: «Выглядит отлично. Давай дальше.»*
        
        ---
        
        ## Стадия 3: черновики подписей
        
        **02.06 — лента Telegram (запуск льняных платьев)**
        ```
        Наконец-то платье, в котором можно и на рынок, и на ужин. 🌿
        
        Наше льняное миди только приехало и уже самая запрашиваемая вещь этого лета.
        Дышит, сидит легко, и да — у него есть карманы.
        
        Забирайте, пока размеры на месте → ссылка в описании.
        
        #ЛьняноеПлатье #КраснодарСтиль #ЛетняяМода #ЛёнИНить
        ```
        
        **04.06 — лента VK (соцдоказательство)**
        ```
        «Надела четыре раза за неделю и ни капли не жалею.»
        
        Это реальный отзыв реальной покупательницы про наше льняное миди. Между нами —
        мы не удивлены. Смотрите коллекцию по ссылке ниже.
        ```
        
        **06.06 — сторис VK (акция)**
        ```
        👗 Купи 2 платья → аксессуар В ПОДАРОК
        
        Акция с 01.06 по 31.07. Не проспите.
        
        Переходите в магазин →
        ```
        
        *Владелец согласовал с одной правкой: «В подпись 04.06 добавь цену в конце. "7 200 ₽, ссылка ниже".»*
        *Подпись обновлена.*
        
        ---
        
        ## Стадия 4: постановка в очередь `~~crm`
        
        **Кампания создана:**
        ```
        Кампания: «Лён и Нить — Летний лён 2026»
        Старт: 02.06.2026 | Финиш: 31.07.2026
        ID кампании: 8a72c1f4...
        ```
        
        **Очередь публикаций (первые 3):**
        
        | Запланировано | Канал | Превью подписи | Статус |
        |---------------|-------|----------------|--------|
        | 02.06, 10:00 МСК | Telegram | «Наконец-то платье, в котором можно…» | ЗАПЛАНИРОВАНО |
        | 04.06, 10:00 МСК | VK | «"Надела четыре раза за неделю…"» | ЗАПЛАНИРОВАНО |
        | 06.06, 10:00 МСК | Сторис VK | «Купи 2 платья → аксессуар В ПОДАРОК…» | ЗАПЛАНИРОВАНО |
        
        **Финальное сообщение владельцу:**
        ```
        Ваша кампания поставлена в очередь в Битрикс24:
        https://<ваш-портал>.bitrix24.ru/marketing/campaigns/8a72c1f4
        
        Посты опубликуются автоматически по расписанию. Любой пост можно отменить или
        отредактировать в CRM до выхода. Что поправить, прежде чем закончим?
        ```
        
        > **Маркировка рекламы:** все эти посты — органические, в собственных каналах
        > бренда, маркировки не требуют. Если бы акцию «2+1» продвигали **платно**
        > (Яндекс Директ, VK Реклама, посевы в чужих каналах) — креативы потребовали бы
        > токена ОРД и передачи данных в ЕРИР. ⚠️
        
        ---
        
        ## Пример письма (только текст — без `~~дизайна`)
        
        Email-строки полностью пропускают дизайн-сервис. Claude пишет тему, прехедер и тело письма обычной прозой на Стадии 3, а владелец копирует контент в свой сервис рассылки (`~~почта`, Unisender, Sendsay), когда готов отправить.
        
        **Строка календаря:**
        
        | Дата | Канал | Тема | Тип ассета | Угол |
        |------|-------|------|------------|------|
        | 05.06 | Email | Запуск летнего льна | Письмо (текст) | Главная выгода клиенту + акция |
        
        **Вывод Стадии 3 (инлайн, без дизайна):**
        
        ```
        Тема: Лён, который правда дышит
        Прехедер: Новые летние модели — и небольшой подарок, если возьмёте две.
        
        Первая партия льняных миди только поступила. Это то платье, в котором можно
        пойти на бранч, на свадьбу или забрать ребёнка из школы — и не чувствовать,
        что делал выбор гардероба.
        
        Что стоит знать:
          • Размеры XS–XL, четыре цвета
          • Карманы (настоящие)
          • Купите 2 платья до 31 июля — добавим аксессуар в подарок
        
        Заходите на ул. Красную, 41 в эти выходные или смотрите онлайн по ссылке ниже.
        
        Смотреть льняную коллекцию →
        
        — Майя
        Лён и Нить
        ```
        
        **Передача на Стадии 5:**
        
        ```
        Ваши посты для соцсетей поставлены в очередь в Битрикс24: [ссылка]
        
        Письмо на 5 июня готово выше — скопируйте его в свой сервис рассылки
        (Unisender, Sendsay), когда будете готовы отправить. Письма мы напрямую в
        очередь не ставим — так вы сначала проверите вёрстку в своей платформе отправки.
        ```
        
    • canva-api.md 11.4 KB
      # Справочник API сервиса дизайна (`~~дизайн`)
      
      > Имя файла сохранено как `canva-api.md` для совместимости со структурой пака.
      > Canva заблокирована в РФ — основной путь это `~~дизайн`: **VistaCreate**
      > (быв. Crello), **Supa**, **Поликрафт**, Сберографика. Описанная ниже логика —
      > обобщённый шаблон работы с API сервиса дизайна (автозаполнение шаблонов,
      > загрузка ассетов, экспорт). Конкретные эндпоинты сверяйте с документацией
      > вашего сервиса. Если у владельца есть доступ к Canva — те же шаги применимы
      > к Canva Connect API.
      
      Базовый URL: зависит от сервиса (например, VistaCreate API).
      Авторизация: Bearer-токен (OAuth 2.0). Нужны права на чтение/запись дизайнов и ассетов.
      
      ---
      
      ## Содержание
      
      1. [Требования по тарифу](#требования-по-тарифу)
      2. [Брендовые шаблоны](#брендовые-шаблоны)
      3. [Автозаполнение](#автозаполнение)
      4. [Копия дизайна (базовый тариф)](#копия-дизайна-базовый-тариф)
      5. [Загрузка ассета](#загрузка-ассета)
      6. [Экспорт](#экспорт)
      7. [Коды ошибок](#коды-ошибок)
      
      ---
      
      ## Требования по тарифу
      
      | Возможность | Бесплатный | Платный | Командный |
      |-------------|------------|---------|-----------|
      | Создавать дизайны | ✓ | ✓ | ✓ |
      | Список своих дизайнов | ✓ | ✓ | ✓ |
      | Брендовые шаблоны (чтение) | — | ✓/— | ✓ |
      | Автозаполнение брендовых шаблонов | — | ✓/— | ✓ |
      | Загрузка ассета | — | ✓ | ✓ |
      
      > Наличие API-автозаполнения зависит от сервиса и тарифа. Если API недоступно — работайте через ручной выбор шаблона и описание правок для владельца (см. раздел «Копия дизайна»).
      
      ---
      
      ## Брендовые шаблоны
      
      **Список шаблонов:**
      ```
      GET /brand-templates?query={ключевое слово}
      ```
      Поля, которые интересны:
      - `id` — передаётся в автозаполнение
      - `title` — человекочитаемое название
      - `thumbnail.url` — превью
      - `dataset[].label` — метки полей автозаполнения (например, «Headline», «ProductName»)
      
      Фильтруйте по `title`, содержащему тип ассета (например, «квадратный пост», «сторис», «шапка письма»).
      
      ---
      
      ## Автозаполнение
      
      Заполняет переменные поля шаблона и создаёт новый дизайн:
      
      ```
      POST /autofills
      {
        "brand_template_id": "<id_шаблона>",
        "title": "Летняя акция — пост 1",
        "data": {
          "Headline": { "type": "text", "text": "Летняя акция: −30% на свечи" },
          "ProductImage": { "type": "image", "asset_id": "<id_загруженного_ассета>" }
        }
      }
      ```
      
      Ответ: `{ "job": { "id": "<id_задачи>", "status": "queued" } }`
      
      Опрашивайте `GET /autofills/{id_задачи}` до `status == "success"`. В ответе будет `result.design.id` — используйте его для экспорта.
      
      ---
      
      ## Копия дизайна (базовый тариф)
      
      На базовых тарифах прямого «копирования шаблона» через API может не быть. Процесс:
      
      1. `GET /designs?query={название шаблона}` — список дизайнов по имени
      2. Покажите топ-3 владельцу; получите подтверждение
      3. `POST /designs` с указанием типа ассета, чтобы создать пустой дизайн нужных размеров, затем опишите, что владельцу обновить вручную в сервисе.
      
      Генерация на базовом тарифе полуручная: Claude создаёт «заготовку» дизайна и заполняет то, что позволяет API; владелец применяет брендовые правки в сервисе и возвращает ID дизайна для экспорта.
      
      ---
      
      ## Загрузка ассета
      
      Используйте, когда бриф ссылается на фото товаров на диске владельца.
      
      **Шаг 1 — инициализация загрузки:**
      ```
      POST /asset-uploads
      { "name_base64": "<base64(имя файла)>", "types": ["image/jpeg"] }
      ```
      Ответ: `{ "job": { "id": "<id_задачи>" }, "upload_url": "<presigned_url>" }`
      
      **Шаг 2 — загрузка файла:**
      ```
      PUT <upload_url>
      Content-Type: image/jpeg
      Body: <сырые байты файла>
      ```
      
      **Шаг 3 — опрос до готовности:**
      `GET /asset-uploads/{id_задачи}` → дождитесь `status == "success"` → захватите `asset.id`.
      
      Макс. размер файла: 100 МБ. Поддерживаемые типы: `image/jpeg`, `image/png`, `image/webp`.
      
      ---
      
      ## Экспорт
      
      **Зачем экспортировать каждый дизайн:** превью из ответа автозаполнения — это
      короткоживущий аутентифицированный URL CDN. Он истекает за минуты и
      рендерится как битая заглушка «Показать изображение», если встроить его в
      markdown-картинку после истечения. Вывод `POST /exports` — **постоянный URL**,
      безопасный для встраивания в превью в чате, прикрепления к публикации в
      `~~crm` и отправки владельцу.
      
      Всегда экспортируйте каждый дизайн после генерации, до показа превью.
      
      ```
      POST /exports
      {
        "design_id": "<id_дизайна>",
        "format": {
          "type": "png",
          "export_quality": "regular",
          "pages": [1]
        }
      }
      ```
      
      Опрашивайте `GET /exports/{id_задачи}` до `status == "success"`. В ответе `urls[]` — используйте `urls[0]` как ссылку превью и URL вложения для `~~crm`.
      
      **Эквиваленты через MCP** (если используете коннектор `~~дизайна` в Cowork вместо прямого REST):
      
      | Нужно | Инструмент MCP | Возвращает |
      |-------|----------------|------------|
      | Постоянный URL превью | `export-design` | Постоянный URL загрузки (безопасно встраивать) |
      | Превью страницы (стабильнее ответа автозаполнения, но не постоянный) | `get-design-thumbnail` | URL превью страницы |
      | Только метаданные дизайна | `get-design` | Название, владелец, число страниц, превью |
      | Загрузка с машины владельца | `upload-asset-from-url` | `asset_id` (один URL на вызов) |
      
      **Рекомендации по форматам по каналам:**
      
      | Канал | Тип | Размеры |
      |-------|-----|---------|
      | Лента Telegram/VK (квадрат) | `png` | 1080×1080 |
      | Сторис / вертикаль (VK Клипы, обложка) | `png` | 1080×1920 |
      | Лента VK/ОК (горизонталь) | `png` | 1200×630 |
      | Шапка письма | `png` | 600×200 |
      
      ---
      
      ## Лимиты частоты запросов и бюджет генерации
      
      **Жёсткий лимит:** зависит от сервиса (например, N запросов в минуту на токен). Сверьте с документацией `~~дизайна`.
      
      **Стоимость дизайна:** ~5 вызовов API — 1 `POST /autofills` + 1 `POST /exports` + ~3 раунда опроса (`GET /autofills/{id}`, `GET /exports/{id}`). Частота опроса — 3–5 секунд; более частый опрос жжёт квоту, не ускоряя завершение.
      
      **Безопасный потолок:** ~15–20 дизайнов в минуту оставляют комфортный запас под лимит.
      
      **Рекомендуемый темп (используется Стадией 3):**
      
      ```
      3 кандидата на строку × 1 строка за раз × пауза 30 с между строками
      = 6 дизайнов (~30 вызовов API) за 30 секунд
      = 12 дизайнов / минуту, около половины потолка
      ```
      
      **Формула бюджета на предполёте:**
      
      ```
      всего_дизайнов = (строк под макет) × (кандидатов на строку, по умолч. 3)
      всего_вызовов  ≈ всего_дизайнов × 5
      время_генерации ≈ (всего_дизайнов / 12) минут
      ```
      
      **Паттерн отката при `RATE_LIMIT_EXCEEDED`:**
      
      1. Первый раз за сессию → ждём 60 с, повторяем этого одного кандидата. Трактуем как временный всплеск.
      2. Второй раз за ту же сессию, или любая ошибка `quota_exceeded` / дневного лимита → останавливаем генерацию и показываем прогресс владельцу. Не повторяем. Скилл спрашивает владельца: (а) перейти на 1 кандидата на оставшуюся строку, (б) пауза и продолжение через 60 минут, (в) остановиться и перейти к текстам с тем, что уже сгенерировано.
      
      ---
      
      ## Коды ошибок
      
      | Код | Значение | Что делать |
      |-----|----------|------------|
      | `PERMISSION_DENIED` | Нет права или не тот тариф | Проверьте тариф; попросите владельца переподключить `~~дизайн` с нужными правами |
      | `DESIGN_NOT_FOUND` | Неверный ID дизайна | Запросите список дизайнов и подтвердите ID |
      | `AUTOFILL_FIELD_NOT_FOUND` | Имя поля шаблона не совпадает | Запросите метаданные шаблона и перечитайте `dataset[].label` |
      | `RATE_LIMIT_EXCEEDED` | Слишком много запросов | Первый раз: ждём 60 с, повтор. Второй раз: стоп и вопрос владельцу (см. выше) |
      | `JOB_FAILED` | Асинхронная задача сбойнула | Проверьте `job.error.message`; частая причина — слишком большой ассет |
      
    • gotchas.md 22.7 KB
      # Подводные камни
      
      Типичные режимы сбоя скилла canva-creator.
      
      > Во всём файле под `~~дизайн` понимается сервис дизайна (VistaCreate, Supa,
      > Поликрафт), под `~~crm` — сервис постановки публикаций в очередь
      > (Битрикс24, amoCRM). Каналы РФ: Telegram, VK, Дзен, Одноклассники, RuTube.
      
      ---
      
      ## Камень: генерация ЛЮБОГО макета `~~дизайна` для email-строки
      
      **Почему важно:** владелец полностью вывел `~~дизайн` из email-пути.
      Автозаполнение email-шаблонов даёт заглушки-картинки (стоковые пейзажи,
      пустые прямоугольники) в плитках, а превью вариантов не рендерятся в чате.
      Решение было: письма из этого скилла — только текст, точка. Сгенерировать
      email-макет — даже один — это откат явного решения.
      
      ### ✗ Плохо
      
      ```
      В календаре 6 строк соцсетей + 2 email-строки.
      → Стадия 2 генерирует 6 соцмакетов + 2 email-макета.
      → Email-макеты выходят с плитками-заглушками.
      ```
      
      Или любой вариант: «сгенерирую email-шаблон просто для референса», «нашёл email-шаблон, показать превью?», «вот макет для письма 05.06…» — всё запрещено.
      
      ### ✓ Хорошо
      
      ```
      Стадия 1: календарь собран со столбцом «Путь».
        - 6 строк помечены «Макет (соцсети)»
        - 2 строки помечены «Только текст» (без ~~дизайна)
      Стадия 2: генерирует ровно 6 макетов ~~дизайна. Email-строки не передаются
                ни в один эндпоинт ~~дизайна.
      Стадия 3: пишет 6 подписей для соцсетей + 2 полных письма (тема + прехедер + тело) текстом.
      Стадия 5: ставит 6 соцпостов в очередь ~~crm. Выдаёт 2 письма инлайн для копирования в сервис рассылки.
      ```
      
      Если владелец явно просит email-макет в `~~дизайне` («можешь сделать версию письма 05.06 в VistaCreate?»), перенаправьте: «Этот скилл держит письма текстовыми, потому что email-путь в дизайн-сервисе даёт заглушки-картинки. Если хотите письмо с дизайном — соберите его прямо в `~~дизайне`, а я помогу с текстом здесь.»
      
      ---
      
      ## Камень: генерация без плана бюджета
      
      **Почему важно:** `~~дизайн` ограничивает частоту запросов, и каждый макет
      стоит ~5 вызовов (автозаполнение + экспорт + опрос). Кампания на 10 строк с
      4 кандидатами на строку генерирует 40 макетов и ~200 вызовов API — а при
      параллелизме хуже. Без предполётного бюджета владелец упирается в квоту
      посреди кампании без понятного пути восстановления, и четыре уже
      сгенерированных поста лежат без дела.
      
      ### ✗ Плохо
      
      ```
      Календарь согласован → сразу запускаем 4 кандидата × 8 строк параллельно
      → ~160 вызовов за 90 секунд → RATE_LIMIT_EXCEEDED на 5-м посте → цикл
      повторов → владелец заблокирован.
      ```
      
      ### ✓ Хорошо
      
      ```
      Предполёт: «8 строк под макет × 3 кандидата = 24 макета, ~120 вызовов API.
      Идём по умолчанию 3 кандидата на строку?»
      
      Стадия 3: 3 кандидата строки 1 параллельно → пауза 30 с → строка 2 →
      пауза 30 с → строка 3 → … заканчивается на ~12 макетах/минуту, с запасом.
      
      Если квота всё же сработала: стоп, показать прогресс, спросить владельца —
      перейти на одного кандидата, пауза на час, или к текстам с тем, что есть.
      ```
      
      ---
      
      ## Камень: пропуск Контрольной точки 1 (согласование календаря) до генерации
      
      **Почему важно:** генерация 10+ макетов `~~дизайна` стоит вызовов API,
      времени и внимания. Если в календаре не те даты, не те каналы или владелец
      передумал насчёт темы — вся работа в мусор. Контрольная точка календаря —
      самое дешёвое место поймать рассинхрон.
      
      ### ✗ Плохо
      
      Получили бриф → сразу начали вызывать автозаполнение по всем 12 постам → показываем макеты до того, как владелец согласовал расписание.
      
      Владелец: «Стоп, я не хотел постов на неделе с 15-го, я в отъезде.»
      
      ### ✓ Хорошо
      
      Сначала показать таблицу-календарь. Дождаться явного «годится», прежде чем открывать хоть один вызов API `~~дизайна`.
      
      ---
      
      ## Камень: в шаблоне больше слотов под изображения, чем фото в брифе
      
      **Почему важно:** многослотовые соцшаблоны (карусели, товарные сетки) могут
      иметь 3+ слота. Когда бриф даёт 1 фото, а шаблон требует 3, незаполненные
      слоты молча рендерят стоковую заглушку — облака и зелёные холмы вместо фото
      товара. Макет выглядит «готовым», пока владелец его не откроет.
      
      (Примечание: email-строки полностью пропускают `~~дизайн` — см. SKILL.md, Стадия 3. Этот камень касается только соцшаблонов с несколькими слотами.)
      
      ### ✗ Плохо
      
      Собрать манифест с одной строкой на макет («Карусель — нужен Hero_Image»). Загрузить одно фото. Сгенерировать. Карусель выходит со слайдом 1 заполненным и слайдами 2–3 с одинаковыми стоковыми пейзажами.
      
      ### ✓ Хорошо
      
      Собрать манифест по слотам. Показать пробел явно:
      
      ```
      В шаблоне «карусель из 3 товаров» 3 слота под изображения. Бриф дал мне
      1 фото. Чем заполнить остальные 2?
      
      1. Повторить то же фото во всех 3 слотах
      2. Я пришлю ещё 2 фото
      3. Выбрать одно-слотовый шаблон
      ```
      
      Дождаться выбора владельца до генерации. Не дать заглушкам уйти в публикацию.
      
      ---
      
      ## Камень: доверять `status: success` без экспорта и визуальной проверки
      
      **Почему важно:** успешная задача автозаполнения значит, что `~~дизайн`
      принял запрос и создал дизайн — не что в дизайне правильные изображения.
      Если `asset_id` был пустым, устаревшим или не того типа, задача всё равно
      вернёт `status: success`, а дизайн отрендерится с дефолтными заглушками.
      Единственный способ узнать — посмотреть на готовый вывод.
      
      ### ✗ Плохо
      
      ```
      Статус задачи: success ✓
      result.design.id: есть ✓
      → Показать владельцу
      ```
      
      Результат: владелец открывает карусель и видит стоковые пейзажи в 3 из 4 макетов.
      
      ### ✓ Хорошо
      
      После успеха задачи экспортируйте каждый дизайн в постоянный PNG. Посмотрите на каждый PNG и подтвердите, что в нём реальные ассеты — не дефолтный пейзаж, не серые прямоугольники, не текст-рыба. Показывайте владельцу только после прохождения визуальной проверки.
      
      ---
      
      ## Камень: один макет в пакете не отрендерился
      
      **Почему важно:** когда 1 из 4 макетов в пакете сбоит (ошибка задачи,
      истёкший URL превью, отрендеренная заглушка), а вы показываете частичную
      карусель, владелец видит три реальных макета и один серый прямоугольник
      «Показать изображение». Он теряет доверие к остальным, хотя они в порядке.
      
      ### ✗ Плохо
      
      ```
      Макеты недели 1 готовы:
      [Вариант A — реальное превью]
      [Вариант B — реальное превью]
      [Вариант C — реальное превью]
      [Вариант D — заглушка «Показать изображение»]
      Какой использовать?
      ```
      
      ### ✓ Хорошо
      
      Когда поймали битый макет на проверке (Шаг 6), перегенерируйте только его с правильным asset_id. Переэкспортируйте, перепроверьте. Показывайте только когда все четыре макета пакета имеют постоянные проверенные превью. Если вторая попытка тоже сбоит — спросите владельца: пропустить, сменить шаблон или попробовать другое фото.
      
      ---
      
      ## Камень: генерация без подтверждения, что у всех полей автозаполнения есть значения
      
      **Почему важно:** автозаполнение молча рендерит пустые заглушки, когда
      значение поля отсутствует или указанный `asset_id` не существует. Результат —
      профессионально выглядящий шаблон с пустыми белыми прямоугольниками там, где
      должны быть фото товара и заголовок.
      
      ### ✗ Плохо
      
      Собрать календарь → сразу запустить всё автозаполнение параллельно → половина макетов приходит с пустыми заглушками, потому что фото товаров не были загружены заранее.
      
      ### ✓ Хорошо
      
      Собрать календарь → инвентаризировать каждый слот автозаполнения по отдельности → загрузить недостающие фото → подтвердить все значения полей с владельцем → затем генерировать параллельно, с заранее заполненными полями.
      
      ---
      
      ## Камень: передача неверных значений в поля изображений автозаполнения
      
      **Почему важно:** когда поле изображения получает пустую строку, путь к
      файлу, URL или устаревший/неверный `asset_id`, `~~дизайн` не выдаёт ошибку —
      он молча рендерит дефолтную заглушку шаблона (например, обобщённый пейзаж с
      облаками и холмами). Макет выглядит «готовым», но главное изображение —
      сток, а не фото товара владельца.
      
      ### ✗ Плохо
      
      Загрузить фото товара → не дождаться завершения задачи загрузки → передать `job_id` (а не `asset.id`) в данные автозаполнения → дизайн рендерится с заглушкой-пейзажем вместо фото.
      
      ### ✓ Хорошо
      
      Загрузить фото через `POST /asset-uploads` → опрашивать `GET /asset-uploads/{job_id}` до `status == "success"` → извлечь `asset.id` из ответа → передать именно этот ID в поле изображения. Проверить, что у каждого поля изображения есть подтверждённый `asset.id`, до вызова автозаполнения.
      
      ---
      
      ## Камень: встраивание временных URL превью в markdown
      
      **Почему важно:** ответ автозаполнения возвращает короткоживущие
      аутентифицированные URL CDN. Они истекают за минуты. Если встроить их как
      markdown-картинки (`![](.../...)`), к моменту показа сообщения они
      отрендерятся как битые заглушки «Показать изображение».
      
      ### ✗ Плохо
      
      Сгенерировать 8 макетов → вручную встроить каждый временный URL превью в ответ как `![Hero 1](https://...)` → все картинки показываются битыми серыми заглушками, потому что URL истекли до рендера.
      
      ### ✓ Хорошо
      
      Либо дайте нативной карусели Cowork отрендерить результат инструмента автоматически, либо экспортируйте каждый дизайн через `POST /exports` и встройте **постоянный** URL экспорта. Финальный запасной вариант: ссылка на постоянный URL редактирования дизайна. Никогда не встраивайте повторно временные превью-URL.
      
      ---
      
      ## Камень: перечисление макетов по одному отдельными блоками-картинками
      
      **Почему важно:** когда Claude перечисляет каждый макет отдельным блоком
      («Hero 1 / [картинка] / Hero 2 / [картинка]»), картинки рендерятся битыми
      серыми заглушками «Показать изображение». Показ всех макетов вместе одним
      сгруппированным пакетом запускает карусель Cowork, которая рендерится верно.
      
      ### ✗ Плохо
      
      ```
      Hero 1 — Портфолио из нескольких объектов
      [Показать изображение]
      Открыть в ~~дизайне: https://.../d/xxx
      
      Hero 2 — Кейс прибрежного рынка
      [Показать изображение]
      Открыть в ~~дизайне: https://.../d/yyy
      ```
      
      ### ✓ Хорошо
      
      Показать все макеты в одном сгруппированном ответе, чтобы они отрендерились каруселью. Под каруселью — одна подсказка:
      
      ```
      Вот 4 hero-макета для недели 1. Пролистайте карусель выше и скажите,
      какой оставить.
      ```
      
      ---
      
      ## Камень: генерация макетов последовательно вместо параллельной
      
      **Почему важно:** генерация по одному значит, что владелец ждёт N
      оборотов вместо одного. Запускайте все запросы генерации в пакете сразу и
      показывайте выбор после завершения всех задач.
      
      ### ✗ Плохо
      
      Сгенерировать макет 1 → ждать → показать → макет 2 → ждать → показать → … × 8. Владелец смотрит медленную капельницу 10 минут.
      
      ### ✓ Хорошо
      
      Запустить все макеты текущего пакета сразу → опрашивать все задачи параллельно → по завершении экспортировать каждый → проверить визуально → затем показать.
      
      ---
      
      ## Камень: автовыбор брендового шаблона на базовом тарифе
      
      **Почему важно:** на базовых тарифах нет API-доступа к брендовым шаблонам.
      Если Claude угадает шаблон по имени и сгенерирует не с тем, владелец получит
      макеты в неверных цветах/шрифтах и будет переделывать вручную.
      
      ### ✗ Плохо
      
      ```
      Нашёл шаблон «Квадрат — Синий». Использую его для всех постов в ленту.
      ```
      …за чем следуют 8 макетов в синем, когда бренд — зелёный.
      
      ### ✓ Хорошо
      
      ```
      Нашёл 3 шаблона в вашей библиотеке ~~дизайна для постов в ленту:
      1. Квадрат — Синий  (правлен март 2026)
      2. Летняя акция — Зелёный  (правлен апр. 2026)
      3. Карточка товара  (правлен янв. 2026)
      
      Какой использовать?
      ```
      
      ---
      
      ## Камень: дрейф голоса подписей по длинному календарю
      
      **Почему важно:** при написании 12–20 подписей за один проход тон дрейфует —
      ранние подписи следуют голосу брифа, поздние сползают в обобщённый
      маркетинговый текст. Владельцы замечают сразу.
      
      ### ✗ Плохо
      
      Пост 1: «Наши свечи ручной работы — идеальный летний подарок 🌿» (по брифу: «тёплый, разговорный»)
      Пост 10: «Раскройте атмосферу с нашей коллекцией авторских ароматов.» (корпоративный дрейф)
      
      ### ✓ Хорошо
      
      Перед написанием зафиксируйте 2–3 голосовых маркера из брифа (например, «непринуждённо, по-дружески, с лёгким юмором»). Перечитывайте первую черновую подпись перед каждой новой. Если владелец отметил рассинхрон голоса на какой-то подписи — перечитайте её и сделайте точкой перекалибровки для остальных черновиков.
      
      ---
      
      ## Камень: постановка постов в `~~crm` без проверки, что время публикации в будущем
      
      **Почему важно:** `~~crm` отклоняет посты со временем публикации в прошлом с
      ошибкой валидации. Если календарь строился на более раннюю дату, а владелец
      ставит в очередь только сейчас, некоторые даты могли пройти.
      
      ### ✗ Плохо
      
      Построить календарь 01.04 на июньские посты → владелец согласовал 15.05 → попытаться поставить в очередь без проверки → пост на «30.04 10:00» возвращает ошибку.
      
      ### ✓ Хорошо
      
      Перед постановкой в очередь сравните каждое время публикации с текущим временем. Если какая-то дата прошла, покажите: «Пост на 30.04 уже прошёл. Пропустить или перенести на следующую неделю?»
      
      ---
      
      ## Камень: пропуск маркировки рекламы для платных размещений (РФ)
      
      **Почему важно:** в РФ с 01.09.2022 рекламные креативы для **платных**
      размещений (Яндекс Директ, VK Реклама, Telegram Ads, посевы в чужих каналах
      за деньги) требуют маркировки: токен через ОРД (оператор рекламных данных) и
      передача данных в ЕРИР. Пропуск = риск штрафа для владельца. Органические
      посты в собственных каналах бренда маркировки не требуют.
      
      ### ✗ Плохо
      
      Поставить платный креатив в очередь / запустить таргет без токена ОРД, не уточнив у владельца статус размещения.
      
      ### ✓ Хорошо
      
      До постановки в очередь спросить владельца: «Это размещение платное (таргет/посев за деньги) или органический пост в вашем канале?» Если платное — напомнить, что нужен токен ОРД и передача в ЕРИР, и не ставить креатив в очередь без подтверждённого статуса маркировки. ⚠️
      
    • hubspot-staging.md 6.1 KB
      # Справочник: постановка кампании в очередь через `~~crm`
      
      > Имя файла сохранено как `hubspot-staging.md` для совместимости со структурой
      > пака. Содержимое адаптировано под РФ: вместо HubSpot — `~~crm` (**Битрикс24**,
      > **amoCRM**, RetailCRM). Эндпоинты ниже — обобщённый шаблон; сверяйте с
      > документацией вашей CRM (в Битрикс24 планирование публикаций живёт в модуле
      > CRM-маркетинга / мессенджер-маркетинга).
      
      Требуется: тариф `~~crm` с модулем планирования публикаций в соцсетях/мессенджерах.
      Авторизация: Bearer-токен (OAuth 2.0 или ключ приложения).
      
      ---
      
      ## Содержание
      
      1. [Проверка тарифа](#проверка-тарифа)
      2. [Создание кампании](#создание-кампании)
      3. [Создание поста](#создание-поста)
      4. [Проверка очереди](#проверка-очереди)
      5. [CSV-запасной вариант (без модуля планирования)](#csv-запасной-вариант-без-модуля-планирования)
      6. [Справочник полей](#справочник-полей)
      
      ---
      
      ## Проверка тарифа
      
      Если неясно, есть ли у владельца модуль планирования публикаций:
      
      ```
      GET /crm/v3/objects/companies?limit=1
      ```
      
      Проверьте тариф/подписку аккаунта. Если API возвращает 403 на эндпоинтах публикаций, скажите владельцу: «Постановка постов в очередь требует тарифа `~~crm` с модулем планирования публикаций. Ваш текущий тариф его не включает. Могу вместо этого выгрузить CSV для планировщика — подойдёт?»
      
      ---
      
      ## Создание кампании
      
      ```
      POST /marketing/v3/campaigns
      {
        "name": "Летняя акция 2026 — соцсети",
        "startDate": "2026-06-01",
        "endDate":   "2026-06-30",
        "currencyCode": "RUB",
        "utm": {
          "source": "social",
          "medium": "owned",
          "campaign": "letnyaya-akciya-2026"
        }
      }
      ```
      
      Ответ: `{ "id": "<id_кампании>", ... }` — сохраните для привязки постов.
      
      ---
      
      ## Создание поста
      
      Один вызов на строку календаря. Ставьте как `ЗАПЛАНИРОВАНО` (`SCHEDULED`), никогда не `ОПУБЛИКОВАНО` (`PUBLISHED`).
      
      ```
      POST /marketing/v3/social/posts
      {
        "campaignId": "<id_кампании>",
        "channelId":  "<id_канала_в_crm>",
        "content": {
          "body": "<согласованный текст подписи>"
        },
        "scheduledAt": "2026-06-03T10:00:00+03:00",
        "attachments": [
          {
            "url": "<постоянный_png_url_из_дизайна>"
          }
        ],
        "status": "SCHEDULED"
      }
      ```
      
      **`channelId`** — ID подключённого аккаунта соцсети в `~~crm` (не название платформы). Получить подключённые аккаунты:
      ```
      GET /marketing/v3/social/channels
      ```
      Сопоставьте по `type` (`TELEGRAM`, `VK`, `OK`, `DZEN`) и используйте поле `id`.
      
      **`scheduledAt`** — должно быть в будущем (относительно момента вызова API). Используйте время по часовому поясу владельца (МСК = `+03:00`), если он не указал иное.
      
      ---
      
      ## Проверка очереди
      
      После постановки всех постов:
      
      ```
      GET /marketing/v3/social/posts?status=SCHEDULED&campaignId=<id_кампании>
      ```
      
      Покажите результат таблицей: дата, канал, первые 60 знаков подписи, статус. Дайте прямую ссылку на кампанию:
      `https://<ваш-портал>.bitrix24.ru/marketing/campaigns/{id_кампании}`
      
      Скажите владельцу: «Посты в очереди и опубликуются автоматически. Любой пост можно отменить или отредактировать в CRM до времени выхода.»
      
      ---
      
      ## CSV-запасной вариант (без модуля планирования)
      
      Когда постановка через `~~crm` недоступна, выгрузите CSV, который владелец импортирует в свой планировщик (SMMplanner, Postoplan, Amplifr и т.п.).
      
      Заголовки столбцов:
      ```
      Дата,Время,Канал,Подпись,СсылкаНаКартинку,Статус
      ```
      
      Пример строки:
      ```
      03.06.2026,10:00 МСК,Telegram,"Летняя акция: −30% на свечи ☀️ ...",https://.../export/...,Запланировано
      ```
      
      Скажите владельцу: «Подготовил CSV для планировщика, раз ваш тариф `~~crm` не включает планирование публикаций. Импортируйте его в SMMplanner или Postoplan. [путь к файлу]»
      
      ---
      
      ## Справочник полей
      
      | Поле | Тип | Примечания |
      |------|-----|------------|
      | `campaignId` | строка | UUID из создания кампании |
      | `channelId` | строка | Из `GET /social/channels` |
      | `content.body` | строка | Текст подписи; до 2 000 знаков |
      | `scheduledAt` | ISO 8601 | Время в будущем; со смещением часового пояса (МСК `+03:00`) |
      | `attachments[].url` | строка | Публичный URL (URL экспорта из `~~дизайна` подходит) |
      | `status` | enum | Всегда `"SCHEDULED"` — никогда `"PUBLISHED"` |
      
  • SKILL.md 32.2 KB
    ---
    name: canva-creator
    description: >
      Берёт согласованный контент-бриф и выполняет кампанию от начала до конца:
      строит календарь публикаций, генерирует макеты для постов в соцсетях через
      ~~дизайн (VistaCreate, Supa, Поликрафт), пишет тексты подписей и писем,
      ставит публикации в очередь через ~~crm. Макеты делаются только для постов
      в соцсетях (Telegram, VK, Дзен, Одноклассники) — письма пишутся обычным
      текстом и выдаются владельцу для отправки из своего сервиса рассылки.
      Каждый шаг требует явного согласия владельца. Используй, когда владелец
      говорит «сделай креатив», «сгенерируй посты», «сделай макеты», «преврати
      это в кампанию» или передаёт согласованный бриф на исполнение. Триггеры:
      "сделай креатив", "сгенерируй посты", "сделай макеты", "макет для акции",
      "собери кампанию".
    ---
    
    <!-- Производное от Anthropic knowledge-work-plugins / small-business (Apache-2.0, (c) Anthropic). Локализовано под РФ, файл изменён. См. /NOTICE и /LICENSE. -->
    
    # Генератор макетов (canva-creator)
    
    Согласованный бриф — это ещё не кампания: посты сами себя не нарисуют и в очередь не встанут. Скилл доводит бриф до готовых креативов под VK, Telegram, Дзен и Одноклассники, пишет подписи и тексты писем и ставит публикации в очередь — пошагово, с твоим согласием на каждом гейте, без сюрпризов с лимитами и пустыми заглушками.
    
    > **Сервис дизайна:** Canva заблокирована в РФ. Основной путь — `~~дизайн`:
    > **VistaCreate** (быв. Crello), **Supa**, **Поликрафт**, Сберографика. Имена
    > Canva-конкретные команды в этом файле — обобщённые шаблоны API `~~дизайна`.
    > Если у владельца есть доступ к Canva (VPN/зарубежный аккаунт) — те же шаги
    > применимы к Canva Connect API напрямую.
    
    ## Зона действия
    
    Скилл ведёт кампанию через пять последовательных стадий, каждая — за гейтом согласования владельца:
    
    ```
    бриф → календарь → инвентаризация ассетов → макеты (~~дизайн) → тексты → постановка в очередь (~~crm)
    ```
    
    | Путь | Каналы | Что производит скилл |
    |------|--------|----------------------|
    | Макет (соцсети) | Telegram, VK, Яндекс Дзен, Одноклассники, RuTube | Макет `~~дизайна` + подпись + запланированная публикация в `~~crm` |
    | Только текст | Email-рассылка (новостная, маркетинговая, цепочка) | Тема + прехедер + тело письма, выдаётся владельцу инлайн для отправки |
    
    > Если клиент явно работает на зарубежную аудиторию, к списку каналов можно добавить Instagram/Facebook/X — но по умолчанию в РФ это не основные площадки (Meta признана экстремистской и запрещена в РФ). ⚠️
    
    **`~~дизайн` не используется для писем ни при каких обстоятельствах** — никаких
    шаблонов, автозаполнения, копий дизайнов, загрузки ассетов, экспортов. Владелец
    явно вывел письма из дизайн-пути, потому что автозаполнение email-шаблонов даёт
    заглушки-картинки, когда слотов под изображения больше, чем фото, а превью
    вариантов не рендерятся в чате. Если владелец просит email-макет — см.
    `reference/gotchas.md`, текст для перенаправления.
    
    ---
    
    ## Предполётная проверка
    
    Перед Стадией 1 подтвердите:
    
    1. **Бриф.** Владелец сослался на согласованный бриф или вставил его. Если нет:
       «Мне нужен контент-бриф, прежде чем собирать кампанию. У вас есть бриф из
       скилла content-strategy, или составим сейчас?»
    
    2. **Тариф `~~дизайна`.** Бесплатный/базовый тариф требует ручного выбора
       шаблона из библиотеки владельца (без API-автозаполнения). Платный/командный
       тариф (где есть API) может автозаполнять из брендовых шаблонов.
    
    3. **Доступ к `~~crm`.** Постановка постов в очередь требует тарифа `~~crm`
       с модулем планирования публикаций (например, CRM-маркетинг в Битрикс24).
       Если модуля нет → пропустите Стадию 5 и выгрузите CSV
       (см. [reference/hubspot-staging.md](reference/hubspot-staging.md)).
    
    4. **Брендовые ассеты.** Подтвердите путь к фото товаров на диске или что
       бренд-кит загружен в `~~дизайн`.
    
    5. **Бюджет генерации.** Оцените объём макетов кампании и покажите его до
       Стадии 1. По умолчанию — 3 кандидата на каждую строку под макет; каждый
       макет стоит ~5 вызовов API (автозаполнение + экспорт + опрос статуса).
    
       ```
       Бюджет генерации для этой кампании:
         Строк под макет (соцсети): 8
         Кандидатов на строку:      3   (по умолчанию — скажите «один кандидат» для 1)
         Всего макетов:             24
         Вызовов API (примерно):    ~120  (автозаполнение + экспорт + опрос)
    
       Лимит ~~дизайна: см. тариф. Генерация займёт ~2–3 минуты, в пределах
       лимитов вашего тарифа. Продолжаем?
       ```
    
       Если расчётное число макетов превышает 30, сразу рекомендуйте режим одного
       кандидата — большие кампании быстро упираются в лимит. Владелец может
       переопределить значение на 1, 2 или 3 кандидата на строку до старта
       Стадии 1. Зафиксируйте выбранное значение на всю сессию.
    
    ---
    
    ## Рабочий процесс
    
    ### Стадия 1 — Календарь публикаций
    
    Возьмите из брифа: контент-темы, каналы, частоту, жёсткие даты (запуски, акции, праздники).
    
    Постройте таблицу-календарь со столбцом `Путь`, который направляет каждую строку либо в `~~дизайн`, либо в текстовый набор:
    
    | Дата | Канал | Путь | Тема | Тип ассета | Угол подписи/темы |
    |------|-------|------|------|------------|-------------------|
    | 02.06 | Telegram | Макет (соцсети) | Запуск льняной линии | Квадратный пост | «наконец-то платье…» |
    | 05.06 | Email | Только текст | Запуск льняной линии | Тело письма | «Лён, который дышит» |
    
    Помечайте каждую строку email-канала как `Только текст` до показа. Ограничьте 30 днями, если бриф не указывает иное. Заранее отметьте конфликты расписания (два поста в один день про один товар).
    
    **Контрольная точка 1.** Покажите календарь. Спросите: «Совпадает с планом?
    Какие даты сдвинуть, каналы добавить, темы поменять?» Дорабатывайте до
    согласования, затем вслух повторите разбивку — «N строк идёт через `~~дизайн`,
    M строк через текстовый набор» — прежде чем двигаться дальше. Поймать
    неверную категоризацию здесь — бесплатно; после генерации макетов — уже нет.
    
    ---
    
    ### Стадия 2 — Инвентаризация ассетов (только строки под макет)
    
    Email-строки пропускают эту стадию целиком. Для каждой строки `Макет (соцсети)` соберите манифест: что нужно шаблону и что уже есть.
    
    1. **Перечислите каждый слот под изображение по имени.** Квадратные посты
       обычно имеют 1–2 слота; карусели и товарные сетки — 5+. Перечисляйте
       поимённо (`Header_Image`, `Product1_Image`, `Product2_Image`, …), никогда
       не сворачивайте в «фото товаров».
       - С API брендовых шаблонов: читайте имена полей из метаданных шаблона.
       - Без API (базовый тариф): считайте каждый отдельный прямоугольник под изображение в шаблоне.
    
    2. **Инвентаризируйте доступные ассеты.** Тексты из брифа (названия товаров,
       тексты акций, слоганы, цены в ₽), фото товаров, уже загруженные в `~~дизайн`,
       или на диске владельца, цвета и шрифты бренд-кита.
    
    3. **Постройте таблицу пробелов по слотам.** Одна строка на слот на макет — не на макет.
    
       | Дата | Имя слота | Тип слота | Доступный ассет | Статус |
       |------|-----------|-----------|-----------------|--------|
       | 02.06 | Hero_Image | изображение | bloom_summer.jpg → asset_id ожидается | загрузить |
       | 02.06 | Headline | текст | «Лён, наконец-то» | готово |
       | 09.06 | Product1_Image | изображение | — | **ОТСУТСТВУЕТ** |
    
    4. **Разрешите несоответствия слот/ассет с владельцем.** Если слотов под
       изображения больше, чем фото в брифе, остановитесь и спросите:
    
       ```
       В шаблоне «Летняя карусель» 5 слотов под изображения. Бриф дал мне 1 фото
       (bloom_summer.jpg). Чем заполнить остальные 4?
    
         1. Повторить то же фото во всех 5 слотах
         2. Вы пришлёте ещё 4 фото (пути к файлам)
         3. Выбрать шаблон попроще с меньшим числом слотов
       ```
    
       Никаких вызовов генерации, пока владелец не выберет. Генерация с пустыми слотами даёт макеты с дефолтными заглушками-пейзажами `~~дизайна`.
    
    5. **Загрузите недостающие фото и зафиксируйте подтверждённые ID ассетов.**
       Загрузите файл, дождитесь статуса `success` задачи загрузки. Запишите
       `asset.id` из ответа — только это значение работает в поле изображения при
       автозаполнении. Пустая строка, URL, путь к файлу или устаревший ID молча
       отрендерят дефолтную картинку-пейзаж вместо фото.
    
    6. **Подтвердите манифест.** Покажите владельцу заполненную таблицу по слотам:
       каждый слот разрешён, каждый `asset.id` изображения подтверждён. Это
       последняя остановка перед вызовами API `~~дизайна`.
    
    ---
    
    ### Стадия 3 — Генерация макетов
    
    Перед любым вызовом API `~~дизайна` перечитайте календарь и отбросьте каждую строку, чей `Путь` не `Макет (соцсети)`. Email-строки эту стадию не проходят.
    
    Генерируйте макеты **по одной строке календаря за раз**, по 3 кандидата на строку (или по значению, выбранному на предполёте). Каждая строка идёт по одному циклу: сгенерировать кандидатов → проверить → экспортировать → визуально проверить → перегенерировать сбойные → показать → дождаться выбора владельца → следующая строка. Пауза 30 секунд между строками. Это держит всплеск на уровне 3 генераций + 3 экспортов за ~30 с — с запасом под лимит частоты запросов `~~дизайна`. Не распараллеливайте несколько строк; одна строка за раз — это защита, которая не даёт владельцу упереться в квоту посреди кампании.
    
    **Частота опроса.** Опрашивайте статус задачи каждые 3–5 секунд, не чаще. Более частый опрос жжёт квоту, не ускоряя завершение.
    
    **URL превью — встраивать безопасно только один тип.** Ответы автозаполнения
    возвращают временные превью, которые истекают за минуты; встраивание их как
    markdown-картинок даёт битые заглушки «Показать изображение». Постоянные URL
    экспорта не истекают. Нативные карусели Cowork рендерят результат
    автозаполнения напрямую через аутентифицированную сессию коннектора — дайте им
    отрендериться самим, не встраивайте повторно.
    
    #### Цикл по строке
    
    1. **Определите шаблон.** (Один раз за сессию — тот же шаблон по всем строкам,
       если календарь не смешивает типы ассетов.)
       - С API брендовых шаблонов: список шаблонов, отфильтрованный по типу ассета.
       - Без API (базовый тариф): найдите дизайны по имени шаблона, покажите топ-3 владельцу, подтвердите один до генерации.
    
    2. **Сгенерируйте кандидатов строки параллельно.** Запустите 3 кандидата строки одновременно (или N с предполёта).
       - С API автозаполнения: запрос автозаполнения на каждого кандидата с ID шаблона и значениями полей. Опрашивайте все задачи параллельно.
       - Без API: создайте копии дизайна. Опишите правки текста и изображений, которые владелец применяет в `~~дизайне`; соберите обратно ID дизайнов.
    
    3. **Проверьте статус задачи.** Для каждого кандидата подтвердите, что задача
       вернула `status == "success"` и присутствует ID готового дизайна. Ошибки —
       по каждому дизайну:
       - `JOB_FAILED` → прочтите сообщение об ошибке, поправьте значения полей или ID ассетов, повторите один раз.
       - `RATE_LIMIT_EXCEEDED` (первый раз за сессию) → подождите 60 с, повторите этого одного кандидата один раз. Это покрывает временные всплески.
       - `RATE_LIMIT_EXCEEDED` (второй раз за сессию) **или** любая ошибка `quota_exceeded` / дневного лимита → остановите генерацию немедленно.
         Не повторяйте. Покажите прогресс и спросите:
    
         ```
         ~~дизайн ограничивает кампанию по частоте запросов. Статус:
           ✓ Сгенерировано:  посты 1–4 (12 макетов)
           ⏸ Осталось:        посты 5–8 (12 макетов не сгенерированы)
    
         Как продолжить?
           1. Перейти на 1 кандидата на оставшуюся строку (4 макета) — закончим сейчас
           2. Пауза — продолжим через 60 минут, когда квота восстановится
           3. Остановить генерацию — работаем с тем, что есть, переходим к текстам
         ```
    
         Дождитесь выбора владельца. Не зацикливайтесь на повторах.
    
    4. **Экспортируйте каждого успешного кандидата в постоянный PNG.** Запустите экспорты строки параллельно.
       - Экспорт в формат `png`, опрос задачи до успеха, захват постоянного URL.
       - Постоянные URL — это то, что встраивается в превью и прикрепляется к публикации в `~~crm` позже. Превью из ответа автозаполнения ниже по конвейеру не используется.
    
    5. **Визуально проверьте каждый экспорт.** Посмотрите на изображение и отклоните любое из этих — все указывают на незаполненный слот или неверный ассет:
       - Обобщённый пейзаж с облаками и зелёными холмами (дефолтная заглушка)
       - Сплошные серые прямоугольники там, где должно быть фото
       - Текст-рыба или дефолтный текст шаблона
       - Сюжет не соответствует брифу (не тот товар, не тот бренд)
    
       Если кандидат не прошёл проверку: перепроверьте манифест по сбойному слоту, поправьте `asset.id`, перегенерируйте только этого кандидата, переэкспортируйте, перепроверьте.
    
    6. **Повтор по одному кандидату при частичном сбое.** Если 1 из N кандидатов строки сбойнул на Шаге 3 или 5, перегенерируйте только его — не переделывайте всю строку и не показывайте частично битую карусель. Если вторая попытка тоже сбоит:
    
       ```
       Третий кандидат для поста 09.06 продолжает сбоить — ~~дизайн вернул
       [ошибка / отрендерил заглушку]. Как продолжить?
    
         1. Пропустить — показать остальные 2 и идти дальше
         2. Сменить на шаблон попроще для этого кандидата
         3. Попробовать ещё раз с другим фото
       ```
    
    7. **Покажите кандидатов строки.** Дайте нативной карусели Cowork отрендерить результат автозаполнения. Под ней добавьте текст-подсказку:
    
       ```
       Кандидаты на 09.06 готовы — пролистайте карусель выше.
       Какой использовать для поста 09.06?
       ```
    
       Если карусель не рендерится или одна позиция битая, встройте постоянные PNG-URL экспорта из Шага 4. Финальный запасной вариант: ссылка на URL редактирования дизайна. Никогда не встраивайте повторно временные URL превью.
    
    8. **Пауза 30 секунд, затем следующая строка.**
    
    **Контрольная точка 2.** Готово, когда владелец выбрал один макет на каждую строку календаря. Если просит перегенерацию — перегенерируйте только этого кандидата.
    
    ---
    
    ### Стадия 4 — Написание текстов
    
    Для каждой строки календаря напишите текст. Соцсети получают подпись; email-строки — полное письмо.
    
    **Подписи для соцсетей** — Telegram, VK, Дзен, Одноклассники:
    
    - Длина: под канал (Telegram-пост — лонгрид допустим, но держите хук в начале; VK ≤ ~1000 знаков рекомендуется для ленты; короткие посты ОК).
    - Структура: хук → одна выгода товара → призыв к действию → 3–5 хештегов (не 30).
    - Голос: под тон-маркеры брифа. Если бриф говорит «по-дружески, неформально» — не пишите корпоративный текст.
    - Без воды. Без «Отличные новости!» и «Спешим сообщить». Открывайте с ценности.
    
    **Письма** — Claude пишет всё письмо целиком; без `~~дизайна`:
    
    - Тема: ≤ 50 знаков, конкретно, без кликбейта. «Места на весну заканчиваются» лучше, чем «Не упустите!».
    - Прехедер: ≤ 90 знаков, дополняет тему, не повторяет её.
    - Тело: обычная проза, 100–250 слов. Открывающая строка, ради которой дочитают → 1–2 абзаца по сути → один ясный призыв к действию → подпись.
    - Голос: те же тон-маркеры, что в соцсетях. Владельцы хотят, чтобы письма звучали как они, а не как шаблонная новостная рассылка.
    - Без отсылок к картинкам. Не пишите «см. изображение выше». Если владельцу нужны визуалы — он добавит их в своём сервисе рассылки.
    - Один призыв на письмо. Выберите главное действие и ведите к нему.
    
    Покажите подписи инлайн под каждой строкой соцсетей. Покажите письма целиком инлайн под каждой email-строкой:
    
    ```
    Тема: <тема письма>
    Прехедер: <текст прехедера>
    
    <тело письма>
    ```
    
    Разобранные примеры — [reference/examples/boutique-brief-campaign.md](reference/examples/boutique-brief-campaign.md).
    
    **Контрольная точка 3.** «Какие подписи или письма переписать? Укажите дату и что поменять.» Дорабатывайте до согласования.
    
    > **Маркировка рекламы:** подписи и креативы для **платного** размещения
    > (Яндекс Директ, VK Реклама, Telegram Ads, посевы в чужих каналах за деньги)
    > требуют маркировки — токен ОРД и передача данных в ЕРИР (обязательно в РФ
    > с 2022 г.). Органические посты в собственных каналах владельца маркировки
    > не требуют. Уточните статус размещения у владельца. ⚠️
    
    ---
    
    ### Стадия 5 — Постановка в очередь `~~crm` + передача писем
    
    Поставьте посты для соцсетей в очередь через `~~crm` (Битрикс24, amoCRM). Письма не ставятся в очередь — они выдаются владельцу инлайн для копирования в его сервис рассылки. Справку по полям API см. в [reference/hubspot-staging.md](reference/hubspot-staging.md).
    
    1. **Создайте кампанию.** Заведите кампанию в `~~crm` с названием и датами начала/окончания из календаря.
    
    2. **Поставьте в очередь каждый пост для соцсетей.** По одной публикации на строку `Макет (соцсети)`:
       - канал: сопоставьте канал из календаря с подключённым аккаунтом в `~~crm`
       - время публикации: дата-время в будущем — проверьте, что оно ещё не прошло, перед постановкой
       - тело: согласованная подпись
       - вложение: постоянный PNG-URL экспорта из Стадии 3
       - статус: `ЗАПЛАНИРОВАНО` (никогда не `ОПУБЛИКОВАНО`)
    
    3. **Подтвердите очередь.** Запросите список запланированных публикаций, покажите его, дайте прямую ссылку на кампанию в `~~crm`.
    
    4. **Выдайте письма для передачи.** Для каждой email-строки покажите согласованную тему + прехедер + тело инлайн, сгруппировав по дате отправки. Владелец копирует их в свой сервис рассылки (`~~почта`, Unisender, Sendsay, DashaMail).
    
    **Финальная контрольная точка.**
    
    ```
    Ваши посты для соцсетей поставлены в очередь в ~~crm: [ссылка]
    Они выйдут по расписанию — любой пост можно отменить или отредактировать в ~~crm.
    
    Письма готовы ниже — скопируйте каждое в свой сервис рассылки, когда будете
    готовы отправить:
    
      05.06 — «Места на весну заканчиваются»
      15.07 — «Окна летнего обслуживания заполняются»
    
    Что поправить, прежде чем закончим?
    ```
    
    ---
    
    ## Гейты согласования
    
    - **Никаких вызовов `~~дизайна` для email-строк.** Перепроверяйте столбец `Путь` перед каждым вызовом API.
    - **Никаких публикаций.** Каждый пост в `~~crm` ставится как `ЗАПЛАНИРОВАНО`; владелец контролирует выход вживую.
    - **Всегда показывайте бюджет генерации на предполёте.** Владелец видит общее число макетов и согласовывает до старта Стадии 1.
    - **Одна строка за раз в Стадии 3.** Кандидаты внутри строки запускаются параллельно, но строки последовательны с паузой 30 с — это защита от исчерпания квоты.
    - **На второй ошибке квоты — пауза и вопрос.** Никогда не зацикливайтесь на повторах.
    - **Всегда экспортируйте в постоянный PNG перед показом.** Успех задачи не значит, что макет отрендерился корректно.
    - **Никогда не встраивайте повторно временные превью-URL.** Они истекают.
    - **Никогда не перегенерируйте всю строку, когда сбоит один кандидат.** Только повтор по кандидату.
    - **Никогда не выбирайте шаблон автоматически на базовом тарифе.** Всегда подтверждайте.
    - **Никогда не пропускайте инвентаризацию по слотам.** Многослотовые шаблоны рендерят заглушки-пейзажи, когда любой слот пуст.
    - **Никогда не пропускайте Контрольную точку 1.** Генерация до согласования календаря — крупнейший источник напрасной работы в этом скилле.
    - **Маркировка рекламы для платных размещений.** Не ставьте платный креатив в очередь без подтверждённого статуса маркировки (ОРД/ЕРИР). ⚠️
    
    ---
    
    ## Справочные материалы
    
    - [reference/canva-api.md](reference/canva-api.md) — API `~~дизайна` (VistaCreate/Supa): эндпоинты, загрузка ассетов, форматы экспорта
    - [reference/hubspot-staging.md](reference/hubspot-staging.md) — постановка постов в очередь через `~~crm` и CSV-запасной вариант для тарифов без планировщика
    - [reference/gotchas.md](reference/gotchas.md) — хорошие/плохие паттерны для каждого режима сбоя, который скилл встречал в работе
    - [reference/examples/boutique-brief-campaign.md](reference/examples/boutique-brief-campaign.md) — полные разобранные примеры (одно-слотовый соцпост, многослотовый шаблон)
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related