Инструкция по настройке AgDor AI Panel

От первого подключения до сотен опубликованных SEO-статей в месяц. Пройдите этот маршрут один раз - дальше панель работает сама.

🧭 Общая логика работы панели

AgDor AI Panel работает как конвейер: вы подключаете сайт, подключаете AI-провайдера, готовите правила и ключевые слова, собираете шаблон pipeline, а затем запускаете задачу публикации.

Куда публикуете? Два разных пути:
WordPress — установите файл api.php в корень WordPress, см. раздел WordPress API.
OfferCMS / собственный CMS — установите клиентский комплект .cms, см. раздел Подключение сайта.
  1. 🌐 Domains — подключаете сайт, указываете API URL, токен и доменный AI-промпт.
  2. 🎨 Внешний шаблон сайта — после установки клиентского комплекта настройте .cms/temp: шапку, меню, карточки, сайдбар, стили, метрику и футер.
  3. 🤖 AI Providers — добавляете OpenAI, Gemini, Anthropic, xAI, DeepSeek, Qwen или Custom OpenAI-compatible API.
  4. 📝 Prompts — сохраняете повторяемые инструкции: SEO-правила, стиль, ограничения, формат статьи.
  5. 🔍 Keywords — создаёте наборы ключевых слов для генерации.
  6. ⚙️ Templates — собираете pipeline из шагов: поиск, парсинг, RAG, AI-генерация, обработка и финальная форма статьи.
  7. ▶️ Tasks — связываете домен, шаблон и набор ключей, выбираете режим публикации и запускаете задачу.
  8. 📝 Articles — смотрите, создаёте и редактируете статьи вручную, если это нужно.
Самая частая правильная последовательность: сначала сайт, токен и внешний шаблон .cms/temp, затем AI-провайдер, затем промпты и ключи, после этого pipeline-шаблон, тест pipeline и только потом рабочая задача.
Папку .cms/temp или весь клиентский комплект .cms можно загрузить в ИИ и попросить создать новый внешний шаблон, переделать дизайн под нишу, изменить карточки, меню, цвета, футер, статические страницы и рекламные/метрические вставки. Главное — не ломать системные переменные шаблона: $row, $posts, $post, $tophost, $incpage, $currentLang.

🌐 Подключение сайта и клиентского .cms

Для публикации статей на внешний сайт используется клиентский комплект .cms. Это маленькая CMS/API-часть, которая принимает публикации из панели, сохраняет статьи, изображения и дополнительные поля, а также отдаёт публичные URL.

Где взять комплект

  1. Откройте вкладку 🌐 Domains.
  2. Нажмите кнопку Скачать клиент (.zip).
  3. Распакуйте архив. Внутри будет комплект файлов сайта: index.php, classes/, pages/, temp/, vendor/ и другие служебные файлы.
Не нужно вручную копировать внутренние пути панели или вставлять прямую ссылку скачивания в инструкцию для пользователя. Пользовательский путь — кнопка Скачать клиент (.zip) во вкладке Domains.

Вариант 1: установка в отдельную папку blog

  1. Создайте в корне нужного сайта папку blog.
  2. Скопируйте в неё содержимое клиентского архива.
  3. Проверьте, что API открывается по адресу https://example.com/blog/api.php.
  4. Если хостинг возвращает 404, настройте rewrite так, чтобы запросы внутри /blog/ обрабатывались клиентским index.php.
  5. В панели в настройках домена укажите API URL: https://example.com/blog/api.php.

Этот вариант безопаснее, если на домене уже есть сайт и вы не хотите смешивать файлы основной системы с клиентским комплектом.

Вариант 2: установка от корня сайта

  1. Скопируйте содержимое клиентского архива прямо в корень сайта.
  2. Используйте этот вариант только если сайт должен полностью работать на комплекте OfferCMS или если вы точно понимаете, какие файлы будут объединены с текущим сайтом.
  3. В панели в настройках домена укажите API URL: https://example.com/api.php.

API Token

  1. На сайте откройте файл classes/integration.php.
  2. В функции cms_get_api_token() замените стандартное значение на уникальную длинную строку.
  3. В панели откройте 🌐 Domains → Добавить домен или редактирование домена.
  4. В поле API Token вставьте ту же строку.
function cms_get_api_token(): string
{
    return 'your-unique-secret-token-here';
}
Панель отправляет публикации с заголовком Authorization: Bearer API_TOKEN. Если токен на сайте и токен в панели отличаются, публикация вернёт ошибку авторизации.

🌐 Domains — управление сайтами

Вкладка Domains отвечает за сайты, на которые панель будет публиковать готовые материалы.

  • Скачать клиент (.zip) — скачивает актуальный клиентский комплект для установки на сайт. Если появилась новая версия, рядом с кнопкой может отображаться отметка NEW.
  • Добавить домен — открывает форму подключения сайта.
  • ✏️ — редактирование домена.
  • 🗑️ — удаление домена из панели.

Поля домена

  • Домен — доменное имя без лишних параметров, например example.com.
  • API URL — полный адрес API клиента: https://example.com/api.php или https://example.com/blog/api.php.
  • API Token — секретная строка из cms_get_api_token() на сайте.
  • Системный промпт домена — правила именно для этого сайта: язык, тон, аудитория, тематика, структура, запреты и требования к публикациям.

Доменный промпт можно использовать внутри AI-шагов через переменную {{domain_aiprompt}}. Это удобно, когда один и тот же шаблон должен работать на разных сайтах с разной тематикой.

🤖 AI Providers — подключение моделей

AI-провайдеры вынесены отдельно от шаблонов. Благодаря этому один шаблон можно быстро переключать между разными ключами, аккаунтами и моделями.

Кнопки и действия

  • Добавить провайдера — создаёт новое подключение.
  • ✏️ — редактирует сохранённого провайдера.
  • 🧪 — отправляет тестовый запрос и показывает HTTP-код, модель, текст ответа и подсказки по ошибкам.
  • 🗑️ — удаляет провайдера. Если шаблон использовал этого провайдера, такой шаблон будет требовать внимания.

Поля провайдера

  • Тип провайдера — Gemini, OpenAI, Anthropic, xAI, DeepSeek, Qwen или Custom.
  • Название — понятное имя подключения. Можно оставить автоматически созданное или назвать по аккаунту/ключу.
  • Регион Qwen — появляется только для Qwen.
  • API URL — появляется для Custom OpenAI-compatible API.
  • Доступные модели — список моделей, по одной в строке. Именно из этого списка потом выбирается модель в LLM-шаге шаблона.
  • 🔄 Обновить список моделей — кнопка возле поля моделей. Она запрашивает каталог моделей у провайдера, показывает предпросмотр и позволяет вставить полученный список.
  • API ключ — ключ провайдера.
  • Активен — только активные провайдеры доступны для новых LLM-шагов.

Карточка провайдера показывает ID, тип, возможности, количество моделей, статус активности и возможную последнюю критическую ошибку: недостаточно средств, неверный ключ, rate limit, model not found, timeout и другие.

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

📝 Prompts — глобальные правила

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

  • Создать промпт — добавляет новый reusable prompt.
  • Название — имя, по которому промпт будет вставляться в шаблон.
  • Содержимое — сам текст правил.
  • Категория — необязательная группировка, например seo, style, html, review.

В LLM-шаге промпт вставляется макросом:

{{prompt:"seo_article_rules"}}

Так можно держать большую стабильную инструкцию в одном месте и не копировать её вручную в каждый шаблон.

🔍 Keywords — наборы ключевых слов

Вкладка Keywords хранит базы ключевых слов. Одна задача может использовать один или несколько наборов.

  • Создать / добавить базу — создаёт новый набор или пополняет существующий.
  • Название базы — понятное имя набора, например Founders CRM EN или CBD Reviews PT.
  • Drag & drop .txt — загрузка файла со списком ключей.
  • Ручной ввод — вставка ключей в textarea, по одному ключу на строку.
  • Переименовать — меняет название выбранной базы.
  • Очистить — удаляет ключи внутри базы, но оставляет сам набор.
  • Удалить базу — удаляет набор полностью.

В pipeline текущий ключ доступен через переменную {{keyword}}. При запуске задачи система проходит по ключам выбранных наборов и для каждого ключа выполняет шаблон.

⚙️ Templates — сборка pipeline

Template — это схема генерации. Он описывает, что именно нужно сделать с ключевым словом: собрать выдачу, загрузить страницы, построить RAG-контекст, сгенерировать статью, извлечь поля и отправить финальные данные на публикацию.

