Глава 6. Триггеры и автоматизация
Воркфлоу может запускаться вручную, по расписанию, через HTTP или в ответ на событие в другом сервисе. Нода, с которой начинается воркфлоу, называется триггером. Только одна нода в воркфлоу может быть триггером — она всегда стоит первой.
Manual Trigger — запуск вручную
Используется при разработке и тестировании. Воркфлоу запускается кнопкой Test workflow в редакторе или кнопкой в меню активных воркфлоу.
Не несёт данных — первая нода после него должна сама получить данные (HTTP Request, Read File и т.д.).
Schedule Trigger — расписание
Аналог cron. Запускает воркфлоу автоматически по заданному времени.
Режим Interval (каждые N единиц)
Поля:
- Every: число (например,
30) - Unit: Seconds / Minutes / Hours / Days / Weeks / Months
Пример: воркфлоу каждые 15 минут:
Every: 15
Unit: MinutesРежим Cron Expression
Для точного управления используйте cron-выражение из 5 полей:
┌───── минута (0-59)
│ ┌───── час (0-23)
│ │ ┌───── день месяца (1-31)
│ │ │ ┌───── месяц (1-12)
│ │ │ │ ┌───── день недели (0-6, 0=Вс)
│ │ │ │ │
* * * * *Примеры:
| Выражение | Когда |
|---|---|
0 9 * * 1-5 | В 9:00 по будням |
0 */6 * * * | Каждые 6 часов |
30 18 * * 5 | В 18:30 по пятницам |
0 0 1 * * | В полночь 1-го числа каждого месяца |
*/5 * * * * | Каждые 5 минут |
Часовой пояс
Schedule Trigger выполняется в UTC по умолчанию. Измените глобальный часовой пояс через env-переменную GENERIC_TIMEZONE=Europe/Moscow или через Settings → n8n settings → Timezone в Cloud-версии.
Режим Custom (конкретные даты)
Задайте конкретное время через интерфейс. Можно добавить несколько расписаний в рамках одного триггера кнопкой Add Rule.
Webhook Trigger — HTTP-вызов
Webhook позволяет запускать воркфлоу через HTTP-запрос от любого внешнего сервиса. GitHub, Stripe, Telegram, Shopify — все они умеют отправлять webhook-уведомления.
URL вебхука
При создании ноды Webhook n8n генерирует уникальный URL:
Test: https://your-n8n.com/webhook-test/abc123-uuid
Production: https://your-n8n.com/webhook/abc123-uuidTest URL — активен только пока открыт редактор и нажата кнопка Listen for Test Event. Production URL — активен всегда, пока воркфлоу активирован.
Настройка ноды
| Параметр | Описание |
|---|---|
| HTTP Method | GET, POST, PUT, PATCH, DELETE (выбрать один или All Methods) |
| Path | Кастомный путь вместо UUID: /github-events |
| Authentication | Защита вебхука (Header Auth, Basic Auth, JWT) |
| Respond | Когда отправить ответ вызывающей стороне |
Режимы ответа (Respond)
Immediately — вернуть {"status": "ok"} сразу при получении запроса, не дожидаясь конца воркфлоу. Правильный выбор для большинства вебхуков.
When Last Node Finishes — вернуть данные, которые вернула последняя нода воркфлоу. Используйте, когда вызывающая сторона ожидает результат (синхронный вебхук).
Using 'Respond to Webhook' Node — ответ отправляется явно через специальную ноду Respond to Webhook с произвольным статусом, заголовками и телом.
Что приходит в данных вебхука
{
"headers": {
"content-type": "application/json",
"x-github-event": "push"
},
"params": {},
"query": { "source": "github" },
"body": {
"ref": "refs/heads/main",
"repository": { "name": "my-repo" }
}
}Доступ в выражениях:
{{ $json.body.repository.name }}
{{ $json.headers['x-github-event'] }}Защита вебхука
Чтобы только ваш сервис мог вызвать вебхук, добавьте проверку подписи через ноду Code:
// Проверка HMAC-подписи (GitHub webhook secret)
const crypto = require('crypto');
const secret = 'your-webhook-secret';
const payload = JSON.stringify($input.item.json.body);
const signature = $input.item.json.headers['x-hub-signature-256'];
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(payload).digest('hex');
if (signature !== expected) {
throw new Error('Invalid webhook signature');
}
return $input.all();Email Trigger (IMAP) — новые письма
Запускается при получении нового письма в почтовом ящике через протокол IMAP.
Настройка Credential типа IMAP:
Host: imap.gmail.com
Port: 993
SSL: yes
User: your@gmail.com
Password: app-password (не основной пароль!)Параметры ноды:
| Параметр | Описание |
|---|---|
| Mailbox | Папка: INBOX, Spam, Sent, или кастомная |
| Action | Mark as Read / Delete after receiving |
| Format | Simple (только текст/HTML) / RAW (полное письмо) |
Gmail
Gmail требует App Password, а не основной пароль аккаунта. Включите двухфакторную аутентификацию, затем создайте App Password в настройках безопасности Google аккаунта.
Сравнение триггеров
| Триггер | Когда использовать |
|---|---|
| Manual | Разработка, тестирование, одноразовые задачи |
| Schedule | Регулярные отчёты, синхронизация данных, уведомления по времени |
| Webhook | Реакция на события в GitHub, Stripe, Telegram и других сервисах |
| Email (IMAP) | Обработка входящей почты, парсинг заказов из писем |
| Chat Trigger | Ответы на сообщения в Telegram, Slack, Discord |
Практика: GitHub CI/CD уведомления
Когда в репозитории GitHub завершается GitHub Actions workflow, отправлять уведомление в Telegram.
Шаг 1 — создайте Webhook в n8n (метод: POST, path: github-actions).
Шаг 2 — в GitHub → Repository → Settings → Webhooks добавьте:
Payload URL: https://your-n8n.com/webhook/github-actions
Content type: application/json
Events: ✓ Workflow runsШаг 3 — воркфлоу в n8n:
Webhook
→ IF: {{ $json.body.action }} equals "completed"
true → IF: {{ $json.body.workflow_run.conclusion }} equals "failure"
true → Telegram (🔴 Сборка упала: {{ $json.body.workflow_run.name }})
false → Telegram (✅ Сборка успешна: {{ $json.body.workflow_run.name }})
false → (ничего не делаем)Activate workflow
Не забудьте активировать воркфлоу (переключатель в верхнем правом углу). Неактивный воркфлоу не реагирует на webhook-запросы и расписание.