Для тех, кто пишет код с ИИ

Пусть ваш ИИ-ассистент подключит сайт сам

Скопируйте задание в Claude Code, Cursor, Codex или другого ассистента, который уже работает в вашем проекте. Он добавит приём статей по правилам вашей кодовой базы — с вашим фреймворком, маршрутизацией и моделью публикаций. В задании только контракт интеграции: секреты и внутренние детали сервиса ассистенту не нужны.

Публикация на произвольный сайт входит в тарифы от Starter.

27
шагов в лонгрид-пайплайне
~5 мин
на стандартную статью
8 000+
слов в лонгрид-режиме
4
соцсети автоматически
Схема: SEO Writer отправляет готовую статью POST-запросом на обработчик вашего сайта

Как это работает

1

Получите ключ

Добавьте сайт с платформой «Любой сайт» и скопируйте выданный ключ. В задание для ассистента он не попадает: ключ кладётся в переменные окружения проекта, и ассистент читает его оттуда.

2

Дайте ассистенту задание

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

3

Проверьте, что получилось

Нажмите «Проверить подключение», затем «Отправить пробную статью» — она не тратит лимит. Если ассистент ушёл не туда, второе задание вернёт его в существующую архитектуру.

Обработчик для Claude Code · Cursor · Codex

Основное задание. Ассистент добавит эндпоинт, проверку подписи и сохранение статьи в вашу модель публикаций. Обратите внимание на блок ограничений в конце: он не даёт ассистенту «упростить» безопасность, а это первое, что такие инструменты предлагают сделать.

Задание 1. Приём статей
В моём проекте нужен серверный обработчик вебхука от сервиса SEO Writer.

Добавь POST-эндпоинт по адресу /api/seowriter, используя текущий стек проекта, его роутинг и ORM.
Не создавай отдельный микросервис, если в проекте уже есть серверная часть.

Запрос приходит с заголовками:
  X-SEOWriter-Event: article.published | article.updated | ping
  X-SEOWriter-Timestamp: unix-время в секундах
  X-SEOWriter-Signature: v1=<hex>[,v1=<hex>]
  X-SEOWriter-Delivery: идентификатор доставки, одинаковый на всех повторах

Тело запроса — JSON вида:
{ "event": "article.published",
  "article": { "id": "uuid", "status": "draft|publish", "title": "...", "h1": "...", "slug": "...",
               "content_html": "...", "excerpt": "...", "meta": {"title": "...", "description": "..."},
               "cover": {"url": "...", "alt": "..."}, "images": [{"url": "...", "alt": "..."}],
               "faq": [{"question": "...", "answer": "..."}], "json_ld": [...] } }

Реализуй по шагам:
1. Прочитай тело как сырые байты или текст ДО разбора JSON.
2. Посчитай HMAC-SHA256 от строки "{timestamp}.{сырое тело}" с ключом из переменной окружения SEOWRITER_SECRET.
3. Заголовок подписи может содержать несколько значений v1= через запятую — проверь КАЖДОЕ, любое совпадение считается верным. Сравнивай безопасным сравнением, не обычным равенством.
4. Отклони запрос кодом 401, если подпись не сошлась или если время отличается от текущего больше чем на 300 секунд.
5. На событие ping ответь 200 и JSON {"success": true}.
6. На article.published и article.updated сохрани статью в существующую модель публикаций проекта, обновляя запись по article.id — повторная доставка не должна создавать дубль. Для тела страницы используй content_html как готовый HTML.
7. Ответь 200 и JSON {"ok": true, "url": "<адрес опубликованной статьи>"} — адрес нужен сервису для внутренней перелинковки.
8. Отвечай быстро: тяжёлую обработку выноси в фоновую задачу.

Ограничения:
- не хардкодь секрет, читай его из переменной окружения;
- не отключай проверку подписи даже временно;
- не отвечай переадресацией;
- принимай только POST.

В конце скажи, какой полный адрес эндпоинта получится после деплоя и куда добавить SEOWRITER_SECRET.

Ассистенты любят изобретать: заводят свою модель, отдельную админку, иногда целый второй блог. Этот текст возвращает их в существующую архитектуру и заодно требует перепроверить, что проверки безопасности не ослабли при переделке.

Задание 2. Если ассистент пошёл не туда
Не изобретай новую архитектуру. Встрой обработчик в существующую систему публикаций проекта.

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

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

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

И отдельно проверь, что при переделке ты не ослабил проверки: подпись по-прежнему проверяется, сравнение безопасное, время запроса контролируется, метод только POST.

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

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

Правила:
1. Используй текущую архитектуру: тот же бэкенд, маршрутизацию, ORM или контентную папку.
2. Не создавай второй блог и параллельный раздел, если список статей в проекте уже есть.
3. Найди, как сейчас формируется страница списка публикаций: /blog, /articles, /news или другой существующий маршрут.
4. После приёма события article.published статья должна попасть в этот список и открываться по своему адресу.
5. Используй существующие шаблоны, стили и карточки — не добавляй собственную вёрстку, если в проекте уже есть оформление списка.
6. Если страницы собираются заранее, запусти пересборку или сброс кэша после сохранения, чтобы статья появилась без ручного деплоя.
7. Для тела страницы бери content_html как готовый HTML, для превью — excerpt, для картинки карточки — cover.url.
8. Верни в ответе полный адрес опубликованной страницы в поле url.

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

Что приходит в каждой статье

Не только HTML: всё, что нужно странице, приходит отдельными полями — разбирать текст регулярками не придётся.