Основные элементы окна шаблона

  • Название шаблона — имя pipeline в списке.
  • ТипСтатья или Ключевые слова.
  • Палитра шагов — кнопки добавления шагов: 🤖 ИИ, 🧪 Обработка, 🧩 Преобразование, 🔎 Поиск, 📰 Новости, 🖼️ Картинки, 🎞️ Видео, 📄 Статья по URL, 🌐 HTML по URL, 📝 Форма статьи.
  • Canvas — визуальная карта шагов. Карточки можно раскладывать удобнее для чтения.
  • − / + / 100% / Вписать / Разложить заново — управление масштабом и расположением canvas.
  • Порядок выполнения — отдельный список реальной очередности шагов. Именно этот порядок определяет, какие данные доступны следующим шагам.
  • К первой ошибке — помогает перейти к шагу, где макрос ссылается на отсутствующий или будущий шаг.
  • Показать/скрыть JSON редактор — ручное редактирование JSON шагов. Обычно удобнее работать визуально, JSON нужен для точечной правки или переноса шаблона.
Важно: расположение карточек на canvas и порядок выполнения — не одно и то же. Если шаг использует {{step.search.output}}, шаг search должен выполняться раньше.

🧱 Типы шагов pipeline

🤖 ИИ

LLM-шаг отправляет промпт выбранному AI-провайдеру и сохраняет текстовый ответ в output шага.

  • ID шага — короткое имя, например query_plan, article_mode, final_article.
  • Провайдер — активное подключение из AI Providers.
  • Тип — текст, text batch, картинки, видео или музыка, если провайдер поддерживает такие возможности.
  • Модель — выбирается из списка моделей провайдера.
  • Рольuser или system.
  • Глобальный промпт — удобный выбор сохранённого prompt, который вставляется макросом.
  • Промпт — основной текст инструкции. В нём можно использовать переменные и результаты предыдущих шагов.
  • Переменные — кнопка возле поля промпта, которая вставляет доступные макросы.
  • Вставить блок кеша — оборачивает стабильную часть промпта в AIPANEL_CACHE, если выбранный провайдер поддерживает prompt caching.
  • Temperature — уровень вариативности ответа.
  • Max tokens — ограничение длины ответа.
  • Ожидание batch, секунд — появляется для text batch. Batch дешевле, но результат может прийти позже.

🔎 / 📰 / 🖼️ / 🎞️ Источники

Collector-шаги получают данные из поисковой выдачи, новостей, картинок, видео или по конкретным URL.

  • Поиск — web SERP: Google, Bing, Yandex, Yahoo.
  • Новости — новостная выдача.
  • Картинки — поиск изображений.
  • Видео — YouTube или Yandex video.
  • Статья по URL — загружает и извлекает контент страниц по списку URL.
  • HTML по URL — получает HTML страниц по списку URL.
  • Источник запроса — ключ, текст или переменная предыдущего шага, например {{keyword}} или {{step.query_plan.output}}.
  • Лимит результатов SERP — сколько результатов брать на запрос, от 1 до 100.

Выход поисковых collector-шагов — структурированный объект: results, related, total_items. У результатов есть query, rank, link, title, content, date, thumb.

🧪 Обработка / RegExp

Regexp-шаг извлекает или заменяет фрагменты текста.

  • Источник — строка или output предыдущего шага.
  • Паттерн — регулярное выражение.
  • Флаги — модификаторы регулярного выражения.
  • Извлечь первое совпадение — берёт первое найденное значение.
  • Извлечь все совпадения — возвращает список совпадений через перенос строки.
  • Заменить совпадения — выполняет замену по регулярке.

🧩 Преобразование

Transform-шаг чистит и подготавливает данные между collector и AI-шагами.

  • Удалить дубли строк, Объединить в одну строку, Обрезать по символам, Перемешать массив, Обрезать массив, Убрать HTML, Trim.
  • Извлечь из JSON — берёт нужный фрагмент из JSON.
  • Строку в массив и Массив в JSON — меняют формат данных для следующих шагов.
  • Создать RAG контекст — собирает компактный контекст из загруженных документов.

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

📝 Форма статьи

Финальный шаг для публикации. Он собирает данные из предыдущих шагов в структуру статьи.

  • Заголовок статьи — например {{step.title_extract.output}}.
  • Описание статьи — meta description или краткое описание.
  • Изображение — URL главного изображения или переменная из image-шагов.
  • Содержимое (Markdown) — готовый текст статьи.
  • Дополнительные поля — пары ключ/значение, которые уйдут в xfields_json.
Slug и язык обычно формируются при публикации. В задаче можно принудительно указать Язык / раздел URL, например en, pt, blog или reviews.

🔗 Переменные и макросы

Макросы связывают шаги между собой. Они подставляют ключевое слово, домен, доменный промпт, глобальные промпты и output предыдущих шагов.

  • {{keyword}} — текущее ключевое слово.
  • {{domain}} — домен сайта.
  • {{domain_aiprompt}} — системный промпт домена.
  • {{prompt:"prompt_name"}} — глобальный промпт из вкладки Prompts.
  • {{step.step_id.output}} — полный выход предыдущего шага.
  • {{step.images.1.link}}, {{step.search.output}} и похожие переменные — конкретные поля структурированных результатов, если они доступны.

Кнопка Переменные в редакторе шага показывает доступные макросы с учётом текущего шага и предыдущих результатов.

Если после изменения порядка выполнения шаг начинает ссылаться на будущий или удалённый шаг, шаблон получает статус Требует внимания. Исправьте макрос или порядок выполнения перед запуском задачи.

💰 Кеширование промптов (AIPANEL_CACHE)

Prompt caching - встроенный механизм провайдера, который позволяет кешировать статичную часть промпта. Последующие запросы с тем же статичным блоком берут его из кеша вместо повторной обработки - это снижает стоимость запроса.

Какие провайдеры поддерживают

  • Anthropic Claude - поддерживает, кэш действует на уровне API.
  • Google Gemini - поддерживает (implicit caching), включается автоматически.
  • OpenAI - поддерживает для моделей GPT-4o и выше.
  • Остальные провайдеры не используют кэширование, маркеры в промпте будут просто игнорироваться.

Когда это выгодно

Кеширование работает хорошо, если промпт содержит большой статичный блок: SEO-правила, стиль, структура статьи, запреты, формат ответа. Чем длиннее статичный блок и чем чаще запускается шаблон - тем выше экономия.

Как использовать

В редакторе LLM-шага есть кнопка Вставить блок кеша. Она оборачивает выделенную часть промпта в маркеры. Можно также вставить вручную:

<!-- AIPANEL_CACHE -->
Здесь - постоянные правила, которые не меняются от запроса к запросу:
- SEO-требования, стиль, структура, запреты, формат ответа
<!-- AIPANEL_CACHE_END -->

Keyword: {{keyword}}
Domain rules: {{domain_aiprompt}}
Research context: {{step.rag_context.output}}
Обязательное условие: статичный блок должен быть достаточно длинным. Claude требует от 1024 токенов в статичном блоке. Короткие промпты не кешируются даже с маркерами.

🧪 Тестирование шаблона

Перед рабочим запуском шаблон нужно протестировать прямо в окне Templates.

  1. Откройте шаблон.
  2. В блоке Тестирование пайплайна выберите домен. Это нужно для проверки {{domain}} и {{domain_aiprompt}}.
  3. Выберите набор ключевых слов или оставьте Ручной ввод.
  4. Выберите или введите тестовое ключевое слово.
  5. Нажмите Запустить тест.

Во время теста панель показывает прогресс по шагам. После выполнения можно открыть отладку шага и посмотреть входные данные, итоговый промпт, ответ провайдера, результат regexp/transform, RAG-контекст и финальную структуру статьи.

Тестовый запуск нужен не только для проверки текста. Он помогает увидеть, правильно ли подставились макросы, есть ли результаты поиска, загрузились ли URL, хватает ли модели токенов и корректно ли собрана форма статьи.

▶️ Tasks — запуск генерации и публикации

Задача связывает домен, шаблон и наборы ключевых слов. Для каждого ключа система выполняет pipeline и публикует результат на сайт через API клиента.

