Навіщо взагалі автоматизувати публікацію

За даними Orbit Media за 2025 рік, 95% блогерів уже використовують AI хоча б іноді при створенні контенту. Це не мода — це відповідь на реальну проблему: створення однієї статті від ідеї до публікації вимагає 3–5 годин ручної роботи.

Я веду блог уже кілька років і знаю це на собі. Бували тижні, коли замість двох запланованих статей виходила одна, а іноді — жодної. Ланцюжок «вигадав → написав → оформив → опублікував» просто занадто довгий.

Автоматизація через n8n вирішує саме це. Я не замінюю себе роботом — я прибираю рутину. Тему вигадую сам, а чернетку, структуру та публікацію робить workflow.

Платформа n8n у березні 2025 залучила €55 млн інвестицій серії B за оцінки ~€250 млн. Понад 3 000 корпоративних клієнтів (Vodafone, Microsoft) будують на ній автоматизації. І найголовніше — n8n можна розгорнути безкоштовно на власному сервері.

Що ми будемо будувати

Ідея проста: Telegram-бот приймає тему, n8n запускає ланцюжок генерації та публікації.

💬
Telegram
Trigger
🔐
IF
Chat ID
🤖
OpenAI
Content+SEO
📝
Code
Parse JSON
🎨
DALL-E
Cover
📤
WP Media
Upload
🌐
WordPress
Post+SEO
📨
Telegram
Confirm

Що робить система:

  • Приймає тему статті з Telegram
  • Перевіряє chat_id (захист від сторонніх)
  • Генерує пост через OpenAI з повним SEO-пакетом: title, slug, meta description, keywords, excerpt, alt-опис для зображення
  • Генерує cover-зображення через DALL-E з промптом на основі теми
  • Завантажує зображення у WordPress Media Library з alt/title атрибутами
  • Публікує статтю з заповненням усіх SEO-полів (Yoast/RankMath) та прикріпленим featured image
  • Надсилає підтвердження з посиланням у Telegram
Що знадобиться

n8n (self-hosted або cloud), Telegram-акаунт, OpenAI API key (або Claude/Gemini), WordPress-сайт з REST API. ~30 хвилин на все. Якщо ще немає n8n — зверніться до нашого гайду з установки на VPS.

Створюємо бота через BotFather

Відкриваємо Telegram, знаходимо @BotFather та виконуємо послідовність команд:

# 1. Створюємо нового бота /newbot # 2. Вводимо ім'я (видиме для клієнтів) → Мій Автопостинг # 3. Вводимо username (закінчується на bot) → my_autopost_bot # 4. Отримуємо API Token → 7123456789:AAHdqTcv... # Зберігаємо token — він знадобиться в n8n
Важливо: безпека токена

Ніколи не публікуйте токен бота у відкритому доступі. Будь-хто з вашим токеном може керувати ботом. Тримайте його тільки в credentials n8n.

Підключаємо Telegram Trigger у n8n

Відкриваємо n8n, створюємо новий workflow. Далі:

  • Додаємо ноду «Telegram Trigger» і обираємо тригер «On Message»
  • В полі «Credential to connect with» натисніть «Create New» → вставте API Token від BotFather → збережіть
  • Додаємо ноду «IF» з перевіркою chat_id — щоб тільки ви могли запускати генерацію

Конфігурація IF-ноди для перевірки chat_id:

Value 1: {{ $json.message.chat.id }} Operation: Equal Value 2: ВАШ_CHAT_ID // Дізнатися свій chat_id: надішліть боту повідомлення, // подивіться результат Telegram Trigger → message.chat.id

Тепер при кожному повідомленні боту n8n отримає дані, включаючи текст повідомлення та chat_id відправника.

Генерація контенту з повним SEO-пакетом

AI-нода — серце всього workflow. Тепер ми просимо OpenAI повернути не лише статтю, а й повний SEO-пакет: мета-заголовок, мета-опис, ключові слова, slug, коротке описання (excerpt) та промпт для генерації cover-зображення з alt-описом.

