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

M0-12Утренняя погода

тренажёрfree
Представь: каждое утро открываешь приложение погоды, чтобы узнать что надеть и взять ли зонт. Если таких утренних ритуалов много (новости, курсы валют, расписание), отдельные приложения утомляют. Соберём бота, который сам каждое утро в 8:00 запрашивает погоду через бесплатный сервис OpenWeatherMap и присылает короткий отчёт в Telegram. Первая задача курса, где ты регистрируешься на стороннем сервисе и подключаешь собственный API-ключ.
#telegram#weather#schedule#external-api

Что собираем

Три ноды в одну линию. Schedule Trigger запускает воркфлоу автоматически по таймеру (каждое утро в фиксированное время), нода OpenWeatherMap ходит в API погодного сервиса и возвращает текущую погоду в указанном городе, нода Telegram Send Message присылает короткий отчёт тебе в чат с собственным ботом.

В задаче ты впервые сам регистрируешься на стороннем сервисе и получаешь свой собственный API-ключ — школа этот сервис не выдаёт, как в случае с OpenAI или Telegram бота через @BotFather ты создаёшь сам.

Готовый воркфлоу: Schedule Trigger → OpenWeatherMap → 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 в нужном сервисе и работаешь с ним.

📖Telegram: как устроен мессенджер — клиенты, серверы, чаты и ботыОткрыть
1.1
Найди @BotFather в Telegram

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

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

В чате с @BotFather отправь команду /newbot. Это команда создания нового бота — после неё @BotFather задаст два вопроса по очереди.

1.3
Заполни отображаемое имя бота

На первый вопрос @BotFather («Alright, a new bot. How are we going to call it?») впиши любое отображаемое имя — то, которое будут видеть пользователи в чате. Например, AI-помощник Вася. Кириллица и пробелы разрешены.

1.4
Заполни username бота

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

Если имя занято — @BotFather попросит ещё раз. Подбирай пока не примет.

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

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

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

Schedule Trigger — это «таймер» внутри n8n. У ноды нет внешнего источника событий: она работает от внутренних часов сервера n8n и запускает воркфлоу автоматически в указанное время.

Это первый в курсе триггер, у которого вообще нет данных на входе — он просто говорит «сейчас 8 утра, запустить воркфлоу». Все данные дальше будет собирать OpenWeatherMap.

📖Schedule Trigger в n8n: расписания и cronстатья · ~3 мин

Schedule Trigger запускает воркфлоу по таймеру

Schedule Trigger — стартовая нода, которая запускает воркфлоу через равные промежутки или по сложному расписанию. Она ничего не запрашивает и не принимает данные извне, просто срабатывает в нужный момент.

Нода находится в сайдбаре через '+' Add node → Triggers → Schedule Trigger. Главный параметр — Trigger Interval. По умолчанию стоит Days и срабатывает раз в сутки в полночь по часовому поясу воркфлоу (по умолчанию — поясу инстанса).

Под каждым режимом Trigger Interval появляются свои поля. В режиме Days это Days Between Triggers, Trigger at Hour и Trigger at Minute. В режиме Minutes — только Minutes Between Triggers. Выбор режима зависит от того, насколько гибким должно быть расписание.

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

  • Seconds, Minutes, Hours, Days, Weeks, Months — простые интервалы. Подходят, когда нужно запускать воркфлоу каждые N единиц времени.
  • Custom (Cron) — для сложных расписаний. В поле Expression пишется 5-польное cron-выражение (минута, час, день месяца, месяц, день недели).
  • Несколько расписаний в одной ноде добавляются кнопкой Add Rule в секции Trigger Rules.

Расписание считается по часовому поясу воркфлоу (Settings → Timezone), по умолчанию — по поясу инстанса n8n, а не по времени на компьютере студента. Воркфлоу должен быть опубликован (Publish), иначе расписание не работает. Кнопка Execute workflow внизу холста запускает воркфлоу один раз вручную и не использует расписание.

Примеры cron-выражений:

0 9 * * *      — каждый день в 9:00
0 9 * * 1-5    — по будням в 9:00
0 */2 * * *    — каждые два часа
Правило одной строкой
Расписание работает только при опубликованном воркфлоу

Schedule Trigger применяет расписание только когда воркфлоу опубликован. Execute workflow всегда игнорирует расписание и запускает выполнение один раз.

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

  • Воркфлоу не срабатывает в ожидаемое время → часовой пояс воркфлоу или инстанса не тот, что ты ожидаешь → проверь Settings → Timezone воркфлоу.
  • Режим Hours срабатывает не в начале часа → в поле Trigger at Minute стоит не 0; поставь 0. Режим Minutes к началу часа не привязывается — для такого расписания бери Hours или Custom (Cron) с выражением 0 * * * *.
  • Воркфлоу вообще не запускается по расписанию → нода работает только при опубликованном воркфлоу, кнопка ручного запуска расписание не применяет.
  • Cron-выражение 0 0 9 * * 1-5 вызывает ошибку → n8n использует 5-польный формат, правильно писать 0 9 * * 1-5.
  • Режим Weeks без выбора дней → по умолчанию Trigger on Weekdays равно Sunday, нужно явно отметить нужные дни в списке.
