← Все статьи
TOOLS

Первый workflow в n8n: расписание, проверка данных и уведомление в Telegram

Собираем первую автоматизацию в n8n: расписание, подготовка данных, проверка условия и отправка уведомления в Telegram.

Содержание статьи
  1. Что построим
  2. Что понадобится
  3. 1. Создаём Telegram-бота
  4. 2. Узнаём chat ID
  5. 3. Создаём credentials в n8n
  6. 4. Добавляем Schedule Trigger
  7. 5. Добавляем данные через Edit Fields
  8. 6. Добавляем проверку IF
  9. 7. Отправляем сообщение в Telegram
  10. 8. Тестируем до активации
  11. 9. Что делать, если сообщение не пришло
  12. Ошибка credentials
  13. Бот не может написать пользователю
  14. Неверный chat ID
  15. IF всегда выдаёт false
  16. Сообщения приходят слишком часто
  17. 10. Делаем workflow полезнее
  18. 11. Активируем workflow
  19. Безопасность
  20. Итог

В предыдущей статье мы развернули n8n на собственном сервере. Теперь соберём первую практическую автоматизацию: n8n будет запускаться по расписанию, формировать сообщение, проверять условие и отправлять уведомление в личный Telegram-чат.

Если n8n ещё не установлен, начните с пошаговой статьи об установке n8n на своём сервере.

Workflow специально сделан небольшим. В нём есть все базовые элементы, которые пригодятся дальше: триггер, данные, выражения, условие, credentials и внешнее действие.

Начинайте с личного тестового чата. Не подключайте группу, канал или массовую рассылку, пока не проверили данные и частоту запусков.

Что построим

Schedule Trigger
       │
       ▼
   Edit Fields ──► IF ── true ──► Telegram: Send Message
                     │
                     └─ false ──► ничего не отправляем

Каждый час workflow будет проверять поле enabled. Если оно равно true, в Telegram придёт сообщение. В реальном проекте вместо этого поля можно использовать результат запроса к API, статус сервиса или наличие новых записей в базе.

Что понадобится

  • работающий n8n;
  • Telegram-аккаунт;
  • личный чат, куда можно отправить тестовое сообщение;
  • Telegram-бот, созданный через @BotFather;
  • токен бота;
  • chat ID получателя.

Токен — это пароль бота. Не вставляйте его в обычные текстовые поля workflow и не публикуйте экспорт workflow вместе с credentials.

1. Создаём Telegram-бота

Откройте Telegram, найдите @BotFather и отправьте команду:

/newbot

Задайте отображаемое имя и username, который заканчивается на bot. BotFather выдаст токен примерно такого вида:

123456789:AAExampleTokenDontPublishIt

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

Откройте созданного бота и нажмите Start, иначе бот не сможет написать вам первым.

2. Узнаём chat ID

Отправьте боту любое тестовое сообщение, например test, а затем откройте в браузере:

https://api.telegram.org/bot<TOKEN>/getUpdates

Вместо <TOKEN> подставьте токен бота. В JSON найдите значение:

{"chat":{"id":123456789}}

Число 123456789 — это chat ID. После проверки не сохраняйте полный URL с токеном в истории браузера или публичных заметках.

Для группы сначала добавьте бота в группу и отправьте сообщение. В группах chat ID обычно имеет отрицательное значение.

3. Создаём credentials в n8n

В интерфейсе n8n:

  1. Откройте раздел Credentials.
  2. Нажмите Add credential.
  3. Найдите учётные данные Telegram.
  4. Вставьте токен бота.
  5. Сохраните credential под понятным именем, например Telegram — личный бот.
  6. Не вставляйте токен напрямую в узлы workflow.

Если нужный тип credentials называется иначе в вашей версии n8n, выбирайте вариант для Telegram API и проверяйте подсказки самой формы. Названия узлов и полей могут меняться между версиями.

4. Добавляем Schedule Trigger

Создайте новый workflow и добавьте узел Schedule Trigger.

Для первого теста выберите интервал в 1 час. Если нужно проверить workflow сразу, используйте ручной запуск через Execute workflow, а не ставьте интервал в несколько секунд.

Пример настройки:

  • Trigger Interval: Hours;
  • Hours Between Triggers: 1.

Часовой пояс берётся из настроек n8n и переменной GENERIC_TIMEZONE. Убедитесь, что он соответствует вашему фактическому часовому поясу, иначе расписание будет срабатывать в неожиданное время.

5. Добавляем данные через Edit Fields

После триггера добавьте узел Edit Fields (в старых версиях он мог называться Set). Создайте поля:

Поле Значение
enabled true
service n8n
message Стенд работает, проверка выполнена.

Для enabled выберите тип Boolean, а не строку с текстом true. Это важно: строка и логическое значение могут по-разному обрабатываться в условиях.

На этом этапе запустите узел отдельно и убедитесь, что на выходе получается объект:

{
  "enabled": true,
  "service": "n8n",
  "message": "Стенд работает, проверка выполнена."
}

6. Добавляем проверку IF

Добавьте узел IF после Edit Fields.

Настройте условие:

  • значение 1: {{ $json.enabled }};
  • операция: is true.

Выражение {{ $json.enabled }} означает: взять поле enabled из JSON текущего элемента. Если условие истинно, данные выйдут через ветку true; иначе workflow пойдёт через false.

Вместо Boolean можно проверять строку, но тогда условие будет другим:

{{ $json.status }} is equal to active

Не смешивайте типы без необходимости. Явные Boolean-поля надёжнее, чем строки "true" и "false".

7. Отправляем сообщение в Telegram

От ветки true проведите связь к узлу Telegram и выберите действие Send Message.

Укажите:

  • созданный credential;
  • Chat ID получателя;
  • текст сообщения.

В поле текста можно использовать выражения:

✅ Проверка {{ $json.service }} завершена.

{{ $json.message }}
Время запуска: {{ $now.toISO() }}

n8n подставит значения из текущего элемента. В результате сообщение будет примерно таким:

✅ Проверка n8n завершена.

Стенд работает, проверка выполнена.
Время запуска: 2026-08-23T06:00:00.000+03:00

Если Telegram узел требует chat ID числом, вставьте число без кавычек. Если используете выражение для chat ID, убедитесь, что оно возвращает именно ожидаемый тип.

8. Тестируем до активации

Проверяйте workflow в таком порядке:

  1. Запустите Edit Fields отдельно и проверьте JSON.
  2. Запустите IF и убедитесь, что данные вышли через true.
  3. Запустите Telegram-узел отдельно.
  4. Убедитесь, что сообщение пришло только в нужный чат.
  5. Измените enabled на false и проверьте, что Telegram-узел не запускается.
  6. Верните enabled=true.
  7. Выполните весь workflow через Execute workflow.

До завершения этих проверок не нажимайте Activate. Ручное выполнение позволяет увидеть входные и выходные данные каждого узла и быстрее найти ошибку.

9. Что делать, если сообщение не пришло

Ошибка credentials

Откройте credential и проверьте токен. Если токен случайно попал в публичное место, немедленно отзовите его через BotFather и создайте новый.

Бот не может написать пользователю

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

Неверный chat ID

Повторно запросите getUpdates после отправки сообщения боту и проверьте, что взяли chat.id, а не from.id.

IF всегда выдаёт false

Проверьте тип поля enabled. Если это строка, создайте Boolean-поле или используйте сравнение со строкой. Посмотрите входные данные IF в истории выполнения.

Сообщения приходят слишком часто

Проверьте, не запущен ли workflow одновременно вручную и по расписанию. Проверьте интервал Schedule Trigger и статус Active. Для тестов достаточно одного ручного запуска.

10. Делаем workflow полезнее

После базовой проверки можно заменить Edit Fields реальным источником данных. Например, добавить HTTP Request перед IF:

  1. вызвать /healthz собственного сервиса;
  2. проверить HTTP-статус ответа;
  3. передать результат в IF;
  4. отправить Telegram только при ошибке или изменении состояния.

Пример логики сообщения:

{{ $json.status === 'ok' ? '✅ Сервис работает' : '🚨 Сервис недоступен' }}

Для production не отправляйте сообщение при каждом успешном запуске. Обычно полезнее уведомлять только об ошибке, а успешные проверки записывать в журнал или отправлять сводкой раз в день.

11. Активируем workflow

Когда ручной запуск прошёл успешно:

  1. сохраните workflow;
  2. убедитесь, что credential выбран корректно;
  3. проверьте часовой пояс;
  4. проверьте текст и получателя;
  5. нажмите Activate;
  6. дождитесь запуска по расписанию;
  7. проверьте историю выполнения.

Если workflow больше не нужен, отключите его. Не оставляйте тестовые автоматизации активными: они могут расходовать лимиты API и неожиданно отправлять сообщения.

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

  • храните Telegram-токен только в Credentials;
  • не вставляйте токен в URL, Markdown, Git или скриншоты;
  • используйте отдельного бота для тестов;
  • ограничьте workflow личным chat ID;
  • не отправляйте в Telegram пароли, API-ключи и персональные данные;
  • проверьте ветку false, чтобы ошибочный статус не выглядел как успешная проверка;
  • контролируйте частоту запусков и внешние лимиты API.

Итог

В первом workflow мы использовали четыре базовых элемента n8n: расписание, подготовку данных, условие и внешнее действие. Такой шаблон легко расширить запросом к API, проверкой Docker-сервиса, уведомлением об ошибке или ежедневным отчётом.

Главное правило — сначала проверять каждый узел на тестовых данных, затем выполнить весь workflow вручную и только после этого активировать расписание.

Материал подготовил Злой админ