Скидка до 60% и курс по ИИ в подарок 3 дня 09 :37 :59 Выбрать курс
Код
#статьи

Платформа n8n: что это такое и как она помогает автоматизировать процессы

Пишем парсер вакансий за три минуты.

Иллюстрация: Оля Ежак для SKillbox Media

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

В этой статье мы установим n8n локально и расскажем, как с ним работать для автоматизации рабочих процессов. А ещё напишем парсер вакансий для ежедневного email-дайджеста.

Содержание


Как работать с n8n

Вся работа проходит на холсте (canvas) — это бесконечный рабочий стол, на котором пользователь строит автоматизации. Холст технически не ограничен в размерах, поэтому дойти до границы не получится.

Процесс работы интуитивно понятен: выбираем из открывающегося меню справа (или по нажатию на Tab) нужные элементы и соединяем их друг с другом на холсте.

Основной интерфейс n8n — редактор с меню выбора элементов
Скриншот: n8n / Skillbox Media

Элементы рабочих процессов в n8n называются узлами, или нодами. Сейчас их доступно более 400 видов. Они помогают включить в пайплайны различные сервисы — от Telegram и Google Sheets до генеративных нейросетей и языковых моделей на основе ИИ.

Ноды делятся на три основных типа: триггеры, операторы и логические узлы.

Триггеры решают, когда запустить процесс — по расписанию, при получении данных или другом событии.

Операторы выполняют конкретные операции с внешними сервисами: добавляют строку в таблицу, отправляют промпт нейросети, записывают данные в файл или извлекают их из него и так далее.

Логические узлы отвечают за преобразование, фильтрацию, объединение и маршрутизацию данных внутри рабочего процесса — например, сортируют данные, редактируют их.

Рабочий процесс из 14 узлов в n8n
Скриншот: n8n / Skillbox Media

Посмотрим на пример с интернет-магазином. Представим, что мы решили автоматизировать для него создание ежедневного отчёта о продажах. Вот какие ноды нам потребуются:

  • начальный триггерный узел, который будет запускать процесс сборки отчёта каждый день в 00:00;
  • узел запроса к сайту магазина — оператор, который отправляет запрос GET по нужному адресу;
  • узел обработки данных — логический нод, который принимает на вход ответ от магазина, обрабатывает его и передаёт в виде отчёта дальше;
  • узел отправки готового отчёта — оператор, который записывает данные из логического узла в файл и отправляет по почте.

Вот и всё. Всего четыре узла позволяют автоматизировать процесс создания и отправки ежедневных отчётов о продажах для магазина.

Но не всё так просто. Ноды в пайплайне необходимо настраивать — прописывать условия работы и выбирать формат входящих и исходящих данных. В n8n есть три варианта настроек: выбор из нескольких заранее прописанных вариантов, заполнение полей вручную (например, url-адреса) или написание кода. Третий вариант доступен в узле Code. Сейчас он полноценно работает только с JavaScript.

Узел Code с полем для ввода кода
Скриншот: n8n / Skillbox Media

Разворачиваем n8n локально

n8n можно развернуть на сервере или локально — через node.js или Docker. Мы воспользуемся вторым вариантом — развернём платформу локально с помощью Docker Desktop.

Если у вас у вас не установлено приложение Docker Desktop, то самое время это сделать.

Сначала установите WSL (Windows Subsystem for Linux) — инструмент, который позволит использовать функции Linux на компьютере с Windows. Для этого выполните две команды в командной строке, запущенной от имени администратора:

wsl --install

wsl --update

После установки и обновления в меню Пуск появится приложение Ubuntu — запустите его от имени администратора. Откроется окно терминала, где необходимо будет установить имя пользователя и пароль от учётной записи операционной системы. Если при установке пароля символы не появляются — это нормально, просто завершите ввод пароля и нажмите Enter. С WSL закончили.

Теперь откройте веб-страницу Docker Desktop, пройдите простую регистрацию и скачайте инсталлятор программы. Запустите инсталлятор и убедитесь, что проставлена галочка Install required Windows components for WSL 2. После окончания установки запустите Docker Desktop — иконка запуска появится на рабочем столе, если вы выбрали соответствующую опцию.

Готовим контейнер с n8n

Запустите приложение Docker Desktop и дождитесь, пока индикатор в левом нижнем углу окна не станет зелёным с надписью Engine running.

Статус запуска программы
Скриншот: Docker Desktop / Skillbox Media

После этого зайдите в Volumes и нажмите Create, чтобы создать хранилище данных для n8n. Назовите его n8n_data.

Созданное хранилище n8n_data появится в списке Volumes
Скриншот: Docker Desktop / Skillbox Media

Скачайте образ n8n. Зайдите в ImagesSearch for images и введите n8n в поле поиска. Скачайте образ n8nio/n8n, выбрав его в списке и нажав Pull.

Скриншот: Docker Desktop / Skillbox Media

Нажмите Run Image (▶️) и установите следующие настройки.


Container namen8n
Ports5678
Volumes
Host pathn8n_data
Container path/home/node/.n8n
Environment variables (создайте две дополнительные переменные кликом на +)
VariableValue
GENERIC_TIMEZONEEurope/Moscow (выбрать можно с помощью подсказки здесь)
TZEurope/Moscow (ваша временная зона)
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONStrue
N8N_RUNNERS_ENABLEDtrue

Нажмите Run и окажетесь в разделе Containers, где побегут строки.

n8n запущен! Веб-интерфейс доступен по адресу http://localhost:5678/

Собираем пайплайн

В этом разделе мы соберём рабочий процесс — добавим стартовый узел, операторы и логические ноды. Создавать будем автоматический дайджест вакансий с сайта hh.ru. Наш пайплайн должен отбирать вакансии по критериям, собирать их в список и отправлять этот список адресату по почте. Разберём весь процесс по шагам.

Шаг 1. Добавляем узел ручного запуска пайплайна

Нажмите кнопку Add workflow в правом верхнем углу — перед вами откроется бесконечное поле в точку. Это ваш рабочий стол для автоматизации. Иногда по умолчанию на нём уже может находиться узел Manual Trigger, который служит кнопкой ручного старта.

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

Шаг 2. Добавляем узел запроса к сайту

Чтобы отправлять запросы во внешние сервисы, добавьте узел HTTP Request. В поле URL введите адрес API HeadHunter: https://api.hh.ru/vacancies, а в секции Query Parameters создайте пять параметров (всего получится шесть). Они сузят поиск до нужных нам рамок.

Мы будем искать вакансии бэкенд-разработчиков — вы можете парсить любые, которые вам интересны. Для этого просто пропишите соответствующее значение для ключа text. Что именно там можно прописать, смотрите в справочнике к документации API hh.ru.

В нашем примере укажем следующие ключи и значения:

  • text = backend;
  • experience = between1And3 (или noExperience для совсем новичков);
  • schedule = remote;
  • salary = 60000;
  • currency = RUR;
  • period = 1.

Параметр salary (зарплата) указывается как среднее значение вилки. Итоговый список будет содержать вакансии с заработной платой, близкой к этим числам. Точные границы диапазона, которые используются для поиска, в документации не указаны.

Параметр period используется для поиска вакансии только за последний день, чтобы вам не приходили одни и те же объявления недельной или месячной давности.

Для оформления запроса по правилам HeadHunter API, нужно прописать заголовки запросов — Headers. Нажмите на ползунок Send Headers, выберите в Specify Headers вариант Using fields below. Появятся поля Name и Value. Соответственно требованиям API указываем в параметрах имя User-Agent и значение MyAppName/1.0 (youremailaddress@yourmaidomenl.com). В скобках — ваша почта.

Скриншот: n8n / Skillbox Media

Нажмите Execute Node, чтобы протестировать запрос к HeadHunter. Если вы всё ввели верно, в окне вывода появится массив данных под названием items, внутри которого будет список актуальных вакансий с названиями компаний, ссылками и зарплатами.

Узел HTTP Request получил ответ на запрос. Его видно в окне Output
Скриншот: n8n / Skillbox Media

Шаг 3. Переводим ответ сайта в удобный для чтения вид

Воспользуемся узлом Code, чтобы пройтись по массиву вакансий и сверстать из них аккуратный список на языке HTML. Добавьте узел CodeCode in JavaScript.

В настройках узла вы увидите три параметра. Работаем только с третьим — JavaScript.

Параметры узла Code. В нужном нам окне параметра стоит код-заглушка
Скриншот: n8n / Skillbox Media

Преобразование массива в свёрстанный список выполнит простой скрипт. Если JavaScript вам незнаком, не проблема — мы подготовили код:

// Получаем массив вакансий из предыдущего узла
const items = $input.all()[0].json.items;

// Если вакансий нет, возвращаем флаг empty и пишем текст письма об этом
if (!items || items.length === 0) {
  return [{json: {html: "<h3>За сегодня новых вакансий не найдено.</h3>", count: 0}}];
}

// Собираем HTML-список
let htmlList = `<h3>Найдено вакансий: ${items.length}</h3><ul>`;
for (const item of items) {
  // Проверяем наличие зарплаты, так как поле может отсутствовать. Если зарплаты в вакансии нет, то явно укажем это
  const salaryInfo = item.salary 
    ? `(от ${item.salary.from || '???'} до ${item.salary.to || '???'} ${item.salary.currency})` 
    : "(з/п не указана)";

// Упаковываем данные конкретной вакансии в строку со ссылкой, а когда вакансии заканчиваются — закрываем список    
  htmlList += `<li><a href="${item.alternate_url}">${item.name}</a> -- <b>${item.employer.name}</b> ${salaryInfo}</li>`;
}
htmlList += "</ul>";

return [{json: {html: htmlList, count: items.length}}];

Замените этим фрагментом код-заглушку и запустите узел. На выходе должен получиться текст с HTML-тегами. Пока что читать его неудобно, но вёрстка нужна для наших писем.

Узел выдал свёрстанный текст в правой части окна
Скриншот: n8n / Skillbox Media

Шаг 4. Отправляем ответ по почте

Для этого шага понадобится почтовый адрес, откуда n8n будет отправлять нам письмо. Обычно на почтовых сервисах для входа через приложения требуется отдельный пароль. Например, в Mail.ru его можно создать во вкладке БезопасностьСпособы входаПароли для внешних приложений. У большинства почтовых сервисов есть такая функция — найдите в своём.

В рабочей области добавьте узел Send email. В настройке Credential to connect with выберите Create new credentialSMTP account. Откроется окно с настройками авторизации. В User введите адрес почты, а в Password — пароль, который сгенерировал почтовый сервис. Port — 465. В Host запишите адрес сервера в формате smtp.<provider>.<1st_level_domain>. Так для почты на домене mail.ru запись будет smtp.mail.ru, а для gmail.com — smtp.gmail.com.

Нажмите Save — и, если всё сделано правильно, появится сообщение Connection tested successfully.

Скриншот: n8n / Skillbox Media

После успешного подключения переходим к наполнению письма. Заполните поля From Email (ваша почта, с которой идёт отправка) и To Email (куда отправлять отчёт), а в поле Subject напишите тему, например Свежие вакансии Backend.

Найдите опцию Format (или переключатель HTML) и переведите её в положение HTML — это обязательно, иначе ссылки не будут работать. Теперь перетащите параметр html из узла Code из левой панели в поле HTML Code или Message или пропишите в этом поле выражение {{ $json.html }}. Если всё сделано правильно, то после нажатия Execute step на панели справа появится item в виде таблицы.

Скриншот: n8n / Skillbox Media

Проверьте почту, первое письмо с вакансиями должно прийти почти мгновенно.

Письмо с вакансиями на почте
Скриншот: Gmail / Skillbox Media

Шаг 5. Тестируем пайплайн и настраиваем расписание

В рабочей области нажмите Execute workflow. Узлы запустятся по цепочке, и появится сообщение Workflow executed successfully, а на почту придёт ещё одно письмо.

Скриншот: n8n / Skillbox Media

Чтобы письма приходили каждый день, поменяйте Manual Trigger на Schedule Trigger и в настройках установите периодичность и время запуска процесса: интервальную единицу триггера (у нас Days), количество этих единиц (у нас 1), час и минуту запуска процесса (у нас Midnight и 0, то есть 00:00).

Скриншот: n8n / Skillbox Media

Теперь, если ваш пайплайн запустить на постоянно работающем сервере, то письма будут приходить каждый день.

Поздравляем! Вы сделали автоматический парсер вакансий. Для этого понадобилось всего четыре узла и немного кода на JavaScript.

Что дальше

Мы рассмотрели несколько базовых узлов — это лишь малая часть возможностей n8n. К счастью, у сервиса прекрасная документация, которая подробно описывает, как работать с разными нодами. Мы рекомендуем начать с core-узлов, а именно — if, switch, merge и sort. Они помогут гибко настраивать процессы для различных сценариев.

Следующим шагом изучите те узлы, функциональность которых вам интересна, — например, Telegram, ИИ, AWS-сервисы или другие. А в качестве задания со звёздочкой предлагаем немного изменить наш пайплайн: вместо отправки списка вакансий по почте реализуйте отправку сообщения в Telegram.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!



Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Курс с трудоустройством: «Профессия Разработчик + ИИ» Узнать о курсе
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована