Автопостинг новых видео YouTube в Telegram, Facebook и Instagram через n8n

Этот пост — пошаговый разбор рабочего процесса в n8n: от подписки на RSS YouTube до публикаций в Telegram, Facebook Page и Instagram. Все примеры настроек и промптов даны с шаблонными плейсхолдерами, чтобы вы могли вставить свои данные и запустить у себя.

Что вы соберёте

  • Автопоиск новых видео на вашем YouTube-канале (через RSS).
  • Генерацию короткого цепляющего текста поста с помощью LLM.
  • Публикацию в Telegram (канал/группа), Facebook Page и Instagram (картинка-превью + подпись).
  • Безопасное хранение токенов в Credentials/переменных окружения.

⚙️ n8n можно развернуть локально (Docker) или в облаке. Рекомендуемая таймзона: America/Argentina/Buenos_Aires (или ваша).


Требования и переменные (подставьте свои данные)

  • YouTube Channel ID{{YOUTUBE_CHANNEL_ID}}
  • Telegram: бот + {{TELEGRAM_CHAT_ID}} (канал/супергруппа; бот = админ)
  • Facebook: {{FB_PAGE_ID}} (ID страницы), валидные права и токен
  • Instagram: бизнес/creator-аккаунт, привязанный к странице; {{IG_USER_ID}}, {{IG_LONG_LIVED_TOKEN}}
  • OpenAI: {{OPENAI_API_KEY}}

Рекомендуемые переменные окружения (или Credentials):

YOUTUBE_CHANNEL_ID=
TELEGRAM_CHAT_ID=
FB_PAGE_ID=
IG_USER_ID=
IG_LONG_LIVED_TOKEN=
OPENAI_API_KEY=

🔒 Не хардкодьте токены в полях нод. Используйте Credentials / $env / $credentials.


Архитектура потока

graph TD;
  A[RSS Feed Trigger]-->B[Set: видео/превью]
  B-->C[Basic LLM Chain: текст поста]
  C-->D[Telegram: sendMessage]
  C-->E[Facebook Graph: /PAGE_ID/feed]
  C-->F[HTTP: IG /media]
  F-->G[HTTP: IG /media_publish]

Краткий план (TL;DR)

  1. RSS Feed Trigger → URL фида вашего канала.
  2. Set → извлечь video_id и image_url превью.
  3. OpenAI Chat Model + Basic LLM Chain → сгенерировать текст публикации.
  4. Telegram → отправить «чистое» сообщение (без хэштегов в теле).
  5. Facebook Graph APIfeed с message + link.
  6. InstagramPOST /media (image) → POST /media_publish.

Узлы и настройки (копируйте и заменяйте плейсхолдеры)

1) RSS Feed Trigger

  • Poll: Every hour (или ваш интервал)
  • Feed URL:
    https://www.youtube.com/feeds/videos.xml?channel_id={{$env.YOUTUBE_CHANNEL_ID}}
    

Триггер отдаёт только новые видео.

2) Set — «Edit Fields – Превью YouTube»

Добавьте поля (Assignments):

  • video_id (String)
    {{$json["link"].match(/(?:v=|shorts\/)([^&?\/]*)/)?.[1]}}
    
  • image_url (String)
    https://img.youtube.com/vi/{{$json["link"].match(/(?:v=|shorts\/)([^&?\/]*)/)?.[1]}}/hqdefault.jpg
    

Оставьте Include Other Fields включённым, чтобы не потерять исходные поля RSS.

3) OpenAI Chat Model (модель для LangChain)

  • Model: gpt-3.5-turbo (или актуальная)
  • Max tokens: 400
  • Temperature: 0.8
  • Credentials: ваш {{OPENAI_API_KEY}}

Этот узел подключается к Chain как ai_languageModel.

4) Basic LLM Chain — генерация текста поста

Подключите ai_languageModel к узлу «OpenAI Chat Model».

Сообщения промпта (messages):

System / Общая инструкция

Ты опытный SMM-специалист. Твоя задача — создавать цепляющие посты для соцсетей (Telegram, Instagram, Facebook), чтобы продвигать новое видео YouTube.
Пиши по-русски. Используй живой, эмоциональный стиль, эмодзи и призыв к действию. ⚠️ Не используй хэштеги в тексте публикации.
Текст короткий и понятный (до 400 символов). Если нужны хэштеги — выведи их отдельной строкой в конце.

Human / Пользовательское сообщение

Новое видео на канале:
Название: {{ $json.title }}
Ссылка: {{ $json.link }}

Создай короткий пост (до 400 символов), чтобы привлечь внимание зрителя.
Канал: {{ВСТАВЬТЕ КОРОТКОЕ ОПИСАНИЕ СВОЕГО КАНАЛА}}
Цель: эмоции + переход по ссылке.
Стиль: живой, разговорный, допустима ирония; с эмодзи; без «жми на ссылку».
В конце отдельной строкой: 10 релевантных хэштегов + #ВашХэштег.

Выход узла: поле text с готовым постом.
💡 Хотите сразу испанскую версию? Дублируйте Chain и поменяйте System/Human на испанский.

5) Set — «Очистка хэштегов» (для Telegram)

Создайте поле message (String):