Модель Нода в n8n Ціна Коли обрати
GPT-4o-mini OpenAI Chat Model $0.15/1M input Найкращий баланс ціна/якість
GPT-4o OpenAI Chat Model $2.50/1M input Складні теми, високий reasoning
Claude 3.5 Sonnet Anthropic Chat Model $3/1M input Довгий контекст, гарні інструкції
Gemini Flash Google Gemini Chat Model Безкоштовно (ліміт) Тестування, мінімальний бюджет

System Prompt — інструкція, що визначає стиль і формат:

Ти — досвідчений SEO-копірайтер та спеціаліст з on-page SEO. Пишеш статті для WordPress-блогу українською мовою. ПРАВИЛА: - Пиши в інформативному, але живому стилі - Використовуй підзаголовки H2 та H3 - Не використовуй кліше ("у сучасному світі", "в епоху цифровізації") - Кожен абзац — 3-4 речення максимум - Додавай практичні поради - Генеруй повний SEO-пакет для кожної статті - Генеруй промпт для cover-зображення (DALL-E) - Усі SEO-поля мають бути оптимізованими під ключове слово

User Prompt — розширений з вимогами до SEO-полів:

Напиши статтю для блогу на тему: {{ $json.message.text }} Вимоги до контенту: - Унікальний заголовок (H1), оптимізований під SEO - 5-7 підзаголовків H2 - 1500-2000 слів - HTML-форматування (<h2>, <h3>, <p>, <ul>, <strong>) Вимоги до SEO-полів: - seo_title: мета-заголовок для тегу <title> (50-60 символів) - meta_description: мета-опис (140-160 символів) - focus_keyword: головне ключове слово - keywords: масив з 5-8 ключових слів та фраз - slug: URL-slug латиницею (через дефіс, без спецсимволів) - excerpt: короткий опис для стрічки блогу (2-3 речення, до 300 символів) Вимоги до зображення: - image_prompt: промпт для DALL-E англійською мовою (описуй стиль, кольори, композицію; без тексту на картинці) - image_alt: alt-опис зображення українською (5-10 слів, включає ключове слово) - image_title: title атрибут для зображення українською Відповідь строго в JSON без маркдаун-обгортки: { "title": "Заголовок статті (H1)", "seo_title": "SEO Title для <title> (50-60 символів)", "content": "HTML-контент статті", "meta_description": "Мета-опис 140-160 символів", "focus_keyword": "головне ключове слово", "keywords": ["ключ1", "ключ2", "ключ3", ...], "slug": "url-slug-latynytseiu", "excerpt": "Короткий опис для стрічки блогу", "image_prompt": "DALL-E prompt in English...", "image_alt": "alt-опис зображення українською", "image_title": "Заголовок зображення" }
Чому всі SEO-поля в одному промпті?

Один виклик API замість п'яти — дешевше, швидше й консистентніше. AI бачить весь контекст: ключове слово вписується і в title, і в meta_description, і в alt зображення. Окремі запити для кожного поля дали б розрізнені результати.

Яке SEO-поле для чого потрібне

Поле Де відображається Плагін WP Вплив на SEO
seo_title Вкладка браузера, результати Google Yoast / RankMath Критичний
meta_description Опис під заголовком у Google Yoast / RankMath Критичний
focus_keyword Аналіз SEO в адмінці WP Yoast / RankMath Високий
keywords Теги статті + мета keywords WordPress tags Середній
slug URL статті: /blog/slug/ WordPress core Критичний
excerpt Стрічка блогу, RSS, соцмережі WordPress core Середній
image_alt Alt текст зображення (Google Images) WordPress core Критичний
image_title Title при наведенні + Media Library WordPress core Низький

Генерація cover-зображення через DALL-E

Після того як OpenAI повернув JSON з полем image_prompt, ми передаємо його в DALL-E для генерації обкладинки. Додаємо ноду HTTP Request:

