>_
automate_this
Г
Это демо
Потыкай, посмотри как устроено — а чтобы начать, заведи аккаунт: M0 бесплатно.

M0-04RSS → Telegram алерт

тренажёрfree
Представь: ты следишь за блогом конкурента, отраслевым изданием или любимым медиа. Открывать каждый день и проверять — лень, а пропускать новые материалы не хочется. Соберём в n8n воркфлоу из двух нод, который сам раз в час заглядывает в RSS-ленту источника и присылает новые статьи прямо в Telegram. Polling-триггер опрашивает ленту по расписанию — никакого вебхука у источника не нужно.
#telegram#rss#monitoring

Что собираем

Две ноды в одну линию. RSS Feed Trigger сам периодически проверяет RSS-ленту на новые публикации — как только появится свежая статья, нода Telegram отправит её заголовок и ссылку прямо в твой Telegram.

Готовый воркфлоу: RSS Feed Trigger → Telegram
Итоговый воркфлоу

Шаги выполнения

1Получи токен у @BotFather

Создаём бота через @BotFather и получаем токен — токен нужен n8n, чтобы сообщения шли от имени именно твоего бота. Подробнее про @BotFather и токен — в шпаргалке ниже.

Этот шаг ты делаешь в Telegram-приложении, n8n пока даже не открывай.

📖@BotFather: как создать собственного бота в Telegramстатья · ~2 мин

@BotFather: как создать собственного бота в Telegram

@BotFather — это официальный бот Telegram, через которого создаются все остальные боты. Других способов завести бот нет: ни сайта, ни приложения, ни консоли — только переписка с этим аккаунтом.

Зачем это нужно

Чтобы любой workflow (в n8n, Make, на собственном бэкенде) мог слушать сообщения и отвечать от имени бота, ему нужен токен Bot API. Токен выдаётся при создании бота через @BotFather. Без токена ни одна интеграция с Telegram не заведётся: токен — это пара «логин-пароль» бота при общении с Telegram Bot API.

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

Открываешь Telegram, в поиске находишь аккаунт с username BotFather (галка подлинности рядом с именем — синяя), и пишешь ему как обычному собеседнику. Команды начинаются со слэша:

  • /newbot — создать нового бота. @BotFather спросит две вещи:
  • отображаемое имя (любое, может быть с пробелами и кириллицей) — то, что увидят пользователи в шапке чата;
  • username (только латиница, цифры, подчёркивание; обязательно заканчивается на _bot или bot) — постоянный идентификатор, по которому бот ищется и не меняется.
  • /mybots — список всех твоих ботов, доступ к настройкам (имя, описание, аватарка, команды, токен).
  • /revoke — отозвать старый токен и получить новый (если старый утёк).

После /newbot приходит сообщение с токеном — длинная строка вида 123456789:ABCdefGHI_jklMNO.... Это и есть тот самый Bot API token: его копируешь и сохраняешь в безопасное место (менеджер паролей, заметки с шифрованием) — но не в публичный репозиторий и не в чат.

Типичные ошибки

  • Потерять токен — @BotFather показывает токен один раз; чтобы получить его снова, нужно открыть /mybots → <твой бот> → API Token. Если не нашёл — можно сгенерировать новый через /revoke, но тогда старый перестанет работать во всех уже настроенных интеграциях.
  • Скинуть токен скриншотом / в открытый чат — токен даёт полный контроль над ботом. Любой, кто его увидит, может слать сообщения от имени бота и читать всё, что ему приходит. Если утёк — сразу /revoke.
  • Username без _bot на конце — @BotFather отклонит регистрацию; правило жёсткое, придётся подбирать ещё.
  • Перепутали username и отображаемое имя — отображаемое имя меняется в любой момент через /setname, а username меняется только пересозданием бота. Если задумывался серьёзный бот — username стоит выбрать осознанно.

Когда не подходит

Через @BotFather нельзя создать юзербот (бот, который ходит под обычным аккаунтом) — это уже не Bot API, а MTProto, и токен оттуда не подходит. Также @BotFather не нужен, если бот уже создан кем-то другим и тебе просто передали готовый токен — тогда сразу заводишь credential в нужном сервисе и работаешь с ним.

1.1
Найди @BotFather в Telegram

В Telegram найди аккаунт @BotFather (синяя галка подлинности рядом с именем). Открой с ним чат.

1.2
Отправь команду /newbot

В чате с @BotFather отправь команду /newbot.

Эта команда запускает диалог по созданию нового бота. Дальше @BotFather будет задавать вопросы по очереди — сначала про имя, потом про username.

1.3
Впиши отображаемое имя бота

На вопрос про имя (Alright, a new bot. How are we going to call it?) впиши любое отображаемое имя, например AI-помощник Вася.

Это имя пользователи будут видеть в шапке чата с ботом. Менять его потом можно через /setname — то есть запоминать намертво не нужно.

1.4
Придумай уникальный username бота

На следующий вопрос (Good. Now let's choose a username for your bot.) придумай уникальный идентификатор латиницей, обязательно заканчивающийся на _bot или bot — например, vasya_ai_helper_bot.

Username — это адрес бота в Telegram (https://t.me/vasya_ai_helper_bot). В отличие от имени, изменить его после создания нельзя, и он должен быть уникальным во всём Telegram. Если @BotFather ответит, что username занят, придумай другой.

1.5
Сохрани токен в надёжное место

В ответ @BotFather пришлёт сообщение с токеном — длинная строка вида 123456789:ABCdefGHI_jklMNO.... Скопируй её и сохрани в надёжное место (менеджер паролей, личная заметка) — токен это полный доступ к боту, светить его нельзя.

🎯
Тренажёр модуля I-Telegram
Если впервые создаёшь Telegram-бота — пройди модуль про Telegram.
2Добавь и настрой RSS Feed Trigger

Это polling-триггер: нода сама периодически ходит по RSS-ссылке и проверяет, не появились ли новые записи.

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

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

📖Что такое RSS — короткое объяснениестатья · ~2 мин

RSS — лента, которую забирают по расписанию

RSS — это адрес вида https://site.ru/feed.xml, по которому сайт отдаёт список последних записей в машинно-читаемом виде. Любая программа может скачать этот файл и получить заголовки, ссылки и даты публикаций без посещения страниц.

Это pull-модель. Сайт не отправляет уведомления сам. Подписчик сам обращается к ленте через равные промежутки времени и сравнивает, что появилось нового.

Каждая запись в ленте содержит стандартный набор полей: заголовок, ссылка, дата публикации и обычно короткий текст или фрагмент. Запись считается новой, если её не было в предыдущей выдаче. Именно это сравнение и даёт триггер для автоматизации.

RSS встречается на блогах, новостных сайтах, в релизах GitHub, подкастах и на форумах. Специальные ноды RSS Read и RSS Feed Trigger сами разбирают XML и отдают готовый массив items. Парсить руками не нужно.

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

Сайт публикует файл ленты и обновляет его при появлении новых материалов. Клиент (в том числе n8n) периодически скачивает этот файл целиком. Сравнивает список записей с тем, что было в прошлый раз, и обрабатывает только новые элементы.

  • Лента обновляется не мгновенно. Между публикацией и появлением записи в XML может пройти от нескольких минут до часа.
  • Поля title, link, pubDate и content уже разобраны нодами, их можно сразу использовать в выражениях.
  • Если ленты на сайте нет, RSS не поможет. Нужно искать API или парсить страницы напрямую.
Правило одной строкой
RSS — это всегда pull, никогда push

Сайт не пришлёт обновление сам. Автоматизация сама ходит за лентой по расписанию и сама определяет, что появилось нового.

Типичные ошибки

  • Ждут push-уведомлений от сайта → лента не меняется до следующего опроса → нужно настроить расписание и закладывать задержку в сценарий.
  • Пытаются получить запись через секунды после публикации → лента обновляется с лагом → проверять наличие записи не раньше чем через 15–30 минут.
  • Используют RSS для сбора данных с любого сайта → у многих ресурсов ленты просто нет → искать официальный API или переходить к парсингу HTML.
  • Пробуют разбирать XML регулярными выражениями → ноды уже возвращают готовый массив с полями title, link и pubDate → работать с этими полями напрямую, не лезть в исходный XML.
📖Polling-триггер: как нода сама ходит за даннымистатья · ~2 мин

Polling-триггер: как нода сама ходит за данными

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

Такой механизм называют pull-моделью: инициатива всегда у n8n. Источник (RSS, база данных, старый API) ничего не знает о клиенте и не умеет сам отправлять данные.

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

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

Слепок сохраняется только после того, как workflow переведён в режим Published. В режиме Test слепок не фиксируется, поэтому каждый тест возвращает одни и те же данные.

Сравнение с push-моделью (Webhook):

ПризнакPollingWebhook
Кто инициируетn8n (запросы по таймеру)источник (отправляет сам)
Требования к источникуобычный REST / RSS / файлпубличный URL и доступ извне
Задержка данныхот 15 секунд до интервала опросапочти мгновенная
Нагрузка на APIпостоянные запросызапросы только при событии

Polling применяют, когда у источника нет Webhook: RSS-ленты, старые SaaS, прямой доступ к базе или файлам на диске. Пример — RSS Feed Trigger.

Правило одной строкой
Pull всегда инициирует n8n

Polling-триггер сам ходит к источнику через равные интервалы. Источник не уведомляет n8n — он просто отвечает на запросы.

Типичные ошибки

  • Выбрал интервал 5 секунд → быстро исчерпал квоту API источника и получил rate-limit → поставь интервал, который соответствует реальной скорости появления данных.
  • Поставил интервал 1 час → новые записи приходят с задержкой до часа → уменьши интервал, если данные критичны по времени.
  • Ожидал, что RSS Feed Trigger поведёт себя как Webhook → workflow не запустился при обновлении ленты → помни, что polling сам инициирует запросы, а webhook ждёт входящий вызов.
  • Проверил триггер в режиме Test → каждый тест возвращает одни и те же записи → перейди в Published, чтобы слепок состояния начал сохраняться.
📖RSS: формат веб-лент для подписки на обновленияОткрыть
2.1
Добавь ноду RSS Feed Trigger

На пустом canvas нажми + → в поиске нод введи RSS → выбери RSS Feed Trigger.

📖Как добавить ноду в n8nстатья · ~2 мин

Добавление ноды на canvas

Чтобы продолжить цепочку, нужно вставить новую ноду после существующей или на пустой canvas. Для этого открывают панель выбора нод тремя способами: кнопка Open nodes panel в центре canvas, кнопка Add node на стрелке соединения и + на output-коннекторе любой ноды.

Панель называется What happens next?. В ней сразу видно категории и поле поиска.

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

  • Клик по Open nodes panel или Add node открывает список.
  • В поле Search nodes... вводят имя ноды или сервиса (например http, slack, schedule). Список фильтруется по мере ввода.
  • Навигация по категориям: AI, Action in an app, Data transformation, Flow, Core, Human review, Add another trigger.
  • Клик по названию ноды ставит её на canvas и сразу открывает панель Parameters.
  • На пустом canvas можно нажать клавишу Tab — откроется та же панель без клика мышью.

Первая нода любого воркфлоу должна быть триггером (Schedule Trigger, Webhook, Manual и подобные). Обычные ноды-действия в начало ставить нельзя.

Правило одной строкой
Первая нода — всегда триггер

Если первой стоит обычная нода-действие, воркфлоу не запустится. Начинай всегда с триггера.

Типичные ошибки

  • Поставил обычную ноду первой → воркфлоу не из чего стартовать → замени первую ноду на триггер из категории Core или через поиск.
  • Ищут ноду по русскому названию → список остаётся пустым → вводи английское имя сервиса в поле Search nodes....
  • Целятся мышью в мелкий + на стрелке → промахиваются → нажми Tab прямо на canvas.
  • Открывают категорию Add another trigger после уже существующей ноды → добавляют лишний триггер → для обычного шага используй поиск или категории Action in an app и Data transformation.
2.2
Заполни поле URL адресом RSS-ленты

В поле Feed URL вставь адрес RSS-ленты.

Например, для Хабра: https://habr.com/ru/rss/all/all/

Убедись, что это именно ссылка на RSS-ленту, а не адрес главной страницы сайта. RSS-ссылки часто содержат /feed/, /rss/ или заканчиваются на .xml.

Иначе нода не сможет прочитать данные.

Чтобы понять, как выглядит RSS-лента и чем она отличается от обычной страницы сайта, вставь https://habr.com/ru/rss/all/all/ в адресную строку браузера и открой её.

2.3
Настрой частоту проверки

В секции Poll Times нажми Add Poll Time.

В появившемся правиле выбери режим Every Minute — нода будет проверять ленту раз в минуту.

Такой интервал удобен при тестировании: изменения видны быстро. На практике для новостных лент обычно хватает одного раза в 5–15 минут.

2.4
Проверь параметры ноды
Параметры RSS Feed Trigger
ПараметрЗначение
Feed URLhttps://habr.com/ru/rss/all/all/
Poll Times 1 → ModeEvery Minute
2.5
Запусти Fetch Test Event

Нажми кнопку Fetch Test Event в правом верхнем углу ноды.

Нода скачает последние посты из ленты — в панели Output появятся поля title, link, content, date и другие. Эти данные понадобятся для настройки следующего шага.

📖Кнопка «Execute step»: запуск одной ноды без всего воркфлоустатья · ~2 мин

Запустить одну ноду, не дёргая весь workflow

Execute step — это кнопка внутри панели ноды (открывается двойным кликом по ноде). По смыслу — младший брат большой кнопки Execute workflow внизу холста: та запускает весь воркфлоу с начала, эта — только текущую ноду. Удобно, когда настраиваешь параметры и хочешь сразу видеть, что отдаёт нода, не перезапуская всю цепочку.

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

Когда ты жмёшь Execute step, n8n берёт уже существующие данные на входе ноды (output предыдущей ноды из последнего прогона) и прогоняет через эту ноду. Сама нода выполняется реально: HTTP-запрос уходит, запись в базу пишется, письмо отправляется. Это не «сухой прогон», а полноценное выполнение — только одного шага.

  • key: Execute workflow

value: Запускает весь воркфлоу от триггера. Нужен полный прогон с самого начала. Каждый раз заново дёргает все API.

  • key: Execute step

value: Запускает только эту ноду. Берёт вход из последнего output предыдущей ноды. Идеально для подбора параметров и отладки.

  • key: Когда работает

value: Только если на входе ноды есть данные с прошлого прогона. Если ни разу не запускал предыдущие — кнопка либо ничего не вернёт, либо упадёт «No input data».

Типичный сценарий: запустил весь воркфлоу один раз (Execute workflow), увидел что нода HTTP Request отдаёт не то, поправил поле URL, нажал Execute step — увидел новый результат за секунду. Предыдущие ноды повторно не выполнялись.

У триггеров кнопка называется иначе
Смысл тот же — запустить один шаг и получить тестовое событие

У некоторых триггерных нод n8n кнопка Execute step подписана по-другому, потому что у триггера нет «входа» — он сам должен сходить за событием. Например, у RSS Trigger она называется Fetch Test Event: клик подтянет последние записи из ленты и положит их на выход ноды как тестовый input для остального воркфлоу. Работает идентично Execute step обычной ноды — точно так же используется для отладки и подбора параметров без полного прогона.

Важно про побочные эффекты
Каждый Execute step — это реальный вызов

Нода с записью в базу или отправкой сообщения каждое нажатие Execute step делает реально: 5 нажатий = 5 записей / 5 писем. Для отладки таких нод используй тестовые данные или подменяй credentials.

Типичные ошибки

  • Жать Execute step на ноде, у которой ещё не было входных данных → «No input data», нода не запустится. Сначала прогони весь воркфлоу через Execute workflow или хотя бы триггер вручную, чтобы у каждой ноды появился output.
  • Использовать Execute step для проверки изменений в предыдущих нодах → текущая нода работает со старым output, изменения не подхватятся. Если поправил предыдущую ноду — перезапусти её, а потом уже текущую.
  • Тестировать ноду с побочным эффектом (запись в БД, отправка письма) на проде → каждый клик создаёт реальную запись. Использовать тестовый credential или временно подменять параметры на безопасные.
RSS Feed Trigger с зелёной галочкой после выполнения
Зелёная галочка на ноде — данные из RSS успешно получены
📖JSON: формат данных, синтаксис и типыОткрыть
2.6
Запинь полученные данные

Нажми Pin над панелью Output.

Это «заморозит» данные в ноде: пока настраиваешь Telegram, не нужно снова запускать RSS-нагрузку — n8n будет использовать уже скачанные записи.

📖Pin Data в n8n: как зафиксировать тестовый вход нодыстатья · ~2 мин

Pin Data в n8n: как зафиксировать тестовый вход ноды

Pin Data — это способ «прибить» к ноде заранее заготовленные данные, которые n8n будет подставлять вместо настоящего входа на каждом тестовом запуске. Полезно, когда дёргать реальный источник (внешний воркфлоу, веб-хук, API) на каждое нажатие Execute workflow неудобно или невозможно.

Зачем это нужно

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

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

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

К любой ноде с выходом можно прикрепить «запинённый» JSON. После этого:

  • При запуске воркфлоу через UI (Execute workflow, тестовый прогон) n8n не вызывает саму ноду, а сразу выдаёт следующим нодам зафиксированные данные.
  • Pin Data привязана к конкретной ноде, не к workflow целиком — можно запинить триггер и оставить остальные ноды живыми.
  • На холсте у запинённой ноды появляется визуальный значок (булавка/иконка), чтобы не забыть, что данные «искусственные».

Удобнее всего пинить триггер: на нём поле выхода — то, что в боевом режиме приходит снаружи (Telegram-апдейт, тело веб-хука, поля Execute Workflow Trigger). Тестовый JSON собирают с теми же ключами, что отдаёт реальный источник.

К примеру
Где это встречается

К примеру, в Sub-Workflow с триггером Execute Workflow Trigger пин на триггере позволяет запускать сам Sub-WF кнопкой сверху и отлаживать ноды после триггера, не запуская вызывающий workflow. Иногда — пин ставят на ноде HTTP Request к платному API, чтобы при разработке не жечь квоту запросами «ещё разок проверить парсинг».

Типичные ошибки

  • Забыли про пин при отладке — в редакторе тестовые прогоны идут по закреплённым данным, а не по реальным, поэтому новый вход «не доходит». Боевому запуску пин не мешает, но перед проверкой на живых данных его лучше снять.
  • Структура запинённого JSON не совпадает с реальным — отладка проходит идеально, но в проде ломается на полях, которых не было в тестовом примере; делайте пин из реальной execution, а не «на глаз».
  • Запинили середину воркфлоу, забыли — переименовали поле в ноде до пина, а пин остался со старой структурой. Следующие ноды читают «фантомные» данные.
  • Pin Data перепутали с переменными среды — пин не передаётся между воркфлоу и не сохраняется при экспорте на другую инсталляцию n8n как «конфиг»; это именно отладочный фиксаж.

Когда не подходит

Pin Data не заменяет настоящие тесты — это удобство в редакторе, не автоматизация. Если нужна повторяемая проверка с разными входами, лучше делать отдельный тестовый workflow или мини-набор тест-кейсов; пин подходит, когда хочется быстро прогнать «один и тот же» сценарий N раз.

Воркфлоу после шага 2 — RSS Feed Trigger добавлен, данные запинены
Воркфлоу после шага 2 — RSS Feed Trigger добавлен и протестирован
3Настрой ноду Telegram

Эта нода отправит новые статьи из RSS-ленты в твой Telegram.

В поле Text мы передадим заголовок статьи и её ссылку через drag-and-drop из вывода RSS Feed Trigger.

3.1
Добавь ноду Telegram

Нажми на канвасе + справа от RSS Feed Trigger. В правой панели поиска нод введи telegram → выбери action-ноду Telegram → в открывшемся подменю в разделе Actions выбери Send a text message. Нода автоматически подключится к триггеру.

3.2
Добавь credential

Открой ноду двойным кликом. В поле Credential нажми Create New Credential и вставь токен, который получил у @BotFather в шаге 1. Сохрани.

🔑Как добавить credential в n8nстатья · ~1 мин

Универсальный процесс добавления credential

Credential в n8n — это сохранённая «учётка» для подключения к сервису (API-ключ, OAuth-токен, логин/пароль и т.д.). Любая нода, которой нужна авторизация, выбирает credential из общего списка — поэтому добавлять его нужно один раз, а использовать можно из любого количества нод того же типа.

Пошагово

  1. В левом меню n8n открой раздел Credentials.
  1. Нажми кнопку Add credential (правый верхний угол).
  1. В поиске введи название нужного типа credential — например, OpenAI, Header Auth, Postgres, Google — и выбери его из списка.
  1. В шапке формы дай credential понятное имя — например, OpenAI школа или Postgres prod. По этому имени ты будешь выбирать его в нодах.
  1. Заполни поля формы. Какие именно — зависит от типа: для API-ключевых это обычно одно поле API Key, для Header Auth — Name и Value заголовка, для Postgres — host/port/database/user/password, для OAuth — запуск OAuth-flow по кнопке.
  1. Нажми Save. Готово — credential можно подключать к любой ноде, которая поддерживает этот тип.
Подсказка
Один credential — много нод

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

Кстати
Какие поля заполнять у конкретного типа

Этот гайд — про универсальный процесс. Какие поля и какие значения вводить у конкретного credential (OpenAI API, Header Auth, Postgres и т.д.) — смотри в inline-статье на этот тип, она будет рядом со ссылкой на текущую.

3.3
Найди свой Telegram ID

В поле Chat ID нужно указать числовой идентификатор чата — в данном случае твой личный Telegram ID.

📖Как узнать свой Telegram chat IDстатья · ~1 мин

Как узнать свой Telegram chat ID

chat_id — числовой идентификатор чата в Telegram. Bot API принимает его как целое число, потому что именно так хранится связь в базе Telegram и потому что username может измениться, а число — нет.

Для личных чатов твой chat_id совпадает с user_id и всегда положительный. Группы и каналы имеют отрицательный chat_id (для супергрупп начинается с -100).

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

API Telegram описывает chat_id как Integer. Значение может занимать больше 32 бит, поэтому для хранения в базе данных нужен 64-битный тип.

Получить свой chat_id можно двумя способами:

  • Отправь /start боту @userinfobot — в ответе придёт твой Id.
  • Открой Saved Messages в Telegram Web, в адресе после символа # будет число — это и есть chat_id.

В n8n это число вставляют в поле Chat ID ноды Telegram при отправке сообщения.

Числовой идентификатор надёжнее @username: API быстрее его обрабатывает и не зависит от смены имени пользователя. Для публичных чатов API ещё принимает строку с @username, но для личных контактов требуется именно число.

Важно
chat_id — это не username

API ждёт целое число. Если передать @username в поле, предназначенное для приватного чата, вернётся ошибка chat not found.

Типичные ошибки

  • Подставили @username вместо числа → Bot API вернёт Bad Request: chat not found → используй только полученное числовое значение.
  • Скопировали чужой пример с числовым ID → сообщения уйдут другому человеку → всегда получай chat_id одним из двух способов для своего аккаунта.
  • Перепутали личный chat_id и ID группы → ID группы отрицательный, личный — положительный → проверяй знак числа перед вставкой.
  • Сохранили chat_id в 32-битное поле базы данных → у части пользователей ID больше 2³¹ → используй 64-битный integer или double.
3.4
Передай заголовок и ссылку через drag-and-drop

В левой панели Input у тебя данные из RSS Feed Trigger. Найди поле title и перетащи его в поле Text. Затем нажми Enter, чтобы перейти на новую строку, и перетащи туда же поле link.

В поле Text появится выражение вида {{ $json.title }}{{ $json.link }} (на двух строках).

Это заголовок и ссылка статьи, которую вытянул RSS Feed Trigger. Обращаемся к ним через $json, потому что RSS-триггер стоит прямо перед Telegram в цепочке — его выход целиком становится входом следующей ноды, и поля title и link доступны напрямую без указания имени ноды.

⚡Как передать данные из одной ноды в другую через drag-and-dropстатья · ~2 мин

Перетаскивание полей из Input panel

Когда нужно подставить значение из предыдущей ноды в параметр текущей, не пиши выражение вручную. Открой ноду двойным кликом. Слева откроется Input panel с деревом полей предыдущей ноды. Справа — node parameters.

Раскрой нужное поле в Input panel и перетащи его мышкой в parameter's field. n8n сам сформирует выражение и переключит поле из режима Fixed в Expression.

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

Input panel показывает данные из OUTPUT предыдущей ноды. Данные приходят в виде дерева: каждое поле можно раскрыть до примитива.

После drop в parameter's field появляется выражение в двойных фигурных скобках. n8n поддерживает два формата:

  • $json.<field> — когда данные идут напрямую из предыдущей ноды по главной ветке;
  • $('<NodeName>').item.json.<field> — когда нужно явно указать имя ноды-источника.

n8n сам определяет нужный item через item linking. Ручной поиск соответствия не требуется.

Поле автоматически окрашивается и переключается в режим Expression. Альтернатива — открыть expressions editor и написать то же выражение вручную. Результат идентичен.

Вложенные поля раскрываются через точку: $json.body.city.

Правило одной строкой
Перетаскивай только до примитива

Если перетащить объект-обёртку, в поле попадёт [object Object]. Всегда раскрывай дерево до конечного значения.

Типичные ошибки

  • Перетащил объект-обёртку вместо примитива → в поле уходит [object Object] → раскрой дерево до листа.
  • Дропнул в соседнее поле параметра (Text вместо Chat ID) → нода работает не на тех данных → визуально проверь куда легло выражение.
  • Переименовал ноду уже после drag-and-drop → expression $('старое имя') сломался → верни старое имя или перепиши выражение вручную.
  • Впечатал статичное значение через drag вместо обычного текста → лишнее выражение там где значение не меняется → для констант просто впечатывай текст.
  • Тащишь из ноды через ветку которая не выполнялась → expression вернёт undefined → проверь что нужная ветка реально дошла до текущей ноды.
📖Fixed и Expression — два режима любого поля ноды в n8nстатья · ~2 мин

Fixed и Expression — два режима любого поля ноды в n8n

Каждое поле в Parameters любой ноды работает в одном из двух режимов. В режиме Fixed значение отправляется ровно так, как ты его написал. В режиме Expression значение пересчитывается на каждом item по JavaScript-формуле внутри {{ }}.

Переключатель Fixed | Expression находится справа от поля. Слева — кнопка Focus parameter и три точки с пунктом Reset Value. Никакой шестерёнки и пункта Add Expression в n8n v2 уже нет.

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

Режим Fixed — значение статично. Ты пишешь текст, число или выбираешь опцию из списка, и нода отправит именно это.

Режим Expression — значение динамическое. n8n показывает знак = слева от поля, оранжевую подсветку, блок Result и Item, а также кнопку Edit Expression. Формула выполняется заново для каждого входящего item.

Переключить режим можно двумя способами:

  • кликнуть Expression в radiogroup справа от поля;
  • перетащить поле из панели Input прямо в целевое поле параметра — n8n сам включит Expression и подставит {{ $json.field }} или {{ $('Имя ноды').item.json.field }}.

Переключатель есть в текстовых полях, выпадающих списках и в resource locator (там он появляется третьим табом).

Выбирай Expression, когда значение зависит от данных или времени. Оставляй Fixed, когда значение всегда одинаковое.

Правило одной строкой
Режим выбирается справа от поля

Чтобы включить динамическое значение — кликни Expression справа или перетащи поле из Input. Чтобы вернуть статичное — кликни Fixed.

Типичные ошибки

  • Написал {{ $json.name }} в режиме Fixed → n8n отправит литеральную строку со скобками → переключи справа на Expression или перетащи поле из Input заново.
  • Переключил Expression → Fixed в resource locator → выбранный объект исчез → вернись в Expression и подставь id формулой или заново выбери из From list в Fixed.
  • Ищешь шестерёнку слева по старым инструкциям → её нет в n8n v2 → используй radiogroup Fixed | Expression справа от поля.
  • Перетащил поле из Input, но режим не сменился → отпустил над зоной Drag input fields here соседнего параметра → отпускай строго над нужным полем.
  • Написал формулу без знака = → n8n считает её текстом → кликни Expression справа, тогда = появится автоматически.
📖Что такое expression в n8n и как она читает значения из других нодстатья · ~2 мин

Что такое expression

В n8n expression — это маленький кусочек кода в фигурных скобках, который динамически подставляет значение в поле ноды. Записывается так:

{{ <выражение> }}

В поле интерфейса = перед выражением писать не нужно: поле в режиме Expression уже трактует содержимое как выражение, а знак = n8n сам добавляет в файле воркфлоу (JSON) как маркер. Если напечатать = самому, он попадёт в результат текстом (например, сообщение начнётся с «=🚨»). Если поле осталось в режиме Fixed, {{ ... }} запишется как обычный текст.

Внутри {{ }} пишется JavaScript-выражение. Самое частое — чтение значения из другой ноды.

Зачем нужны expressions

Каждое поле в параметрах ноды может быть либо фиксированным значением (например, URL https://api.example.com), либо expression'ом — формулой, которая считается на лету в момент исполнения ноды. Expressions нужны, когда значение зависит от данных, пришедших из предыдущей ноды.

К примеру
Где это встречается

К примеру, ты сделал ноду «прочитать строку из таблицы конфига», а следующая нода — HTTP Request к внешнему API. В URL этой HTTP-ноды можно подставить значение из конфига: {{ $('Get Config').item.json.api_url }} — n8n при каждом исполнении возьмёт актуальный URL из таблицы, а не зашитый в ноду.

Как читать значения из других нод

Базовая формула: {{ $('<имя_ноды>').item.json.<поле> }}

Разбор по частям:

  • $('<имя_ноды>') — обращение к ноде по имени (то, что написано на холсте под нодой). Имя — в одинарных кавычках, точно как на холсте.
  • .item — текущий элемент, который обрабатывается. У большинства нод элементов несколько (массив), item берёт тот, что соответствует текущей итерации.
  • .json — содержимое поля json элемента (там лежат все данные, которые нода вернула).
  • .<поле> — конкретное поле внутри json. Если поле вложенное — пишется через точку: .config.embedding_model.

Пошагово — как вставить expression в поле

  1. Наведи курсор на поле и переключи Fixed → Expression в правом верхнем углу поля (или просто начни вводить {{ — поле само перейдёт в режим expression).
  2. В появившемся окне (expression builder) — слева список нод воркфлоу, можно кликать по полям и они вставятся в формулу.
  3. Справа — preview: видно, какое значение получится прямо сейчас. Если красным — формула или путь к полю некорректные.
  4. Закрой окно, поле остаётся в режиме expression (синий фон + иконка fx).
Типичная ошибка
Поле в режиме `Fixed` вместо `Expression`

Если вставил {{ ... }} в поле, которое осталось в режиме Fixed, n8n запишет текст {{ ... }} как есть, и нода уйдёт делать HTTP-запрос на URL вроде {{ $('...').item.json.api_url }} буквально. Симптом — ошибка Invalid URL или 404 на странную строку. Лечение: переключи поле в Expression. И наоборот, = в начале вручную не печатай — он попадёт в результат.

Типичные ошибки

  • Имя ноды не совпадает. В формуле $('Get Config') имя должно точно совпадать с подписью ноды на холсте. Если переименовал ноду — старые expressions, ссылающиеся на неё, сломаются.
  • Путь к полю не существует. .item.json.embedding_dimensions упадёт с undefined, если у элемента такого поля нет. Проверка — посмотри preview в expression builder, он сразу показывает значение или ошибку.
  • Поле осталось в режиме Fixed. Самая частая ошибка — описана в callout выше.
  • Кавычки внутри {{ }}. Внутри expression строки оборачиваются одинарными кавычками: {{ 'Hello ' + $json.name }}; двойные тоже работают. Поля с кириллицей и пробелами читаются как $json["Имя"].

Когда expression не нужен

Иногда поле должно быть фиксированным. Например, метод HTTP-запроса (GET / POST) или имя коллекции, которое одинаково для всего воркфлоу — нет смысла читать его динамически. Простое правило: если значение меняется от итерации к итерации или зависит от пришедших данных — нужен expression; если значение постоянное — оставляй фиксированным.

📖$json или $('Имя ноды'): когда какая форма обращения к даннымстатья · ~2 мин

Две формы обращения — разница только в источнике

В n8n у одной и той же ноды есть две формы прочитать поле из данных воркфлоу:

{{ $json.business_idea }}
{{ $('Form Trigger').item.json.business_idea }}

Обе достают одно и то же значение, но смотрят в разные места:

  • $json — это выход ноды, которая стоит прямо перед текущей. Короткая форма для «возьми поле из предыдущей ноды».
  • $('Имя ноды') — это обращение к любой ноде воркфлоу по имени, в том числе к той, что стоит на 2-3-5 шагов раньше.

Когда писать какую

Правило простое:

  • Хочешь взять данные у предыдущей ноды (стрелка идёт прямо в текущую) — пиши $json.поле.
  • Хочешь дотянуться до ноды глубже по цепочке (между ней и текущей есть промежуточные ноды) — пиши $('Имя ноды').item.json.поле.
Пример
Цепочка из трёх нод

Цепочка: Form Trigger → OpenAI → Send Message.

В Send Message обращения к двум разным источникам выглядят так:

  • к ответу OpenAI (предыдущая нода): ={{ $json.output }}
  • к полю формы (нода на два шага назад): ={{ $('Form Trigger').item.json['Email'] }}

Если в Send Message написать ={{ $json['Email'] }} — поле не найдётся, потому что у OpenAI в выходе нет Email. Это типичная ошибка студентов.

Почему короткая форма вообще существует

$json — это просто синоним для $input.item.json, то есть «текущий обрабатываемый элемент входа». А вход текущей ноды формируется из выхода предыдущей. Поэтому $json.поле и $('Предыдущая нода').item.json.поле всегда дают одно и то же значение — пока стрелка идёт напрямую.

$('Имя ноды') нужна там, где короткая форма не справится: между источником и текущей нодой есть промежуточные шаги, которые этого поля уже не передают (например, OpenAI вернул только текст ответа, и поле формы Email к моменту Send Message живёт только в выходе Form Trigger).

Типичные ошибки

  • Написал $json.Email в ноде после OpenAI. OpenAI возвращает output, а не Email. Решение — обратиться по имени: $('Form Trigger').item.json['Email'].
  • Имя ноды в $('...') не совпадает с подписью на canvas. В expression имя — буквально то, что написано под нодой на canvas. Переименовал ноду — все старые expressions, ссылавшиеся на её прежнее имя, сломаются.
  • Забыл .item после имени ноды. Полная форма — $('Имя').item.json.поле. Без .item обращаешься не к данным, а к самой ноде как объекту — поле не найдётся.
3.5
Выключи Append n8n Attribution

Прокрути вниз до секции Additional Fields и раскрой её.

Найди параметр Append n8n Attribution и переключи его в положение off (должен стать серым).

Без этого в конец каждого сообщения будет дописываться This message was sent automatically with n8n — лишнее для алертов.

⚙Append n8n Attribution: подпись в конце автоматических сообщенийстатья · ~2 мин

Append n8n Attribution: подпись в конце автоматических сообщений

Параметр Append n8n Attribution находится в ноде Telegram. По умолчанию он добавляет в конец каждого отправленного сообщения строку «This message was sent automatically with n8n».

Параметр спрятан: он появляется только после раскрытия Additional Fields. Значение по умолчанию — On, поэтому подпись появляется автоматически, если ничего не менять.

Зачем это нужно

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

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

Параметр — простой переключатель внутри Additional Fields.

  • On (включён) — в конец текста дописывается фраза «This message was sent automatically with n8n».
  • Off (выключен, серый) — фраза не добавляется.

Чтобы добраться до переключателя, открой Parameters → Additional Fields → Add Field → выбери Append n8n Attribution.

Коротко
Когда выключать

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

Типичные ошибки

  • Параметр не виден на основном экране → ищут его в Parameters → нужно раскрыть Additional Fields через Add Field.
  • Оставили On для реальных пользователей → получатели видят упоминание n8n → переключи в Off, чтобы переключатель стал серым.
  • Перепутали с Parse Mode → правят соседний пункт → Parse Mode отвечает за форматирование, а Append n8n Attribution — только за подпись.
  • Выключили, но не проверили → подпись осталась → убедись, что переключатель серый.
3.6
Проверь параметры ноды
Параметры Telegram
ПараметрЗначение
CredentialTelegram Bot
ResourceMessage
OperationSend Message
Chat IDтвой числовой Telegram ID
Text{{ $json.title }}\n{{ $json.link }}
Additional Fields → Append n8n Attributionoff
3.7
Запусти Execute step

Зайди в ноду и нажми Execute step в правом верхнем углу.

Если всё настроено верно, в твой Telegram придёт сообщение с заголовком и ссылкой на статью из RSS-ленты. В панели Output ноды появится JSON-ответ Telegram API с ok: true.

Готовый воркфлоу: RSS Feed Trigger → Telegram
Воркфлоу после шага 3 — обе ноды настроены и протестированы

Все, воркфлоу собран. Можешь потестировать его, а потом выполнить Stretch (задачу со звездочкой)

🚀Stretch

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

Сделай так, чтобы заголовок статьи стал жирной кликабельной гиперссылкой — клик на заголовок открывает оригинал. Telegram поддерживает HTML-разметку в тексте сообщений, нужно включить нужный режим в Telegram-ноде и собрать тег <a> с заголовком из RSS.

Тест-кейсы

ВходОжидаем
Корректный RSS URL (например, лента Хабра) + Test stepСкачивает последние статьи в JSON: поля title и link видны в Output
Неправильный URL (главная страница сайта без /feed/)Ошибка при выполнении — Invalid feed или XML parsing error
Воркфлоу опубликован (Publish) + новых постов в источнике пока нетВоркфлоу проверяет ленту в фоне, но сообщения в Telegram не приходят — это нормально
Воркфлоу опубликован (Publish) + появился новый пост в источникеЧерез ~1 минуту (интервал пуллинга) приходит сообщение в Telegram с заголовком и ссылкой
Помощь
Застрял где-то по ходу? Покажи в учебном чате скрин ноды и текст ошибки — разберёмся.
Написать в чат
Собрал воркфлоу? Сдай на ревью
Это демо — задачу можно прочитать целиком. Свой n8n, сдача на ревью и разбор открываются в аккаунте. Заведи аккаунт — модуль M0 бесплатно.

Можно аналитические cookie?

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