2.1
Добавь ноду Schedule Trigger

На пустом canvas нажми + → в поиске нод введи schedule → выбери Schedule 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
Открой Settings воркфлоу и проверь Timezone

По умолчанию воркфлоу работает в часовом поясе UTC. Если оставить как есть — 8:00 наступит по UTC, а не по твоему местному времени, и сообщение придёт не утром, а на несколько часов позже.

В правом верхнем углу canvas нажми на иконку шестерёнки Settings → найди параметр Timezone → выбери свой часовой пояс из списка, например Europe/Moscow.

Сохрани настройки.

2.3
Настрой Rule в Schedule Trigger

Открой ноду Schedule Trigger двойным кликом.

В секции Trigger Rules уже есть одно правило по умолчанию.

В поле Trigger Interval оставь значение Days — воркфлоу будет запускаться раз в сутки.

В поле Trigger at Hour выбери 8am — воркфлоу будет запускаться в 8 утра по часовому поясу из настроек.

В поле Trigger at Minute оставь 0.

2.4
Проверь параметры ноды
Параметры Schedule Trigger
ПараметрЗначение
Trigger Rules 1 → Trigger IntervalDays
Trigger Rules 1 → Days Between Triggers1
Trigger Rules 1 → Trigger at Hour8am
Trigger Rules 1 → Trigger at Minute0

Расписание срабатывает раз в сутки в 8:00 — ждать до завтрашнего утра неудобно. Для проверки используй кнопку Execute step — она запускает ноду вручную, как будто наступило время по расписанию.

2.5
Запусти Execute step

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

В блоке Output появится один item с полем timestamp — отметка времени, когда сработал таймер. У Schedule Trigger нет других данных — он только говорит дальше по цепочке «сейчас пора запускаться».

📖Кнопка «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 или временно подменять параметры на безопасные.
Воркфлоу после шага 2 — Schedule Trigger добавлен и протестирован
Воркфлоу после шага 2 — Schedule Trigger добавлен и протестирован
3Зарегистрируйся в OpenWeatherMap и подключи ноду

Третья нода — OpenWeatherMap. Она ходит в публичный API сервиса OpenWeatherMap, получает текущую погоду в указанном городе и отдаёт её в воркфлоу.

Это первая задача курса, где школа НЕ выдаёт credential. Чтобы нода заработала, тебе нужно самому зарегистрироваться на стороннем сервисе и получить собственный API-ключ.

Этот паттерн повторяется во всём курсе: для интеграции с любым внешним сервисом сначала идёшь к нему на сайт, регистрируешь аккаунт, получаешь ключ — и только потом подключаешь в n8n.

3.1
Зарегистрируйся на openweathermap.org

Открой в браузере https://openweathermap.org/ → нажми Sign In → перейди на вкладку Create an Account.

Заполни форму: email, имя, пароль. Привязка карты на бесплатном плане не нужна.

После регистрации зайди в свой аккаунт → раздел API keys → скопируй ключ из колонки Key.

Ловушка: на сайте OpenWeatherMap активно рекламируют One Call API 3.0 — там 1000 бесплатных вызовов в день, но требуется привязка карты. Для этой задачи он не нужен — мы используем базовый Current Weather API, который входит в обычный Free план без карты.

Свежий ключ активируется автоматически — до 2 часов после регистрации. Если на следующем шаге получишь ошибку 401 Unauthorized — подожди и попробуй ещё раз.

3.2
Добавь ноду OpenWeatherMap

Вернись в n8n. На canvas нажми + справа от Schedule Trigger → в поиске нод введи openweather → выбери OpenWeatherMap → в подменю Actions выбери Get the current weather.

Нода автоматически подключится к Schedule Trigger.

3.3
Создай credential OpenWeatherMap

Открой ноду двойным кликом. В поле Credential нажми Create New Credential → в открывшемся окне вставь свой API-ключ в поле Access Token → сохрани.

Этот credential теперь подцепится автоматически в любой ноде OpenWeatherMap во всех твоих воркфлоу.

🔑Как добавить 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.4
Укажи город в поле City

В поле City впиши свой город латиницей, например Moscow. Кириллицу OpenWeatherMap не понимает — пиши только латиницей.

3.5
Проверь Format

В поле Format оставь Metric (стоит по умолчанию) — температура будет в градусах Цельсия. Если случайно стоит Imperial — переключи обратно на Metric.

