Навіщо взагалі автоматизувати публікацію
За даними Orbit Media за 2025 рік, 95% блогерів уже використовують AI хоча б іноді при створенні контенту. Це не мода — це відповідь на реальну проблему: створення однієї статті від ідеї до публікації вимагає 3–5 годин ручної роботи.
Я веду блог уже кілька років і знаю це на собі. Бували тижні, коли замість двох запланованих статей виходила одна, а іноді — жодної. Ланцюжок «вигадав → написав → оформив → опублікував» просто занадто довгий.
Автоматизація через n8n вирішує саме це. Я не замінюю себе роботом — я прибираю рутину. Тему вигадую сам, а чернетку, структуру та публікацію робить workflow.
Платформа n8n у березні 2025 залучила €55 млн інвестицій серії B за оцінки ~€250 млн. Понад 3 000 корпоративних клієнтів (Vodafone, Microsoft) будують на ній автоматизації. І найголовніше — n8n можна розгорнути безкоштовно на власному сервері.
Що ми будемо будувати
Ідея проста: Telegram-бот приймає тему, n8n запускає ланцюжок генерації та публікації.
Trigger
Chat ID
Content+SEO
Parse JSON
Cover
Upload
Post+SEO
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": "Заголовок зображення"
}
Один виклик 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 можна підключити 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 }} }
}
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 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.