---
name: yandex-direct
description: Собирает и правит кампании Яндекс Директа — семантику и минус-слова, группы, комбинаторные объявления ЕПК (заголовки, тексты), быстрые ссылки, уточнения — и проверяет их по лимитам Директа. На выходе XLSX для загрузки через «Управление с помощью Excel» или Директ Коммандер и JSON-запросы к API Директа v5. Использовать, когда нужно создать рекламную кампанию в Директе, написать объявления, собрать ключевые фразы, минус-слова, кросс-минусовку, проверить длину заголовков. Триггеры — «Яндекс Директ», «кампания в Директе», «объявления для Директа», «ЕПК», «минус-слова», «ключевые фразы для рекламы».
---

# Кампания для Яндекс Директа

Скилл готовит кампанию, а не запускает рекламу: агент собирает семантику, пишет
объявления и быстрые ссылки, раскладывает всё в `campaign.json`, а скрипт
`scripts/direct_campaign.py` проверяет лимиты Директа и выгружает файл для загрузки.
Загружает кампанию человек — в интерфейсе Директа или через API со своим токеном.

## Четыре правила, которые нельзя нарушать

1. **Ничего не загружать в Директ без явного «да».** Скрипт сам в интернет не ходит. Если
   пользователь просит загрузить через API — нужен OAuth-токен владельца аккаунта
   (или агентства с `Client-Login` клиента). Попроси его положить токен в переменную
   окружения `YANDEX_DIRECT_TOKEN`; не проси прислать токен в чат и не печатай его.
   Первый прогон — в песочнице API. На модерацию (`ads.moderate`) — только после того,
   как человек посмотрел объявления.
2. **Не выдумывать факты о бизнесе.** Цены, сроки доставки, скидки, «№1», гарантии —
   только из того, что дал пользователь или что есть на его сайте. Превосходные степени
   без подтверждения Директ отклонит, а за недостоверную рекламу отвечает рекламодатель.
3. **Частотность не угадывать.** У агента нет доступа к Вордстату: фразы он предлагает
   по смыслу, а частотность пользователь проверяет в Вордстате или Директе. Так и скажи.
4. **Каждая строка проходит `check`.** Файл для Директа создаётся, только если ошибок
   нет: Директ не примет заголовок длиннее 56 знаков или уточнение длиннее 25.

## Порядок работы

1. **Бриф.** Спроси коротко, чего не хватает: что продаём, сайт и посадочные страницы,
   регион, чем отличаемся (факты), что точно не продаём (для минус-слов), бюджет и цель
   не нужны — их задают в настройках кампании.
2. **Семантика.** Разбей спрос на группы по одному намерению: «купить X», «X с доставкой»,
   «X для офиса». В группе — 5–30 близких фраз. Операторы — по `references/limits.md`:
   `"…"` фиксирует число слов, `!` — форму слова, `+` — предлог, `[…]` — порядок.
3. **Минус-слова.** На кампанию — нецелевое для всех групп (бесплатно, скачать, вакансии,
   отзывы сотрудников, своими руками). На группу — то, что уводит в соседнюю группу.
   Пересекающиеся фразы в разных группах `check` покажет — разведи их минус-словами
   (кросс-минусовка).
4. **Объявления.** Для ЕПК — комбинаторное объявление: до 7 заголовков по 56 знаков и до
   3 текстов по 81 знаку; Директ сам собирает сочетания. Заголовки — разные по смыслу
   (товар, выгода, срок, доверие), ключевая фраза — хотя бы в одном. Текст — выгода,
   факт, призыв. Если кампания пойдёт через API — ещё `title2`, до 30 знаков.
5. **Быстрые ссылки и уточнения.** До 8 ссылок: заголовок до 30, описание до 60 знаков,
   заголовки первых четырёх вместе — до 66. Уточнения — по 25 знаков. Ссылки — только
   на существующие страницы сайта пользователя.
6. **Собери `campaign.json`** по образцу `examples/campaign.json` и проверь:
   `python3 scripts/direct_campaign.py check campaign.json` (в Windows — `python`;
   в Claude Code путь к папке скилла — `${CLAUDE_SKILL_DIR}`). Исправь все ✗, по ! —
   реши вместе с пользователем.
7. **Выгрузи:**
   - `xlsx campaign.json kampaniya.xlsx` — для Директ → Инструменты → «Управление с помощью
     Excel» или импорта в Директ Коммандере;
   - `api campaign.json kampaniya.api.json` — запросы к API по порядку (`references/api.md`).
8. **Покажи результат таблицей:** группы, число фраз, заголовки, что проверить руками
   (частотность, регион, посадочные).

## Формат campaign.json

```json
{
  "campaign": {"name": "…", "href": "https://…", "region_ids": [1], "minus": ["бесплатно"]},
  "groups": [{
    "name": "…", "region": "Москва и Московская область", "keywords": ["…", "… -слово"],
    "minus": ["…"],
    "ads": [{"titles": ["…"], "texts": ["…"], "title2": "…", "href": "https://…",
             "display_path": "…", "sitelinks": [{"title": "…", "href": "https://…", "description": "…"}],
             "callouts": ["…"]}]
  }]
}
```

`region` — название для файла XLSX (как на вкладке «Регионы» шаблона Директа; можно
оставить пустым и выбрать регион при загрузке), `region_ids` — коды регионов для API
(225 — Россия, 1 — Москва и область, 2 — Санкт-Петербург). `campaign.campaign_id` —
номер уже созданной кампании, если загрузка через API.

## Чего этот скилл не делает

- Не создаёт кампанию с настройками и стратегией — бюджет, стратегия, счётчик Метрики,
  цели задаются в интерфейсе Директа.
- Не смотрит частотность и ставки: доступа к Вордстату и прогнозу бюджета у агента нет.
- Не загружает кампанию сам и не отправляет на модерацию без человека.
- Не гарантирует прохождение модерации — правила Директа применяет Яндекс.
- Картинки для объявлений — скилл reklamnye-kreativy.