3.6
Проверь параметры ноды
Параметры OpenWeatherMap
ПараметрЗначение
CredentialOpenWeatherMap account
ResourceCurrent Weather
FormatMetric
CityMoscow
3.7
Запусти Execute step

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

В блоке Output появится JSON с погодой: температура лежит в main.temp, описание погоды — в weather[0].description. Поле weather — это массив, поэтому мы берём его первый элемент по индексу [0].

📖JSON: формат данных, синтаксис и типыОткрыть
Воркфлоу после шага 3 — OpenWeatherMap добавлен и протестирован
Воркфлоу после шага 3 — OpenWeatherMap добавлен и протестирован
4Настрой ноду Telegram

Четвёртая нода — Telegram в режиме Send a text message. Она отправит сводку погоды тебе в чат с ботом, которого ты создал в шаге 1.

В поле Text мы передадим температуру и описание погоды через drag-and-drop из Output ноды OpenWeatherMap.

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

На canvas нажми + справа от OpenWeatherMap → в поиске нод введи telegram → выбери action-ноду Telegram → в подменю Actions выбери Send a text message.

Нода автоматически подключится к OpenWeatherMap.

4.2
Добавь credential Telegram

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

4.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.
4.4
Впиши в поле Text текст-обёртку

В поле Text впиши: Доброе утро! За окном сейчас: (с пробелом в конце — следом подставим температуру).

Это статичная часть сообщения, которая будет одинаковой каждое утро.

4.5
Перетащи temp в поле Text

В панели Input слева раскрой объект main → перетащи поле temp в поле Text сразу после текста-обёртки.

В поле появится выражение {{ $json.main.temp }}.

Это температура в градусах Цельсия (формат Metric мы поставили на шаге 3.5). $json — output предыдущей ноды OpenWeatherMap, потому что Telegram подключён к ней напрямую.

⚡Как передать данные из одной ноды в другую через 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 → проверь что нужная ветка реально дошла до текущей ноды.
📖Что такое 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; если значение постоянное — оставляй фиксированным.

4.6
Допиши °C между температурой и описанием

После выражения {{ $json.main.temp }} допиши °C, (символ градуса, латинская C, запятая, пробел). Это разделитель между числом температуры и описанием погоды, которое сейчас добавим следующим шагом.

4.7
Перетащи description в поле Text

В панели Input слева раскрой массив weather → раскрой [0] → перетащи поле description в поле Text в самый конец.

В поле появится выражение {{ $json.weather[0].description }}.

Это короткое описание погоды (clear sky, light rain и т.д.). weather в API OpenWeatherMap — массив (на случай нескольких слоёв облачности), мы берём первый элемент через [0].

4.8
Выключи 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 — только за подпись.
  • Выключили, но не проверили → подпись осталась → убедись, что переключатель серый.
4.9
Проверь параметры ноды
Параметры Telegram
ПараметрЗначение
CredentialTelegram Bot (тот же, что в шаге 1)
ResourceMessage
OperationSend Message
Chat IDтвой числовой Telegram ID
TextДоброе утро! За окном сейчас: {{ $json.main.temp }}°C, {{ $json.weather[0].description }}
Additional Fields → Append n8n Attributionoff
4.10
Запусти Execute step

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

Если всё настроено верно — в твой Telegram придёт сообщение вида Доброе утро! За окном сейчас: 15.2°C, clear sky. В блоке Output ноды появится JSON-ответ Telegram API с ok: true, message_id и объектом chat.

Готовый воркфлоу: Schedule Trigger → OpenWeatherMap → Telegram
Воркфлоу после шага 4 — все три ноды настроены и протестированы

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

🚀Stretch

Сейчас описание погоды приходит на английском: clear sky, light rain, overcast clouds. Для утреннего сообщения себе это не критично, но читать с утра английский — лишнее усилие. Настрой OpenWeatherMap, чтобы результаты приходили на русском языке.

Тест-кейсы

ВходОжидаем
Execute step в OpenWeatherMap с городом MoscowJSON-ответ с main.temp (число в градусах Цельсия) и weather[0].description (текст-описание погоды).
Город City123 в поле City ноды OpenWeatherMapОшибка 404 - city not found от API OpenWeatherMap.
Ошибочный или пустой Chat ID в TelegramОшибка от Telegram API — 400 Bad Request, chat not found.
Нажатие Execute workflow при заполненных нодахВ Telegram приходит сообщение с реальной температурой и описанием погоды.
Воркфлоу опубликован, наступило время по расписаниюВоркфлоу запускается автоматически по таймеру, в Telegram приходит сообщение со сводкой.
Помощь
Застрял где-то по ходу? Покажи в учебном чате скрин ноды и текст ошибки — разберёмся.
Написать в чат
Собрал воркфлоу? Сдай на ревью
Это демо — задачу можно прочитать целиком. Свой n8n, сдача на ревью и разбор открываются в аккаунте. Заведи аккаунт — модуль M0 бесплатно.

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

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