Создание задачи

  • Домен — сайт, куда публикуем.
  • Шаблон — pipeline генерации. Шаблоны со статусом Требует внимания нельзя запускать, пока не исправлены провайдеры или макросы.
  • Наборы ключевых слов — можно выбрать один или несколько. Если оставить пусто, задача запускается без ключей.
  • Режим публикации — сразу все, только N статей или отложенный режим.
  • Количество статей для публикации — используется в режиме лимита.
  • Количество статей / Период (часы) — используется в отложенном режиме.
  • Язык / раздел URL — принудительный сегмент URL, например en, pt, blog, reviews.
  • Пропускать использованные ключевые слова — защищает от повторной генерации по уже обработанным ключам.
  • Информировать Google и Информировать Bing — отправляет уведомления после успешной публикации.

Статистика и статусы

  • Всего, В работе, Завершено, Ошибок — общая статистика задач.
  • Слотов — доступные, занятые и свободные слоты выполнения.
  • Не хватает — сколько задач ждут свободных слотов.
  • Ожидает, В работе, Ждет batch, Завершено, Ошибка, Приостановлено, Отменено — основные состояния задачи.

Действия с задачей

  • Подробности — показывает прогресс, результат публикации, опубликованные URL, ошибки, поисковые уведомления и лог выполнения.
  • Редактировать — меняет параметры задачи.
  • Приостановить — останавливает дальнейшее выполнение.
  • Возобновить/перезапустить — продолжает или повторно запускает задачу, если есть свободный слот.
  • Отменить — отменяет выполнение.
  • Удалить задачу — удаляет задачу и связанные данные.

📝 Articles — ручная работа со статьями

Вкладка Articles нужна для просмотра и ручной правки материалов. Она полезна, если статью нужно создать без pipeline или проверить уже готовые записи.

  • Фильтр домена — показывает статьи конкретного сайта.
  • Фильтр статуса — draft, ready for review или published.
  • Обновить — перезагружает список.
  • Создать статью — открывает ручную форму статьи.

Поля статьи

  • Статус — черновик, готово к проверке или опубликовано.
  • Язык — например en, pt, ru.
  • Slug — URL-часть статьи.
  • Заголовок — H1/title статьи.
  • Описание — meta description или краткое описание.
  • Содержимое — Markdown-контент.
  • Главное изображение — загрузка файла, вставка URL или base64.
  • Дополнительные поля — произвольные поля, которые сохраняются в JSON.

🎨 .cms/temp — внешний шаблон сайта

Папка .cms/temp — это не pipeline-шаблон из вкладки Templates, а внешний шаблон сайта. Именно здесь настраивается то, как опубликованные статьи будут выглядеть для посетителя: шапка, меню, главная/листинг, карточки постов, страница статьи, сайдбар, футер, цвета, CSS, метрика и рекламные вставки.

Вкладка ⚙️ Templates в панели отвечает за генерацию контента. Папка .cms/temp на сайте отвечает за внешний вид опубликованного сайта. Это две разные части системы, и обе нужно настроить.

Главные файлы шаблона

  • temp/temp.php — основной HTML-шаблон сайта. В нём обычно настраиваются <head>, title/description, canonical, JSON-LD, шапка, меню, главный контейнер, вывод статьи, вывод сайдбара и футер.
  • temp/css/style.css — стили сайта: цвета, ширина контейнера, карточки, меню, типографика, адаптивность, кнопки, пагинация, сайдбар.
  • temp/short.php — маленькая карточка статьи для главной, языковых страниц, листингов и пагинации.
  • temp/sidebar.php — карточка похожей/случайной статьи в боковом блоке на странице публикации.
  • temp/metric.php — счётчики, аналитика, рекламные скрипты, пиксели и другие вставки перед закрытием </head> или внутри шаблона.
  • pages/ — статические страницы: about, contact, privacy, terms, cookies, disclaimer, legal. Их тоже нужно адаптировать под конкретный сайт.

Что обязательно поменять под свой сайт

  1. Откройте .cms/temp/temp.php.
  2. Замените название сайта, например $siteName, $defaultTitle и $siteTagline.
  3. Проверьте пункты меню: Home, Blog, About, Contact, Privacy, Terms. Уберите лишнее или добавьте нужные разделы.
  4. Проверьте тексты hero-блока на главной/листинге. Они должны соответствовать нише сайта, языку и аудитории.
  5. Проверьте футер: название проекта, описание, контакты, юридические ссылки.
  6. Откройте .cms/temp/css/style.css и настройте палитру в блоке :root: фон, основной цвет, акцент, ширина контейнера, радиусы, отступы.
  7. Откройте .cms/temp/metric.php и замените или удалите чужие счётчики, рекламные коды и пиксели. Нельзя оставлять чужой Google AdSense, Yandex.Metrika или другие чужие ID.
  8. Откройте файлы в .cms/pages/ и замените стандартные тексты на страницы конкретного проекта.

