HTML Diff
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: "&lt;h3&gt;За сегодня новых вакансий не найдено.&lt;/h3&gt;", count: 0}}]; } // Собираем HTML-список let htmlList = `&lt;h3&gt;Найдено вакансий: ${items.length}&lt;/h3&gt;&lt;ul&gt;`; for (const item of items) { // Проверяем наличие зарплаты, так как поле может отсутствовать. Если зарплаты в вакансии нет, то явно укажем это const salaryInfo = item.salary ? `(от ${item.salary.from || '???'} до ${item.salary.to || '???'} ${item.salary.currency})` : "(з/п не указана)"; // Упаковываем данные конкретной вакансии в строку со ссылкой, а когда вакансии заканчиваются - закрываем список htmlList += `&lt;li&gt;&lt;a href="${item.alternate_url}"&gt;${item.name}&lt;/a&gt; -- &lt;b&gt;${item.employer.name}&lt;/b&gt; ${salaryInfo}&lt;/li&gt;`; } htmlList += "&lt;/ul&gt;"; 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: "&lt;h3&gt;За сегодня новых вакансий не найдено.&lt;/h3&gt;", count: 0}}]; } // Собираем HTML-список let htmlList = `&lt;h3&gt;Найдено вакансий: ${items.length}&lt;/h3&gt;&lt;ul&gt;`; for (const item of items) { // Проверяем наличие зарплаты, так как поле может отсутствовать. Если зарплаты в вакансии нет, то явно укажем это const salaryInfo = item.salary ? `(от ${item.salary.from || '???'} до ${item.salary.to || '???'} ${item.salary.currency})` : "(з/п не указана)"; // Упаковываем данные конкретной вакансии в строку со ссылкой, а когда вакансии заканчиваются - закрываем список htmlList += `&lt;li&gt;&lt;a href="${item.alternate_url}"&gt;${item.name}&lt;/a&gt; -- &lt;b&gt;${item.employer.name}&lt;/b&gt; ${salaryInfo}&lt;/li&gt;`; } htmlList += "&lt;/ul&gt;"; 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.&lt;provider&gt;.&lt;1st_level_domain&gt;. Так для почты на домене<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.&lt;provider&gt;.&lt;1st_level_domain&gt;. Так для почты на домене<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>