Method: POST URL: https://api.openai.com/v1/images/generations Headers: Authorization: Bearer {{ $credentials.openAiApi.apiKey }} Content-Type: application/json Body (JSON): { "model": "dall-e-3", "prompt": {{ $json.image_prompt }}, "n": 1, "size": "1792x1024", "quality": "standard" }
Альтернативи DALL-E

Замість DALL-E можна підключити Flux (через piapi.ai або Replicate), Stable Diffusion (через Stability AI) або Midjourney (через неофіційний API). Формат запиту буде відрізнятись, але логіка та сама: промпт → URL зображення → завантаження у WP. DALL-E 3 коштує ~$0.04 за зображення 1792×1024.

Далі додаємо другу HTTP Request ноду, щоб завантажити зображення у WordPress Media Library з усіма атрибутами. Це виконується у два кроки — спочатку завантаження файлу, потім оновлення alt/title/caption:

// Крок 1: Завантажуємо файл з URL (DALL-E повертає тимчасовий URL) Method: POST URL: https://your-site.com/wp-json/wp/v2/media Headers: Authorization: Basic {{ base64(user:app_password) }} Content-Disposition: attachment; filename="{{ $json.slug }}.png" Content-Type: image/png // Крок 2: Оновлюємо alt, title, caption через другий запит Method: POST URL: https://your-site.com/wp-json/wp/v2/media/{{ $json.media_id }} Body (JSON): { "alt_text": {{ $json.image_alt }}, "title": { "raw": {{ $json.image_title }} }, "caption": { "raw": {{ $json.image_alt }} }, "description": { "raw": {{ $json.image_title }} } }
Важливо: alt-текст та SEO зображень

Google Images — друге за розміром джерело трафіку після основного пошуку. Alt-текст із ключовим словом критично важливий: він допомагає Google зрозуміти, що на зображенні, і ранжувати його в пошуку зображень. Назва файлу slug.png замість image_12345.png — теж SEO-сигнал.

Публікація у WordPress з SEO

Тепер зводимо все до купи: парсимо розширений JSON, завантажуємо зображення та створюємо пост із заповненням усіх SEO-полів.

Code Node: парсинг розширеного JSON

Створюємо JavaScript-ноду, яка чистить markdown-обгортки та парсить JSON у зручну структуру:

// Витягуємо текст відповіді const response = items[0].json.message.content; // Прибираємо markdown-обгортки const clean = response.replace(/```json\n?|```\n?/g, '').trim(); // Парсимо JSON const parsed = JSON.parse(clean); return [{ json: { // Контент title: parsed.title, content: parsed.content, // SEO-поля seo_title: parsed.seo_title, meta_description: parsed.meta_description, focus_keyword: parsed.focus_keyword, keywords: parsed.keywords, slug: parsed.slug, excerpt: parsed.excerpt, // Зображення image_prompt: parsed.image_prompt, image_alt: parsed.image_alt, image_title: parsed.image_title } }];

WordPress: створення посту з SEO-полями

Замість стандартної ноди WordPress використовуємо HTTP Request — вона дає доступ до всіх полів REST API, включаючи мета-поля SEO-плагінів:

Method: POST URL: https://your-site.com/wp-json/wp/v2/posts Headers: Authorization: Basic {{ base64(user:app_password) }} Content-Type: application/json Body (JSON): { // Основні поля WordPress "title": {{ $json.title }}, "content": {{ $json.content }}, "excerpt": {{ $json.excerpt }}, "slug": {{ $json.slug }}, "status": "draft", "featured_media": {{ $json.media_id }}, "tags": {{ $json.tag_ids }}, // SEO-поля Yoast SEO (плагін) "yoast_head_json": { "title": {{ $json.seo_title }}, "description": {{ $json.meta_description }} }, "meta": { "_yoast_wpseo_title": {{ $json.seo_title }}, "_yoast_wpseo_metadesc": {{ $json.meta_description }}, "_yoast_wpseo_focuskw": {{ $json.focus_keyword }} } }
Yoast vs RankMath: які мета-ключі використовувати