Какие данные доступны внутри шаблона

  • $row['title'] — заголовок текущей страницы или статьи.
  • $row['description'] — meta description или краткое описание.
  • $row['html_content'] — готовый HTML статьи или список карточек на главной/листинге.
  • $row['image_url'] — главное изображение статьи, если оно передано или найдено системой.
  • $row['date'] / $row['public_date'] — дата публикации, если она есть в записи.
  • $row['sidebar'] — HTML сайдбара со случайными/похожими статьями, если он был собран.
  • $posts — массив постов на главной, языковой странице или странице пагинации.
  • $post — один пост внутри short.php или sidebar.php.
  • $tophost, $hostname, $incpage, $currentLang, $pagePath — служебные переменные URL, домена, языка и текущей страницы.
Если меняете short.php или sidebar.php, помните: там используется переменная $post. Если меняете temp.php, основная переменная страницы — $row.

Как движок использует файлы temp

  1. Для главной страницы и страниц пагинации движок собирает список опубликованных материалов, каждый материал прогоняет через short.php, а затем выводит общий результат через temp.php.
  2. Для страницы статьи движок загружает статью, подготавливает $row['html_content'], собирает $row['sidebar'] через sidebar.php и затем подключает temp.php.
  3. Если в папке шаблона есть fullpage.php, он может использоваться для отдельных внутренних страниц вместо стандартного temp.php.
  4. metric.php обычно подключается из temp.php, поэтому все счётчики и рекламные скрипты удобно держать в одном отдельном файле.

Минимальный чек-лист перед публикацией

  • Открывается главная страница сайта.
  • Открывается статья по публичному URL.
  • Картинки не ломают верстку на телефоне.
  • Меню ведёт на существующие страницы.
  • В футере нет чужого бренда, чужих ссылок и тестового текста.
  • В metric.php нет чужих ID рекламных сетей и аналитики.
  • В исходном коде страницы есть нормальные title, meta description, canonical и, если нужно, JSON-LD.
  • Страницы privacy, terms, contact, about заполнены под конкретный сайт.

WordPress API — подключение моста

Для публикации на сайты под управлением WordPress используется специальный мост api.php. Панель отправляет публикации, проверяет уникальность URL, обновляет записи и загружает медиафайлы через этот файл.

Установка и настройка

  1. Скачайте файл плагина/моста: в шапке документации или в настройках домена выберите Скачать клиент WordPress (или перейдите по ссылке api.php, требуется авторизация).
  2. Скопируйте скачанный файл api.php в корневую директорию вашей установки WordPress (туда, где находится wp-load.php).
  3. Откройте файл wp-config.php вашего WordPress и добавьте секретный токен:
    define('AIPANEL_API_TOKEN', 'ваш-сложный-секретный-токен');
  4. В панели управления AIPanel при добавлении домена укажите:
    • API URL: https://yourdomain.com/api.php
    • API Token: тот же токен, который вы указали в wp-config.php

Возможности моста

  • Действия (actions): поддерживает проверку связи (ping), публикацию статьи (publish_post), редактирование (edit_post), удаление (delete_post) и проверку занятости slug (check_slug).
  • Поддержка SEO-плагинов: автоматически записывает SEO-заголовок и описание в мета-поля популярных плагинов Yoast SEO (_yoast_wpseo_title, _yoast_wpseo_metadesc) и Rank Math (rank_math_title, rank_math_description).
  • Категории и теги: поддерживает передачу массивов категорий и тегов в поле xfields_json (структура: {"categories": ["Категория 1", "Категория 2"], "tags": ["Тег 1", "Тег 2"]}). Если категорий или тегов нет на сайте, они будут созданы автоматически.
  • Типы записей (Custom Post Types): по умолчанию публикации создаются как стандартные посты (post). Вы можете переопределить это, передав тип записи в xfields_json (например, {"post_type": "product"} или {"post_type": "page"}).
  • Изображения: автоматически скачивает главное изображение по ссылке или декодирует base64-строку, создавая вложение в медиабиблиотеке WordPress и устанавливая его в качестве "Featured Image" (изображения записи).