{{$json.text
  .replace(/#[\wÀ-ÿ]+/g, "")
  .replace(/\s{2,}/g, " ")
  .trim()}}

6) Telegram — отправка сообщения

  • Operation: Send a text message
  • chatId: {{$env.TELEGRAM_CHAT_ID}}
  • text:
    🆕 Новое видео на YouTube!
    
    📺 {{ $('RSS Feed Trigger').item.json.title }}
    📝 {{ $json.message }}
    
  • parse_mode: HTML
  • disable_web_page_preview: false

Убедитесь, что бот админ канала/супергруппы. Для chat_id канала используйте вид -100xxxxxxxxxx.

7) Facebook Graph API — публикация на страницу

  • Edge: feed
  • Page: {{$env.FB_PAGE_ID}}
  • Query Params:
    • message = {{$json.text}}
    • link = {{ $('RSS Feed Trigger').item.json.link }}

Требуются валидные права приложения/токена. Для аналитики добавьте UTM к ссылке (см. ниже).

8) Instagram — HTTP Request: Create Media

  • Method: POST
  • URL: https://graph.facebook.com/v18.0/{{$env.IG_USER_ID}}/media
  • Send body: true (Form-Urlencoded)
  • Body:
    • image_url = {{ $('Edit Fields – Превью YouTube').item.json.image_url }}
    • caption = {{$json.text}}
    • access_token = {{$env.IG_LONG_LIVED_TOKEN}}

Ожидаемый ответ: { id: <creation_id> }

9) Instagram — HTTP Request: Publish Media

  • Method: POST
  • URL: https://graph.facebook.com/v18.0/{{$env.IG_USER_ID}}/media_publish
  • Send body: true (Form-Urlencoded)
  • Body:
    • creation_id = {{$json.id}}
    • access_token = {{$env.IG_LONG_LIVED_TOKEN}}

Для видео/риэлс нужны другие эндпоинты (video_url/Reels). Здесь публикуется картинка превью YouTube.


Бонус: UTM-метки для отслеживания переходов

Подменяйте ссылку перед отправкой (например, на FB), чтобы видеть источник:

{{ 
  const base = $('RSS Feed Trigger').item.json.link;
  const utm = 'utm_source=facebook&utm_medium=social&utm_campaign=youtube_autopost';
  return base + (base.includes('?') ? '&' : '?') + utm;
}}

Аналогично — для Telegram/Instagram (меняйте utm_source).


Отладка и тест

  1. Запустите вручную RSS Feed Trigger (или дождитесь нового видео).
  2. Проверьте в Set: корректно ли извлеклись video_id и image_url.
  3. Посмотрите вывод Basic LLM Chain → поле text.
  4. Убедитесь, что в узле Telegram удалились хэштеги (message).
  5. В Facebook узле — статус 200 и появление поста на странице.
  6. В Instagram: сначала id из Create Media, затем публикация в профиле из media_publish.

Частые ошибки и решения

  • IG 190/10/400 (Auth/Permissions): просрочен токен или нет прав; проверьте, что IG — Business/Creator, привязан к странице; используйте long-lived токен.
  • FB пост не появляется: роли страницы/права приложения, статус страницы, ограничения по странам/возрасту.
  • Telegram молчит: бот не админ / неверный chat_id / включён запрет сообщений.
  • LLM не отвечает: проверьте OPENAI_API_KEY, биллинг/лимиты.
  • Дубли: RSS обычно не триггерит старые записи. Для надёжности добавьте Data Store и фильтр по video_id.

Вариации

  • ES/RU автоперевод: второй LLM Chain → второй набор соцсетей.
  • Reels/видео в IG: используйте video_url и соответствующие эндпоинты Graph API.
  • Отложенный постинг: добавьте Wait/Cron и расписание.
  • Мультиканальность: ещё Twitter/X, LinkedIn, VK — через их API/коннекторы.

Полезные подсказки (копируйте)

Regex извлечения ID из YouTube URL (видео/Shorts):

{{$json["link"].match(/(?:v=|shorts\/)([^&?\/]*)/)?.[1]}}

Формирование URL превью YouTube:

https://img.youtube.com/vi/{{$json["link"].match(/(?:v=|shorts\/)([^&?\/]*)/)?.[1]}}/hqdefault.jpg

Очистка хэштегов из текста перед Телеграмом:

{{$json.text.replace(/#[\wÀ-ÿ]+/g, "").replace(/\s{2,}/g, " ").trim()}}

Ссылка с UTM (автоматическая подстановка ?/&):

{{ 
  const u = $json.link;
  const utm = 'utm_source=telegram&utm_medium=social&utm_campaign=youtube_autopost';
  return u + (u.includes('?') ? '&' : '?') + utm;
}}

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

  • Храните секреты в Credentials/переменных окружения.
  • Не публикуйте токены/ID в открытых репозиториях и скринкастах.
  • Если когда-то вставляли токен прямо в поле ноды — сразу перевыпустите.

FAQ

Можно ли публиковать альбом в IG? Этот флоу отправляет одно изображение. Для каруселей используйте массив children + media_publish с creation_id контейнера.

Хочу разный текст в TG/FB/IG. Разветвите поток от LLM, добавьте по Set узлу с кастомными правилами/эмодзи и отправляйте в соответствующие каналы.

Как хранить историю, чтобы не было дублей? Добавьте Data Store (SQLite) с ключом video_id и проверяйте перед публикацией.

Скопируйте промпты и выражения, подставьте свои токены/ID — и у вас будет полностью рабочий процесс. Удачи!

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *