0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>18 дек 2025</li>
2
<ul><li>18 дек 2025</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Пишем парсер вакансий за три минуты.</p>
4
</ul><p>Пишем парсер вакансий за три минуты.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Пишет о сетях, инструментах для разработчиков и языках программирования. Любит готовить, играть в инди‑игры и программировать на Python.</p>
6
<p>Пишет о сетях, инструментах для разработчиков и языках программирования. Любит готовить, играть в инди‑игры и программировать на Python.</p>
7
<p><a>n8n</a> - это визуальный конструктор для автоматизации рабочих процессов: сбора информации из различных источников, отправки сообщений, постинга в социальных сетях и тому подобное. Он позволяет соединять разные сервисы и создавать цепочки действий без программирования. Такие цепочки иногда называют конвейерами, пайплайнами или воркфлоу.</p>
7
<p><a>n8n</a> - это визуальный конструктор для автоматизации рабочих процессов: сбора информации из различных источников, отправки сообщений, постинга в социальных сетях и тому подобное. Он позволяет соединять разные сервисы и создавать цепочки действий без программирования. Такие цепочки иногда называют конвейерами, пайплайнами или воркфлоу.</p>
8
<p>В этой статье мы установим n8n локально и расскажем, как с ним работать для автоматизации рабочих процессов. А ещё напишем парсер вакансий для ежедневного email-дайджеста.</p>
8
<p>В этой статье мы установим n8n локально и расскажем, как с ним работать для автоматизации рабочих процессов. А ещё напишем парсер вакансий для ежедневного email-дайджеста.</p>
9
<p><strong>Содержание</strong></p>
9
<p><strong>Содержание</strong></p>
10
<ul><li><a>Как работать с n8n</a></li>
10
<ul><li><a>Как работать с n8n</a></li>
11
<li><a>Как его установить локально на компьютере</a></li>
11
<li><a>Как его установить локально на компьютере</a></li>
12
<li><a>Пишем парсер вакансий</a></li>
12
<li><a>Пишем парсер вакансий</a></li>
13
<li><a>Что дальше</a></li>
13
<li><a>Что дальше</a></li>
14
</ul><p>Вся работа проходит на холсте (canvas) - это бесконечный рабочий стол, на котором пользователь строит автоматизации. Холст технически не ограничен в размерах, поэтому дойти до границы не получится.</p>
14
</ul><p>Вся работа проходит на холсте (canvas) - это бесконечный рабочий стол, на котором пользователь строит автоматизации. Холст технически не ограничен в размерах, поэтому дойти до границы не получится.</p>
15
<p>Процесс работы интуитивно понятен: выбираем из открывающегося меню справа (или по нажатию на <strong>Tab</strong>) нужные элементы и соединяем их друг с другом на холсте.</p>
15
<p>Процесс работы интуитивно понятен: выбираем из открывающегося меню справа (или по нажатию на <strong>Tab</strong>) нужные элементы и соединяем их друг с другом на холсте.</p>
16
Основной интерфейс n8n - редактор с меню выбора элементов<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Элементы рабочих процессов в n8n называются узлами, или нодами. Сейчас их доступно<a>более 400 видов</a>. Они помогают включить в пайплайны различные сервисы - от Telegram и Google Sheets до генеративных нейросетей и языковых моделей на основе ИИ.</p>
16
Основной интерфейс n8n - редактор с меню выбора элементов<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Элементы рабочих процессов в n8n называются узлами, или нодами. Сейчас их доступно<a>более 400 видов</a>. Они помогают включить в пайплайны различные сервисы - от Telegram и Google Sheets до генеративных нейросетей и языковых моделей на основе ИИ.</p>
17
<p>Ноды делятся на три основных типа: триггеры, операторы и логические узлы.</p>
17
<p>Ноды делятся на три основных типа: триггеры, операторы и логические узлы.</p>
18
<p><strong>Триггеры</strong>решают, когда запустить процесс - по расписанию, при получении данных или другом событии.</p>
18
<p><strong>Триггеры</strong>решают, когда запустить процесс - по расписанию, при получении данных или другом событии.</p>
19
<p><strong>Операторы</strong>выполняют конкретные операции с внешними сервисами: добавляют строку в таблицу, отправляют промпт нейросети, записывают данные в файл или извлекают их из него и так далее.</p>
19
<p><strong>Операторы</strong>выполняют конкретные операции с внешними сервисами: добавляют строку в таблицу, отправляют промпт нейросети, записывают данные в файл или извлекают их из него и так далее.</p>
20
<p><strong>Логические узлы</strong>отвечают за преобразование, фильтрацию, объединение и маршрутизацию данных внутри рабочего процесса - например, сортируют данные, редактируют их.</p>
20
<p><strong>Логические узлы</strong>отвечают за преобразование, фильтрацию, объединение и маршрутизацию данных внутри рабочего процесса - например, сортируют данные, редактируют их.</p>
21
Рабочий процесс из 14 узлов в n8n<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Посмотрим на пример с интернет-магазином. Представим, что мы решили автоматизировать для него создание ежедневного отчёта о продажах. Вот какие ноды нам потребуются:</p>
21
Рабочий процесс из 14 узлов в n8n<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Посмотрим на пример с интернет-магазином. Представим, что мы решили автоматизировать для него создание ежедневного отчёта о продажах. Вот какие ноды нам потребуются:</p>
22
<ul><li>начальный триггерный узел, который будет запускать процесс сборки отчёта каждый день в 00:00;</li>
22
<ul><li>начальный триггерный узел, который будет запускать процесс сборки отчёта каждый день в 00:00;</li>
23
<li>узел запроса к сайту магазина - оператор, который отправляет<a>запрос GET</a>по нужному адресу;</li>
23
<li>узел запроса к сайту магазина - оператор, который отправляет<a>запрос GET</a>по нужному адресу;</li>
24
<li>узел обработки данных - логический нод, который принимает на вход ответ от магазина, обрабатывает его и передаёт в виде отчёта дальше;</li>
24
<li>узел обработки данных - логический нод, который принимает на вход ответ от магазина, обрабатывает его и передаёт в виде отчёта дальше;</li>
25
<li>узел отправки готового отчёта - оператор, который записывает данные из логического узла в файл и отправляет по почте.</li>
25
<li>узел отправки готового отчёта - оператор, который записывает данные из логического узла в файл и отправляет по почте.</li>
26
</ul><p>Вот и всё. Всего четыре узла позволяют автоматизировать процесс создания и отправки ежедневных отчётов о продажах для магазина.</p>
26
</ul><p>Вот и всё. Всего четыре узла позволяют автоматизировать процесс создания и отправки ежедневных отчётов о продажах для магазина.</p>
27
<p>Но не всё так просто. Ноды в пайплайне необходимо настраивать - прописывать условия работы и выбирать формат входящих и исходящих данных. В n8n есть три варианта настроек: выбор из нескольких заранее прописанных вариантов, заполнение полей вручную (например, url-адреса) или написание кода. Третий вариант доступен в узле Code. Сейчас он полноценно работает только с JavaScript.</p>
27
<p>Но не всё так просто. Ноды в пайплайне необходимо настраивать - прописывать условия работы и выбирать формат входящих и исходящих данных. В n8n есть три варианта настроек: выбор из нескольких заранее прописанных вариантов, заполнение полей вручную (например, url-адреса) или написание кода. Третий вариант доступен в узле Code. Сейчас он полноценно работает только с JavaScript.</p>
28
Узел Code с полем для ввода кода<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>n8n можно развернуть на сервере или локально - через<a>node.js</a>или Docker. Мы воспользуемся вторым вариантом - развернём платформу локально с помощью Docker Desktop.</p>
28
Узел Code с полем для ввода кода<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>n8n можно развернуть на сервере или локально - через<a>node.js</a>или Docker. Мы воспользуемся вторым вариантом - развернём платформу локально с помощью Docker Desktop.</p>
29
<p>Если у вас у вас не установлено приложение Docker Desktop, то самое время это сделать.</p>
29
<p>Если у вас у вас не установлено приложение Docker Desktop, то самое время это сделать.</p>
30
<p>Сначала установите WSL (Windows Subsystem for Linux) - инструмент, который позволит использовать функции Linux на компьютере с Windows. Для этого выполните две команды в командной строке, запущенной от имени администратора:</p>
30
<p>Сначала установите WSL (Windows Subsystem for Linux) - инструмент, который позволит использовать функции Linux на компьютере с Windows. Для этого выполните две команды в командной строке, запущенной от имени администратора:</p>
31
<p>wsl --install</p>
31
<p>wsl --install</p>
32
<p>wsl --update</p>
32
<p>wsl --update</p>
33
<p>После установки и обновления в меню Пуск появится приложение Ubuntu - запустите его от имени администратора. Откроется окно терминала, где необходимо будет установить имя пользователя и пароль от учётной записи операционной системы. Если при установке пароля символы не появляются - это нормально, просто завершите ввод пароля и нажмите<strong>Enter</strong>. С WSL закончили.</p>
33
<p>После установки и обновления в меню Пуск появится приложение Ubuntu - запустите его от имени администратора. Откроется окно терминала, где необходимо будет установить имя пользователя и пароль от учётной записи операционной системы. Если при установке пароля символы не появляются - это нормально, просто завершите ввод пароля и нажмите<strong>Enter</strong>. С WSL закончили.</p>
34
<p>Теперь откройте<a>веб-страницу Docker Desktop</a>, пройдите простую регистрацию и скачайте инсталлятор программы. Запустите инсталлятор и убедитесь, что проставлена галочка Install required Windows components for WSL 2. После окончания установки запустите Docker Desktop - иконка запуска появится на рабочем столе, если вы выбрали соответствующую опцию.</p>
34
<p>Теперь откройте<a>веб-страницу Docker Desktop</a>, пройдите простую регистрацию и скачайте инсталлятор программы. Запустите инсталлятор и убедитесь, что проставлена галочка Install required Windows components for WSL 2. После окончания установки запустите Docker Desktop - иконка запуска появится на рабочем столе, если вы выбрали соответствующую опцию.</p>
35
<p>Запустите приложение Docker Desktop и дождитесь, пока индикатор в левом нижнем углу окна не станет зелёным с надписью Engine running.</p>
35
<p>Запустите приложение Docker Desktop и дождитесь, пока индикатор в левом нижнем углу окна не станет зелёным с надписью Engine running.</p>
36
Статус запуска программы<em>Скриншот: Docker Desktop / Skillbox Media</em><p>После этого зайдите в Volumes и нажмите Create, чтобы создать хранилище данных для n8n. Назовите его n8n_data.</p>
36
Статус запуска программы<em>Скриншот: Docker Desktop / Skillbox Media</em><p>После этого зайдите в Volumes и нажмите Create, чтобы создать хранилище данных для n8n. Назовите его n8n_data.</p>
37
Созданное хранилище n8n_data появится в списке Volumes<em>Скриншот: Docker Desktop / Skillbox Media</em><p>Скачайте образ n8n. Зайдите в Images → Search for images и введите n8n в поле поиска. Скачайте образ n8nio/n8n, выбрав его в списке и нажав Pull.</p>
37
Созданное хранилище n8n_data появится в списке Volumes<em>Скриншот: Docker Desktop / Skillbox Media</em><p>Скачайте образ n8n. Зайдите в Images → Search for images и введите n8n в поле поиска. Скачайте образ n8nio/n8n, выбрав его в списке и нажав Pull.</p>
38
<em>Скриншот: Docker Desktop / Skillbox Media</em><p>Нажмите Run Image (▶️) и установите следующие настройки.</p>
38
<em>Скриншот: Docker Desktop / Skillbox Media</em><p>Нажмите Run Image (▶️) и установите следующие настройки.</p>
39
Container namen8nPorts5678VolumesHost pathn8n_dataContainer path/home/node/.n8nEnvironment variables (создайте две дополнительные переменные кликом на +)VariableValueGENERIC_TIMEZONEEurope/Moscow (выбрать можно с помощью подсказки<a>здесь</a>)TZEurope/Moscow (ваша временная зона)N8N_ENFORCE_SETTINGS_FILE_PERMISSIONStrueN8N_RUNNERS_ENABLEDtrue<p>Нажмите Run и окажетесь в разделе Containers, где побегут строки.</p>
39
Container namen8nPorts5678VolumesHost pathn8n_dataContainer path/home/node/.n8nEnvironment variables (создайте две дополнительные переменные кликом на +)VariableValueGENERIC_TIMEZONEEurope/Moscow (выбрать можно с помощью подсказки<a>здесь</a>)TZEurope/Moscow (ваша временная зона)N8N_ENFORCE_SETTINGS_FILE_PERMISSIONStrueN8N_RUNNERS_ENABLEDtrue<p>Нажмите Run и окажетесь в разделе Containers, где побегут строки.</p>
40
<p>n8n запущен! Веб-интерфейс доступен по адресу<a>http://localhost:5678/</a></p>
40
<p>n8n запущен! Веб-интерфейс доступен по адресу<a>http://localhost:5678/</a></p>
41
<p>В этом разделе мы соберём рабочий процесс - добавим стартовый узел, операторы и логические ноды. Создавать будем автоматический дайджест вакансий с сайта<a>hh.ru</a>. Наш пайплайн должен отбирать вакансии по критериям, собирать их в список и отправлять этот список адресату по почте. Разберём весь процесс по шагам.</p>
41
<p>В этом разделе мы соберём рабочий процесс - добавим стартовый узел, операторы и логические ноды. Создавать будем автоматический дайджест вакансий с сайта<a>hh.ru</a>. Наш пайплайн должен отбирать вакансии по критериям, собирать их в список и отправлять этот список адресату по почте. Разберём весь процесс по шагам.</p>
42
<p>Нажмите кнопку Add workflow в правом верхнем углу - перед вами откроется бесконечное поле в точку. Это ваш рабочий стол для автоматизации. Иногда по умолчанию на нём уже может находиться узел Manual Trigger, который служит кнопкой ручного старта.</p>
42
<p>Нажмите кнопку Add workflow в правом верхнем углу - перед вами откроется бесконечное поле в точку. Это ваш рабочий стол для автоматизации. Иногда по умолчанию на нём уже может находиться узел Manual Trigger, который служит кнопкой ручного старта.</p>
43
<p>Этот узел позволит нам тестировать бота по клику мышки, не дожидаясь расписания или внешних событий. Он подойдёт нам в начале работы, а потом мы его заменим. Если этого узла нет, то добавьте его из меню с нодами.</p>
43
<p>Этот узел позволит нам тестировать бота по клику мышки, не дожидаясь расписания или внешних событий. Он подойдёт нам в начале работы, а потом мы его заменим. Если этого узла нет, то добавьте его из меню с нодами.</p>
44
<p>Чтобы отправлять запросы во внешние сервисы, добавьте узел HTTP Request. В поле URL введите адрес API HeadHunter: https://api.hh.ru/vacancies, а в секции Query Parameters создайте пять параметров (всего получится шесть). Они сузят поиск до нужных нам рамок.</p>
44
<p>Чтобы отправлять запросы во внешние сервисы, добавьте узел HTTP Request. В поле URL введите адрес API HeadHunter: https://api.hh.ru/vacancies, а в секции Query Parameters создайте пять параметров (всего получится шесть). Они сузят поиск до нужных нам рамок.</p>
45
<p>Мы будем искать вакансии бэкенд-разработчиков - вы можете парсить любые, которые вам интересны. Для этого просто пропишите соответствующее значение для ключа text. Что именно там можно прописать, смотрите<a>в справочнике к документации API hh.ru</a>.</p>
45
<p>Мы будем искать вакансии бэкенд-разработчиков - вы можете парсить любые, которые вам интересны. Для этого просто пропишите соответствующее значение для ключа text. Что именно там можно прописать, смотрите<a>в справочнике к документации API hh.ru</a>.</p>
46
<p>В нашем примере укажем следующие ключи и значения:</p>
46
<p>В нашем примере укажем следующие ключи и значения:</p>
47
<ul><li>text = backend;</li>
47
<ul><li>text = backend;</li>
48
<li>experience = between1And3 (или noExperience для совсем новичков);</li>
48
<li>experience = between1And3 (или noExperience для совсем новичков);</li>
49
<li>schedule = remote;</li>
49
<li>schedule = remote;</li>
50
<li>salary = 60000;</li>
50
<li>salary = 60000;</li>
51
<li>currency = RUR;</li>
51
<li>currency = RUR;</li>
52
<li>period = 1.</li>
52
<li>period = 1.</li>
53
</ul><p>Параметр salary (зарплата) указывается как среднее значение вилки. Итоговый список будет содержать вакансии с заработной платой, близкой к этим числам. Точные границы диапазона, которые используются для поиска, в документации не указаны.</p>
53
</ul><p>Параметр salary (зарплата) указывается как среднее значение вилки. Итоговый список будет содержать вакансии с заработной платой, близкой к этим числам. Точные границы диапазона, которые используются для поиска, в документации не указаны.</p>
54
<p>Параметр period используется для поиска вакансии только за последний день, чтобы вам не приходили одни и те же объявления недельной или месячной давности.</p>
54
<p>Параметр period используется для поиска вакансии только за последний день, чтобы вам не приходили одни и те же объявления недельной или месячной давности.</p>
55
<p>Для оформления запроса<a>по правилам HeadHunter API</a>, нужно прописать заголовки запросов - Headers. Нажмите на ползунок Send Headers, выберите в Specify Headers вариант Using fields below. Появятся поля Name и Value. Соответственно требованиям API указываем в параметрах имя User-Agent и значение MyAppName/1.0 (<a>youremailaddress@yourmaidomenl.com</a>). В скобках - ваша почта.</p>
55
<p>Для оформления запроса<a>по правилам HeadHunter API</a>, нужно прописать заголовки запросов - Headers. Нажмите на ползунок Send Headers, выберите в Specify Headers вариант Using fields below. Появятся поля Name и Value. Соответственно требованиям API указываем в параметрах имя User-Agent и значение MyAppName/1.0 (<a>youremailaddress@yourmaidomenl.com</a>). В скобках - ваша почта.</p>
56
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Нажмите Execute Node, чтобы протестировать запрос к HeadHunter. Если вы всё ввели верно, в окне вывода появится массив данных под названием items, внутри которого будет список актуальных вакансий с названиями компаний, ссылками и зарплатами.</p>
56
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Нажмите Execute Node, чтобы протестировать запрос к HeadHunter. Если вы всё ввели верно, в окне вывода появится массив данных под названием items, внутри которого будет список актуальных вакансий с названиями компаний, ссылками и зарплатами.</p>
57
Узел HTTP Request получил ответ на запрос. Его видно в окне Output<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Воспользуемся узлом Code, чтобы пройтись по массиву вакансий и сверстать из них аккуратный список на языке HTML. Добавьте узел Code → Code in JavaScript.</p>
57
Узел HTTP Request получил ответ на запрос. Его видно в окне Output<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Воспользуемся узлом Code, чтобы пройтись по массиву вакансий и сверстать из них аккуратный список на языке HTML. Добавьте узел Code → Code in JavaScript.</p>
58
<p>В настройках узла вы увидите три параметра. Работаем только с третьим - JavaScript.</p>
58
<p>В настройках узла вы увидите три параметра. Работаем только с третьим - JavaScript.</p>
59
Параметры узла Code. В нужном нам окне параметра стоит код-заглушка<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Преобразование массива в свёрстанный список выполнит простой скрипт. Если JavaScript вам незнаком, не проблема - мы подготовили код:</p>
59
Параметры узла Code. В нужном нам окне параметра стоит код-заглушка<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Преобразование массива в свёрстанный список выполнит простой скрипт. Если JavaScript вам незнаком, не проблема - мы подготовили код:</p>
60
// Получаем массив вакансий из предыдущего узла 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}}];<p>Замените этим фрагментом код-заглушку и запустите узел. На выходе должен получиться текст с HTML-тегами. Пока что читать его неудобно, но вёрстка нужна для наших писем.</p>
60
// Получаем массив вакансий из предыдущего узла 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}}];<p>Замените этим фрагментом код-заглушку и запустите узел. На выходе должен получиться текст с HTML-тегами. Пока что читать его неудобно, но вёрстка нужна для наших писем.</p>
61
Узел выдал свёрстанный текст в правой части окна<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Для этого шага понадобится почтовый адрес, откуда n8n будет отправлять нам письмо. Обычно на почтовых сервисах для входа через приложения требуется отдельный пароль. Например, в <a>Mail.ru</a>его можно создать во вкладке Безопасность → Способы входа → Пароли для внешних приложений. У большинства почтовых сервисов есть такая функция - найдите в своём.</p>
61
Узел выдал свёрстанный текст в правой части окна<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Для этого шага понадобится почтовый адрес, откуда n8n будет отправлять нам письмо. Обычно на почтовых сервисах для входа через приложения требуется отдельный пароль. Например, в <a>Mail.ru</a>его можно создать во вкладке Безопасность → Способы входа → Пароли для внешних приложений. У большинства почтовых сервисов есть такая функция - найдите в своём.</p>
62
<p>В рабочей области добавьте узел Send email. В настройке Credential to connect with выберите Create new credential → SMTP account. Откроется окно с настройками авторизации. В User введите адрес почты, а в Password - пароль, который сгенерировал почтовый сервис. Port - 465. В Host запишите адрес сервера в формате smtp.<provider>.<1st_level_domain>. Так для почты на домене<a>mail.ru</a>запись будет smtp.mail.ru, а для<a>gmail.com</a> - smtp.gmail.com.</p>
62
<p>В рабочей области добавьте узел Send email. В настройке Credential to connect with выберите Create new credential → SMTP account. Откроется окно с настройками авторизации. В User введите адрес почты, а в Password - пароль, который сгенерировал почтовый сервис. Port - 465. В Host запишите адрес сервера в формате smtp.<provider>.<1st_level_domain>. Так для почты на домене<a>mail.ru</a>запись будет smtp.mail.ru, а для<a>gmail.com</a> - smtp.gmail.com.</p>
63
<p>Нажмите Save - и, если всё сделано правильно, появится сообщение Connection tested successfully.</p>
63
<p>Нажмите Save - и, если всё сделано правильно, появится сообщение Connection tested successfully.</p>
64
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>После успешного подключения переходим к наполнению письма. Заполните поля From Email (ваша почта, с которой идёт отправка) и To Email (куда отправлять отчёт), а в поле Subject напишите тему, например Свежие вакансии Backend.</p>
64
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>После успешного подключения переходим к наполнению письма. Заполните поля From Email (ваша почта, с которой идёт отправка) и To Email (куда отправлять отчёт), а в поле Subject напишите тему, например Свежие вакансии Backend.</p>
65
<p>Найдите опцию Format (или переключатель HTML) и переведите её в положение HTML - это обязательно, иначе ссылки не будут работать. Теперь перетащите параметр html из узла Code из левой панели в поле HTML Code или Message или пропишите в этом поле выражение {{ $json.html }}. Если всё сделано правильно, то после нажатия Execute step на панели справа появится item в виде таблицы.</p>
65
<p>Найдите опцию Format (или переключатель HTML) и переведите её в положение HTML - это обязательно, иначе ссылки не будут работать. Теперь перетащите параметр html из узла Code из левой панели в поле HTML Code или Message или пропишите в этом поле выражение {{ $json.html }}. Если всё сделано правильно, то после нажатия Execute step на панели справа появится item в виде таблицы.</p>
66
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Проверьте почту, первое письмо с вакансиями должно прийти почти мгновенно.</p>
66
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Проверьте почту, первое письмо с вакансиями должно прийти почти мгновенно.</p>
67
Письмо с вакансиями на почте<em>Скриншот: Gmail / Skillbox Media</em><p>В рабочей области нажмите Execute workflow. Узлы запустятся по цепочке, и появится сообщение Workflow executed successfully, а на почту придёт ещё одно письмо.</p>
67
Письмо с вакансиями на почте<em>Скриншот: Gmail / Skillbox Media</em><p>В рабочей области нажмите Execute workflow. Узлы запустятся по цепочке, и появится сообщение Workflow executed successfully, а на почту придёт ещё одно письмо.</p>
68
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Чтобы письма приходили каждый день, поменяйте Manual Trigger на Schedule Trigger и в настройках установите периодичность и время запуска процесса: интервальную единицу триггера (у нас Days), количество этих единиц (у нас 1), час и минуту запуска процесса (у нас Midnight и 0, то есть 00:00).</p>
68
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Чтобы письма приходили каждый день, поменяйте Manual Trigger на Schedule Trigger и в настройках установите периодичность и время запуска процесса: интервальную единицу триггера (у нас Days), количество этих единиц (у нас 1), час и минуту запуска процесса (у нас Midnight и 0, то есть 00:00).</p>
69
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Теперь, если ваш пайплайн запустить на постоянно работающем сервере, то письма будут приходить каждый день.</p>
69
<em>Скриншот:<a>n8n</a>/ Skillbox Media</em><p>Теперь, если ваш пайплайн запустить на постоянно работающем сервере, то письма будут приходить каждый день.</p>
70
<p>Поздравляем! Вы сделали автоматический парсер вакансий. Для этого понадобилось всего четыре узла и немного кода на JavaScript.</p>
70
<p>Поздравляем! Вы сделали автоматический парсер вакансий. Для этого понадобилось всего четыре узла и немного кода на JavaScript.</p>
71
<p>Мы рассмотрели несколько базовых узлов - это лишь малая часть возможностей n8n. К счастью, у сервиса прекрасная документация, которая подробно описывает, как работать с разными нодами. Мы рекомендуем начать<a>с core-узлов</a>, а именно - if, switch, merge и sort. Они помогут гибко настраивать процессы для различных сценариев.</p>
71
<p>Мы рассмотрели несколько базовых узлов - это лишь малая часть возможностей n8n. К счастью, у сервиса прекрасная документация, которая подробно описывает, как работать с разными нодами. Мы рекомендуем начать<a>с core-узлов</a>, а именно - if, switch, merge и sort. Они помогут гибко настраивать процессы для различных сценариев.</p>
72
<p>Следующим шагом изучите те узлы, функциональность которых вам интересна, - например, Telegram, ИИ, AWS-сервисы или другие. А в качестве задания со звёздочкой предлагаем немного изменить наш пайплайн: вместо отправки списка вакансий по почте реализуйте отправку сообщения в Telegram.</p>
72
<p>Следующим шагом изучите те узлы, функциональность которых вам интересна, - например, Telegram, ИИ, AWS-сервисы или другие. А в качестве задания со звёздочкой предлагаем немного изменить наш пайплайн: вместо отправки списка вакансий по почте реализуйте отправку сообщения в Telegram.</p>
73
<a>Курс с трудоустройством: "Профессия Разработчик + ИИ" Узнать о курсе</a>
73
<a>Курс с трудоустройством: "Профессия Разработчик + ИИ" Узнать о курсе</a>