Первый workflow в n8n: расписание, проверка данных и уведомление в Telegram
Собираем первую автоматизацию в n8n: расписание, подготовка данных, проверка условия и отправка уведомления в Telegram.
Содержание статьи
- Что построим
- Что понадобится
- 1. Создаём Telegram-бота
- 2. Узнаём chat ID
- 3. Создаём credentials в n8n
- 4. Добавляем Schedule Trigger
- 5. Добавляем данные через Edit Fields
- 6. Добавляем проверку IF
- 7. Отправляем сообщение в Telegram
- 8. Тестируем до активации
- 9. Что делать, если сообщение не пришло
- Ошибка credentials
- Бот не может написать пользователю
- Неверный chat ID
- IF всегда выдаёт false
- Сообщения приходят слишком часто
- 10. Делаем workflow полезнее
- 11. Активируем workflow
- Безопасность
- Итог
В предыдущей статье мы развернули 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:
- Откройте раздел Credentials.
- Нажмите Add credential.
- Найдите учётные данные Telegram.
- Вставьте токен бота.
- Сохраните credential под понятным именем, например
Telegram — личный бот. - Не вставляйте токен напрямую в узлы 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 в таком порядке:
- Запустите Edit Fields отдельно и проверьте JSON.
- Запустите IF и убедитесь, что данные вышли через
true. - Запустите Telegram-узел отдельно.
- Убедитесь, что сообщение пришло только в нужный чат.
- Измените
enabledнаfalseи проверьте, что Telegram-узел не запускается. - Верните
enabled=true. - Выполните весь 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:
- вызвать
/healthzсобственного сервиса; - проверить HTTP-статус ответа;
- передать результат в IF;
- отправить Telegram только при ошибке или изменении состояния.
Пример логики сообщения:
{{ $json.status === 'ok' ? '✅ Сервис работает' : '🚨 Сервис недоступен' }}
Для production не отправляйте сообщение при каждом успешном запуске. Обычно полезнее уведомлять только об ошибке, а успешные проверки записывать в журнал или отправлять сводкой раз в день.
11. Активируем workflow
Когда ручной запуск прошёл успешно:
- сохраните workflow;
- убедитесь, что credential выбран корректно;
- проверьте часовой пояс;
- проверьте текст и получателя;
- нажмите Activate;
- дождитесь запуска по расписанию;
- проверьте историю выполнения.
Если workflow больше не нужен, отключите его. Не оставляйте тестовые автоматизации активными: они могут расходовать лимиты API и неожиданно отправлять сообщения.
Безопасность
- храните Telegram-токен только в Credentials;
- не вставляйте токен в URL, Markdown, Git или скриншоты;
- используйте отдельного бота для тестов;
- ограничьте workflow личным chat ID;
- не отправляйте в Telegram пароли, API-ключи и персональные данные;
- проверьте ветку
false, чтобы ошибочный статус не выглядел как успешная проверка; - контролируйте частоту запусков и внешние лимиты API.
Итог
В первом workflow мы использовали четыре базовых элемента n8n: расписание, подготовку данных, условие и внешнее действие. Такой шаблон легко расширить запросом к API, проверкой Docker-сервиса, уведомлением об ошибке или ежедневным отчётом.
Главное правило — сначала проверять каждый узел на тестовых данных, затем выполнить весь workflow вручную и только после этого активировать расписание.