Подробный туториал по установке и настройки n8n. Примеры интеграции с Python, Node.JS и PHP и взаимодействия с LLM Mistral AI.
092 открытий235 показов
n8n — open-source платформа для автоматизации рабочих процессов (workflow), позволяющая создавать сложные цепочки задач без глубоких знаний программирования.
В статье рассмотрим:
– Установку локально и в облаке;
– Интеграцию с Python, Node.js и PHP;
– Примеры автоматизаций;
– Интеграцию с AI Mistral.
Установка n8n
Локальная установка
Нам потребуется Docker, проверьте установку:
docker --version
Шаги установки:
1. Создайте том данных:
sudo docker volume create n8n_data
2. Запустите контейнер:
sudo docker run -d --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
После запуска откройте: `http://localhost:5678`
Установка на удаленном сервере
Развертывание мы произведем в облаке Amvera, так как в нем n8n предоставляется как преднастроенный сервис с бесплатным доменом (он нам нужен), настроенными переменными и проксированием до заблокированных в РФ LLM (OpenAI, Gemini, Claude и др.).
1. Регистрируемся на Amvera;
2. Выбираем n8n в плитке на главной странице;
3. Вводим название для проекта и выбираем тариф.
Темная сторона open source: как протокол Tea захламляет менеджер пакетов npmtproger.ru
Готово, через 30 секунд запустится n8n с выделенным доменом и настроенными основными переменными.
Настройка n8n
Первоначальная настройка
1. Откройте n8n (локально: `localhost:5678`, в облаке: ваш домен)
2. Заполните данные администратора:
- Имя/Фамилия
- Пароль
3. По желанию вы можете получить бесплатный лицензионный ключ:
- Введите email → “Send me a free license key”
- Активируйте в разделе Settings → Usage
Настройка для HTTP
1. Создайте новый workflow → Start from scratc
2. Добавьте триггер: Webhook – On webhook call
3. Настройте:
- HTTP Method: POST
- Path: `/n8n` (пример)
- Respond Mode: Using ‘Respond to Webhook’ node
4. Добавьте обработчик: Core → Respond to Webhook
5. Настройте ответ:
Примеры использования
Пример на Python
В примере на Python мы сделаем калькулятор. Суть: отправляем выражение через POST, n8n делает вычисление, возвращаем результат.
Workflow:
1. Добавьте Core → Code node между Webhook и Respons:
```javascript return { result: eval($input.first().json.body.expression) };
Клиент (Python):
python import requests while True: expression = input("Введи выражение: ") response = requests.post("http://localhost:5678/webhook/n8n", json={"expression": expression}) print(response.text)
Запустим код и посмотрим результат:
Пример на PHP
В примере на PHP мы сделаем валидацию данных. Суть: отправляем данные через POST, n8n проверяет данные, возвращает результат.
Workflow (Code node):
javascript let errors = {}; let isValid = true; if (!$input.first().json.body.name || $input.first().json.body.name.trim() === '') { errors.name = "Имя обязательно"; isValid = false; } if (!$input.first().json.body.email || !/^S+@S+.S+$/.test($input.first().json.body.email)) { errors.email = "Некорректный email"; isValid = false; } return { result: { json: { status: isValid ? "Валиден" : "Ошибки", errors, originalData: $input.first().json.body } } };
Клиент (PHP):
php $webhookUrl = 'http://localhost:5678/webhook/n8n'; $data = ['name' => 'test', 'email' => 'test@gmail.com']; $ch = curl_init($webhookUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen(json_encode($data)), ]); $response = curl_exec($ch); curl_close($ch); $decodedResponse = json_decode($response, true); echo "Отправленные данные:<br>"; echo "Имя: " . $decodedResponse['json']['originalData']['name'] . "<br>"; echo "Почта: " . $decodedResponse['json']['originalData']['email'] . "<br><br>"; echo "Статус: " . $decodedResponse['json']['status'] . "<br><br>"; if ($decodedResponse['json']['status'] === "Ошибки" && isset($decodedResponse['json']['errors'])) { echo "Обнаружены ошибки:<br>"; $errors = $decodedResponse['json']['errors']; if (isset($errors['name'])) { echo "[Имя]: " . $errors['name'] . "<br>"; } if (isset($errors['email'])) { echo "[Почта]: " . $errors['email'] . "<br>"; } }
Можем зайти на нашу страницу, все работает нормально:
Пример на Node.js
Примером на node.js будет фильтр запрещенных слов. Суть: отправляем текст, n8n проверяет на наличие плохих слов, возвращает результат.
Workflow (Code node):
Javascript const badWords = ["дурак", "лох", "дибил"]; const text = $input.first().json.body.text; const hasBadWords = badWords.some(word => text.includes(word)); return { result: { isClean: !hasBadWords, originalText: text, badWordsFound: hasBadWords ? badWords.filter(word => text.includes(word)) : [] } };
Клиент (Node.js):
javascript const axios = require("axios"); async function checkText(text) { const N8N_URL = "http://localhost:5678/webhook/n8n"; const response = await axios.post(N8N_URL, { text }); return response.data; } function displayResults(results) { if (results && typeof results === 'object' && results.hasOwnProperty('isClean')) { const { isClean, originalText, badWordsFound } = results; console.log(`Исходный текст: "${originalText}"`); if (isClean) { console.log("Статус: Текст чистый, плохих слов не найдено"); } else { console.log("Статус: Найдены плохие слова!"); console.log(`Количество плохих слов: ${badWordsFound.length}`); console.log(`Список плохих слов: ${badWordsFound.join(", ")}`); } } } checkText("Мало того что дурак так еще и лох").then(displayResults);
Перед запуском установим библиотеку командой `npm install axios`
Интеграция n8n с Mistral AI
Мы интегрируем нейросеть Mistral в телеграмм-бота на C# с помощью n8n. Перед тем как начать, нам нужно получить токен.
1. Зарегистрируйтесь на Mistral
2. Создайте агента Сreate an agent
3. Перейдите в раздел API Keys
4. Создайте и скопируйте API-ключ (звездочки наложены):
Теперь нужно создать credentials для работы с созданной моделью. Для этого в правом верхнем углу нажмите Create credentials. В списке найдите Mistral Cloud API. В открывшемся окне вставьте скопированный ключ и сохраните.
Осталось настроить workflow.
1. Добавляем Webhook:
- Method: POST
- PATH: n8n
- Respond: Using ‘Respond to Webhook’ Node
2. Добавляем AI Agent:
- Source for Prompt: Define below
- Prompt: `{{ $json.body.text }}`
3. Подключаем Chat Model к созданному агенту:
- Credential to connect with: Mistral Cloud API
- Model: mistral-large-2411
4. Добавляем Respond to Webhook
Вот так выглядит готовый workflow:
Можем приступить к созданию бота. Для начала введите эти команды по очередности:
bash dotnet new console -n tg-bot dotnet add package Telegram.Bot dotnet add package Newtonsoft.Json
Переходим в папку с кодом и редактируем файл `Program.cs`:
csharp using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; using System.Text; using var cts = new CancellationTokenSource(); var bot = new Telegram.Bot.TelegramBotClient("TOKEN"); var http = new HttpClient(); bot.OnMessage += OnMessage; async Task OnMessage(Message msg, UpdateType type) { if (msg.Text.StartsWith('/')) { if (msg.Text == "/start") { await bot.SendMessage(msg.Chat.Id, "Привет! Я чат-бот с AI Mistral. Просто напиши мне вопрос или задачу и я с радостью помогу тебе решить его."); } return; } string url = "https://localhost:5678/webhook-test/ai"; // замените на свой url var payload = new { text = msg.Text }; var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(payload), Encoding.UTF8, "application/json"); var response = await http.PostAsync(url, content); string responseBody = await response.Content.ReadAsStringAsync(); var result = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(responseBody); await bot.SendMessage(msg.Chat.Id, $"Ответ: {result.output}"); } Console.WriteLine("Бот запущен..."); await Task.Delay(-1, cts.Token);
Запустите бота с помощью команды `dotnet run`.
Автоматизируем с помощью n8n
В примере автоматизации мы сделаем бота, который будет отправлять уведомления при заполнении формы, полностью без кода.
Для работы с Telegram Node понадобиться создать credentials Telegram API. Туда вставляем токен бота, полученный в @BotFater. Сохраняем и переходим к настройке workflow.
Создаем новый workflow.
1. Добавляем On form submission. В качестве примера я создам самую простую форму:
Перейдите по ссылке в Producrion URL чтобы заполнить форму.
2. Добавляем Telegram Node:
- Credential to connect with: Telegram account
- Resource: Message
- Operation: Send message
- Chat ID: вставьте свой telegram id
Text:
Новая заявка! Имя: {{ $json['Ваше имя'] }} Возраст: {{ $json['Ваш возраст'] }} Опыт: {{ $json['Ваш опыт разработки на Python (лет)'] }}
Готово! При новых заявках бот будет присылать уведомления.
Деплой бота в Amvera Cloud
Перед тем как начать деплой, мы должны создать конфигуационнный файл `amvera.yml`. Для этого создаем его в рабочем каталоге с ботом и вводим следующее:
meta: environment: csharp toolchain: name: dotnet version: "8.0" build: image: mcr.microsoft.com/dotnet/sdk:8.0 run: image: mcr.microsoft.com/dotnet/sdk:8.0 buildFileName: publish/tg-bot persistenceMount: /data containerPort: "80" servicePort: "80"
Строго говоря, этот файл проще создать в конфигураторе в интерфейсе.
2. Структура проекта будет такой:
tg-bot/
├── Program.cs
Как работает Reinforcement Learning (обучение с подкреплением)tproger.ru
├── tg-bot.csproj
├── amvera.yml
├── bin/
└── obj/
Идем В Amvera Cloud и создаем приложение Приложения — Создать приложение. Вводим название и выбираем тариф.
Далее загружаем все файлы, что есть у нас в каталоге, с ботом. В конце будет окно с настройкой конфигуцрации, выглядит оно так:
Нажимаем Завершить и ждем когда приложение будет запущено.
Заключение
n8n — мощный инструмент для создания интеграций и автоматизаций. Надеюсь, статья была вам полезна и буду рад обсудить в комментариях любые вопросы!