📋 Примеры готовых JSON Pipeline

Здесь представлены готовые шаблоны pipeline в формате JSON, которые вы можете импортировать через кнопку Показать/скрыть JSON-редактор во вкладке ⚙️ Templates.

1. Простая SEO статья (Simple SEO Article)

Минимальный шаблон: отправляет промпт в ИИ, вырезает теги заголовка, описания и контента с помощью RegExp, а затем передает их в форму публикации.

[
  {
    "id": "draft_article",
    "type": "llm",
    "provider_id": 0,
    "ai_capability": "text",
    "model": "",
    "prompt_role": "user",
    "prompt_text": "Keyword: {{keyword}}\nDomain: {{domain}}\n\n{{domain_aiprompt}}\n\n\n{{prompt:\"seo_article_rules\"}}\n{{prompt:\"article_output_contract\"}}\n\nWrite a practical SEO article for the keyword. Vary the number of sections naturally; include FAQ only when it helps the topic.\n",
    "temperature": 0.4,
    "max_tokens": 4096,
    "output_key": "output"
  },
  {
    "id": "extract_title",
    "type": "regexp",
    "mode": "extract",
    "input_source": "{{step.draft_article.output}}",
    "pattern": "\\s*(.*?)\\s*",
    "flags": "si",
    "output_key": "output"
  },
  {
    "id": "extract_description",
    "type": "regexp",
    "mode": "extract",
    "input_source": "{{step.draft_article.output}}",
    "pattern": "\\s*(.*?)\\s*",
    "flags": "si",
    "output_key": "output"
  },
  {
    "id": "extract_content",
    "type": "regexp",
    "mode": "extract",
    "input_source": "{{step.draft_article.output}}",
    "pattern": "\\s*(.*?)\\s*",
    "flags": "si",
    "output_key": "output"
  },
  {
    "id": "article",
    "type": "article_form",
    "title": "{{step.extract_title.output}}",
    "description": "{{step.extract_description.output}}",
    "markdown": "{{step.extract_content.output}}",
    "lang": "{{domain_lang}}",
    "slug": "",
    "main_image": "",
    "xfields_json": "[]",
    "public": 1
  }
]

2. Расширение ключевых слов (Keyword Expansion)

Шаблон типа "Keywords" для генерации связанных тем на основе одного главного ключа.

[
  {
    "id": "expand_keywords",
    "type": "llm",
    "provider_id": 0,
    "ai_capability": "text",
    "model": "",
    "prompt_role": "user",
    "prompt_text": "Seed keyword: {{keyword}}\nDomain: {{domain}}\n\n{{domain_aiprompt}}\n\n\nGenerate 20 useful long-tail keyword ideas for content planning. Keep them specific, natural, and suitable for article topics.\nReturn one keyword per line, no numbering, no commentary.\n",
    "temperature": 0.35,
    "max_tokens": 2048,
    "output_key": "output"
  },
  {
    "id": "keywords",
    "type": "transform",
    "operation": "split_to_array",
    "arg1": "{{step.expand_keywords.output}}",
    "delimiter": "\n",
    "array_limit": 20,
    "output_key": "output"
  }
]

3. Обзорный Affiliate-шаблон с поиском и RAG (Advanced)

Сложный шаблон для написания обзоров товаров и сервисов: делает запросы в Google, скачивает контент страниц, строит контекст (RAG) и отдает на вход ИИ.

[
  {
    "id": "affiliate_queries",
    "type": "llm",
    "provider_id": 0,
    "ai_capability": "text_batch",
    "model": "",
    "prompt_role": "user",
    "prompt_text": "Affiliate review idea: {{keyword}}\nDomain: {{domain}}\n\n{{domain_aiprompt}}\n\n\nGenerate 5 focused web search queries that support an affiliate review. Return one query per line only.\n",
    "temperature": 0.2,
    "max_tokens": 1024,
    "output_key": "output"
  },
  {
    "id": "affiliate_split_queries",
    "type": "transform",
    "operation": "split_to_array",
    "arg1": "{{step.affiliate_queries.output}}",
    "delimiter": "\n",
    "array_limit": 5,
    "output_key": "output"
  },
  {
    "id": "affiliate_search",
    "type": "collector",
    "channel": "web",
    "engine": "google",
    "query_source": "{{step.affiliate_split_queries.output}}",
    "serp_limit": 5,
    "output_key": "output",
    "concurrency": 6
  },
  {
    "id": "affiliate_slice_search_results",
    "type": "transform",
    "operation": "slice_array",
    "arg1": "{{step.affiliate_search.output}}",
    "array_limit": 3,
    "output_key": "output"
  },
  {
    "id": "affiliate_html",
    "type": "collector",
    "channel": "html_fetch",
    "engine": "html_fetch",
    "query_source": "{{step.affiliate_slice_search_results.output}}",
    "output_key": "output"
  },
  {
    "id": "affiliate_rag",
    "type": "transform",
    "operation": "rag_builder",
    "arg1": "{{step.affiliate_html.output}}",
    "array_limit": 5,
    "output_key": "output",
    "max_total_chars": 16000,
    "max_sources": 10,
    "chunk_size": 900,
    "chunk_overlap": 80
  },
  {
    "id": "affiliate_generate",
    "type": "llm",
    "provider_id": 0,
    "model": "",
    "prompt_role": "user",
    "prompt_text": "Keyword: {{keyword}}\nDomain: {{domain}}\nResearch context:\n{{step.affiliate_rag.output}}\n\n{{domain_aiprompt}}\n\nWrite a practical affiliate review. Format output inside tags:\n<TITLE>[title]</TITLE>\n<DESCRIPTION>[description]</DESCRIPTION>\n<CONTENT>[content]</CONTENT>",
    "temperature": 0.45,
    "max_tokens": 6144,
    "output_key": "output"
  },
  {
    "id": "affiliate_extract_title",
    "type": "regexp",
    "mode": "extract",
    "input_source": "{{step.affiliate_generate.output}}",
    "pattern": "\\s*(.*?)\\s*",
    "flags": "si",
    "output_key": "output"
  },
  {
    "id": "affiliate_extract_description",
    "type": "regexp",
    "mode": "extract",
    "input_source": "{{step.affiliate_generate.output}}",
    "pattern": "\\s*(.*?)\\s*",
    "flags": "si",
    "output_key": "output"
  },
  {
    "id": "affiliate_extract_content",
    "type": "regexp",
    "mode": "extract",
    "input_source": "{{step.affiliate_generate.output}}",
    "pattern": "\\s*(.*?)\\s*",
    "flags": "si",
    "output_key": "output"
  },
  {
    "id": "affiliate_article",
    "type": "article_form",
    "title": "{{step.affiliate_extract_title.output}}",
    "description": "{{step.affiliate_extract_description.output}}",
    "markdown": "{{step.affiliate_extract_content.output}}",
    "lang": "{{domain_lang}}",
    "slug": "",
    "main_image": "",
    "xfields_json": "[]",
    "public": 1
  }
]

🛠️ Если что-то не работает

  • Сайт не принимает публикацию — проверьте API URL, токен в classes/integration.php, rewrite и доступность api.php.
  • auth_failed — токен в панели не совпадает с токеном на сайте.
  • Модель не видна в LLM-шаге — откройте провайдера, загрузите список моделей кнопкой 🔄 или вставьте модели вручную.
  • Шаблон требует внимания — в одном из AI-шагов нет провайдера, выбран удалённый провайдер или макрос ссылается на будущий/удалённый шаг.
  • Поиск вернул 0 результатов — проверьте запрос, поисковый backend, лимит SERP и доступность прокси/источника.
  • Статья по URL не загрузилась — проверьте, что предыдущий шаг действительно отдаёт URL, а не обычный текст без ссылок.
  • RAG пустой — убедитесь, что шаг загрузки статей возвращает документы с HTML-контентом.
  • Batch завис или завершился ошибкой ожидания — увеличьте время ожидания batch или используйте обычный текстовый режим.
  • Публикация прошла, но URL странный — проверьте поле Язык / раздел URL, slug, заголовок и правила генерации slug на стороне клиента.
Начинайте диагностику с Подробности задачи и отладки шагов. Там видно, на каком шаге pipeline остановился, какой вход получил шаг и какой output он вернул.