article.idПостоянный идентификатор статьи. Обновляйте запись по нему — тогда повторная доставка не создаст дубль
article.statusdraft или publish — публиковать сразу или оставить черновиком
article.title, h1, slugЗаголовок, H1 и ЧПУ статьи
article.content_htmlГотовый HTML статьи вместе с микроразметкой внутри
article.metaМета-заголовок и описание для тега title и meta description
article.coverОбложка: адрес, alt и признак того, постоянная ли ссылка
article.imagesКартинки из текста. У каждой помечено, лежит она у нас или на стороннем сервисе
article.faqВопросы и ответы — если рисуете свой блок FAQ, не разбирая HTML
article.json_ldБлоки микроразметки Schema.org отдельными объектами
article.categoryКатегория, если она задана в настройках сайта

Кому подходит доставка вебхуком

🧑‍💻

Разработчикам своих проектов

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

🏢

Агентствам с разношёрстными клиентами

У одного клиента WordPress, у другого самописная админка, у третьего Next.js. Вебхук снимает вопрос «а поддерживаете ли вы такую CMS»: подходит любая, и все клиентские сайты ведутся из одного кабинета.

Headless-проектам и статике

Контент лежит в своей базе или в headless-CMS, а страницы собираются на деплое. Обработчик сохраняет статью и запускает пересборку — публикация появляется без ручного коммита.

Вручную и через вебхук

Статью всегда можно перенести руками — вопрос в том, сколько это стоит времени на дистанции.

ВручнуюЧерез вебхук
Перенос статьи на сайтКопирование текста, картинок и мета-тегов рукамиПриходит готовым за секунды после генерации
Время на одну статью20–30 минут на перенос и вёрсткуНоль: человек не участвует
Картинки и обложкаСкачать, загрузить, проставить altПриходят ссылками, обложка отдельным полем
Микроразметка и FAQСобирать вручную или забытьГотовые блоки Schema.org отдельными полями
Публикация по расписаниюНужен человек в нужный часИдёт сама, хоть ночью
Если сайт лежалСтатья ждёт, пока про неё вспомнятШесть повторов за восемь часов и журнал доставок

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

  • Каждый запрос подписан ключом, который знаете только вы и мы.
  • Время подписи не даёт переиграть перехваченный запрос: всё старше пяти минут отвергается.
  • Отправляем только по https и не идём по переадресациям.
  • Ключ можно перевыпустить: сутки после этого запросы подписаны старым и новым сразу, чтобы обработчик успел обновиться.

Частые вопросы

Не опасно ли давать задание ИИ?

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

Что чаще всего делает ассистент неправильно?

Три вещи. Первая: разбирает тело запроса и собирает обратно перед проверкой подписи — тогда подпись не сойдётся никогда. Вторая: сравнивает подписи обычным равенством вместо безопасного сравнения. Третья: заводит собственную модель статей вместо существующей и получается второй блог рядом с настоящим. Всё это закрыто в заданиях, но результат стоит просмотреть.

Какие ассистенты подходят?

Любой, который работает прямо в кодовой базе и умеет править файлы: Claude Code, Cursor, Codex, Windsurf, Copilot в режиме агента. Задание написано без привязки к конкретному инструменту — важно лишь, чтобы ассистент видел ваш проект.

А если я не программист?

Тогда проще взять готовый файл обработчика под свой стек — их четыре, и они не требуют правок, кроме вставки ключа. Сценарий с ассистентом рассчитан на тех, у кого проект уже открыт в редакторе с ИИ.

Что говорят пользователи

Реальные результаты от реальных людей

Раньше платил 3–4 копирайтерам по 1 500 ₽ за статью и тратил по 2 дня на согласование. Сейчас загружаю 20 ключей в воскресенье — в понедельник все статьи уже в WordPress. Органический трафик вырос на 40% за три месяца.

АК
Алексей К.
Владелец нишевого блога об электронике

Ведём 12 клиентских сайтов. Раньше контент был узким местом — теперь нет. SEO Writer генерирует тексты с правильной структурой H1/H2/H3, заполняет Yoast и внутренние ссылки. Клиенты довольны, мы успеваем брать новых.

МД
Марина Д.
SEO-специалист, digital-агентство

Нам нужны были обзорные статьи под каждую категорию товаров. С SEO Writer закрыли 60 запросов за один месяц — с картинками, ссылками на карточки товаров и мета-описаниями. Такой объём с копирайтерами обошёлся бы в 90 000 ₽.

ДГ
Дмитрий Г.
Интернет-магазин электроники

Тарифы

Начните бесплатно, масштабируйтесь по мере роста

Free

0₽/мес

  • 3 статей в месяц
  • 1 сайт
  • Системные API ключи
  • Подбор тем: 1 в месяц
Начать бесплатно

Starter

1 290₽/мес

  • 15 статей в месяц
  • 2 сайта
  • Системные API ключи
  • Подбор тем: 4 в месяц
  • Свои API ключи
  • Планировщик
  • Рерайт для сторонних площадок
Подключить
Популярный

Pro

2 990₽/мес

  • 50 статей в месяц
  • 5 сайтов
  • Системные API ключи
  • Подбор тем: 10 в месяц
  • Свои API ключи
  • Планировщик
  • Рерайт для сторонних площадок
  • Генерация обложек
Подключить

Agency

9 990₽/мес

  • 150 статей в месяц
  • 20 сайтов
  • Системные API ключи
  • Подбор тем: 30 в месяц
  • Свои API ключи
  • Планировщик
  • Рерайт для сторонних площадок
  • Генерация обложек
  • API доступ (скоро)
  • Приоритетная поддержка
Подключить

Оплата через ЮKassa · Карты, СБП, ЮMoney · Без автопродления · 30 дней доступа

Смотрите также

А если у вас популярная CMS

Для этих платформ обработчик писать не нужно — подключение занимает пару минут по логину и паролю.

Ваш сайт начнёт наполняться сам

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

Создать аккаунт бесплатно →