Якщо у вас Yoast SEO: мета-ключі _yoast_wpseo_title, _yoast_wpseo_metadesc, _yoast_wpseo_focuskw. Якщо у вас RankMath: rank_math_title, rank_math_description, rank_math_focus_keyword. Якщо у вас SEOPress: _seopress_titles_title, _seopress_titles_desc. Перевірте свій плагін і замініть відповідні ключі в body запиту.

Теги: як перетворити keywords на tag_ids

WordPress REST API приймає теги за ID, а не за назвою. Тому між парсингом JSON та створенням посту потрібна ще одна Code Node, яка створює теги через API або знаходить існуючі:

const keywords = items[0].json.keywords; const baseUrl = 'https://your-site.com/wp-json/wp/v2/tags'; const auth = 'Basic ' + btoa('user:app_password'); const tagIds = []; for (const keyword of keywords) { // Шукаємо існуючий тег let res = await fetch( `${baseUrl}?search=${encodeURIComponent(keyword)}`, { headers: { Authorization: auth } } ); let tags = await res.json(); if (tags.length > 0) { tagIds.push(tags[0].id); } else { // Створюємо новий тег res = await fetch(baseUrl, { method: 'POST', headers: { Authorization: auth, 'Content-Type': 'application/json' }, body: JSON.stringify({ name: keyword }) }); const newTag = await res.json(); tagIds.push(newTag.id); } } return [{ json: { ...items[0].json, tag_ids: tagIds } }];

Останню ноду — Telegram Send Message — підключаємо для підтвердження публікації:

✅ Статтю створено! 📝 {{ $json.title }} 🔗 {{ $json.link }} 🏷️ {{ $json.focus_keyword }} 🖼️ Cover image: завантажено ✓ SEO: title ✓ | meta ✓ | keywords ✓ | alt ✓ Статус: чернетка — перевірте та опублікуйте.
Повна схема даних, які заповнюються автоматично

Після виконання workflow у WordPress автоматично заповнюються: заголовок (H1), slug (URL), контент (HTML), excerpt (короткий опис), featured image з alt/title/caption, теги, SEO title (Yoast/RankMath), meta description, focus keyword. Руками залишається тільки натиснути «Опублікувати» — або змінити status на publish в запиті.

Тестуємо та запускаємо

Перед запуском протестуйте кожен сценарій:

  • /start або тестова тема → бот запускає workflow
  • OpenAI повертає валідний JSON із усіма полями: title, seo_title, content, meta_description, focus_keyword, keywords, slug, excerpt, image_prompt, image_alt, image_title
  • Code Node коректно парсить всі поля
  • DALL-E генерує зображення за промптом (перевірте URL у Executions)
  • Зображення завантажується у WP Media Library з правильними alt, title, caption
  • WordPress створює пост із заповненим slug, excerpt, featured_media, tags
  • SEO-поля заповнені в Yoast/RankMath: seo_title, meta_description, focus_keyword
  • Telegram надсилає сповіщення з правильним посиланням та SEO-статусом
  • IF-нода блокує повідомлення від чужих chat_id

Якщо все працює — натисніть «Active» у верхньому правому куті workflow. Бот тепер працює 24/7.

Помилки при запуску

Найчастіші: webhook не реєструється (n8n не має HTTPS), AI повертає markdown замість JSON (додайте .replace у Code Node), 401 від WordPress (використовуйте Application Password). Всі помилки видно у вкладці «Executions» n8n.

Розширення: просунуті фішки

Open Graph і Twitter Cards

Додайте в мета-поля ще _yoast_wpseo_opengraph-title, _yoast_wpseo_opengraph-description та _yoast_wpseo_twitter-title. Коли хтось поділиться статтею у соцмережах — відображатиметься ваш оптимізований заголовок і опис, а не випадковий шматок тексту.

Автоматичні внутрішні посилання

Додайте ще одну OpenAI-ноду після генерації контенту: передайте їй список існуючих статей блогу (через WordPress REST API /wp-json/wp/v2/posts?per_page=50) і попросіть вставити 2–3 релевантних внутрішніх посилання у текст. Це покращує internal linking — один з ключових факторів SEO.

Модерація через Telegram

Замість автоматичної публікації — надішліть прев'ю з inline-кнопками «Опублікувати» / «Відхилити». Окремий workflow оновлює статус на publish. Контроль без зайвих кліків.

Автономний режим

Замініть Telegram Trigger на Schedule Trigger (cron) та беріть теми з Google Sheets або Airtable. Система публікуватиме за розкладом — повністю без вашої участі.

Мультиканальність

Той самий контент → паралельна публікація у WordPress + Telegram-канал + соцмережі. Використовуйте excerpt як текст для Telegram-каналу, а meta_description — для соцмереж.

Розширення Додаткові ноди Складність
Open Graph / Twitter Cards Додаткові мета-поля в HTTP Request Легко
Внутрішні посилання HTTP Request (WP posts) + OpenAI Середня
Модерація (inline buttons) Telegram Wait + IF + WordPress Update Середня
Автономний розклад Schedule Trigger + Google Sheets Легко
Мультиканал (TG + соцмережі) Telegram Send + HTTP Request Середня

Типові помилки та їх вирішення

Проблема Симптом Рішення
Markdown замість JSON Code Node: SyntaxError .replace(/```json\n?|```\n?/g, '') перед парсингом
401 від WordPress rest_cannot_create Application Password замість звичайного
Бот доступний усім Сторонні генерують пости IF-нода з перевіркою chat_id
Без форматування Текст одним блоком У промпті вимагайте HTML (<h2>, <p>)
Workflow не запускається Trigger неактивний Кнопка «Active» у правому верхньому куті
Обрізаний JSON Неповна відповідь AI Збільшити max_tokens до 4000+
Cloudflare блокує 403 від WordPress IP n8n-сервера у whitelist Cloudflare
DALL-E повертає помилку content_policy_violation Додати в промпт: "no text, no logos, no copyrighted content"
SEO-поля порожні Yoast/RankMath не показує дані Перевірте мета-ключі: _yoast_wpseo_* або rank_math_*
Alt не зберігається Зображення без alt у Media Library Оновлюйте media окремим POST запитом після завантаження
Теги не створюються 403 при POST /wp/v2/tags Роль користувача має бути Editor або вище

Часті питання

Чи можна використовувати n8n безкоштовно для автопостингу?

Так, n8n — fair-code платформа. Self-hosted через Docker — безкоштовно. VPS за $15–25/міс замінює Zapier за $500+/міс. Єдина платна частина — API OpenAI (~$0.001 за статтю на gpt-4o-mini). Хмарна версія n8n.io також має безкоштовний тариф.

Яку AI-модель обрати для генерації статей?

Для типових блог-постів — gpt-4o-mini (~$0.001/стаття, стабільна якість). Для складніших — gpt-4o або Claude. n8n має вбудовані ноди для OpenAI, Anthropic, Gemini та DeepSeek. 75% користувачів n8n активно використовують AI-інтеграції.

Чи безпечно публікувати через WordPress REST API?

Так, за правильного налаштування: Application Password (не основний), HTTPS, обмеження за IP. WordPress валідує права при кожному запиті. З 2026 року підтримує 19 операцій через AI-агентів з автозбереженням у чернетки.

Скільки статей на день можна генерувати?

Без обмежень з боку n8n. Ліміти — від API-провайдерів (rate limits OpenAI). На практиці 5–10 статей/день — комфортно. Але пам'ятайте: пости 2000+ слів отримують на 77% більше зворотних посилань. Якість > кількість.

Чим n8n відрізняється від Zapier?

Головне — тарифікація. n8n: 1 workflow = 1 виконання (скільки б нод не було). Zapier: кожен крок = окреме завдання. Workflow з 7 кроків: n8n = 1, Zapier = 7. Плюс self-hosting та повний контроль. 183 000+ зірок на GitHub.