Что собираем: шесть узлов от текста до строки таблицы
Шесть узлов и роль каждого в цепочке: Webhook принимает входящее сообщение; Information Extractor разбирает текст на структурированные поля; Ollama Chat Model даёт Information Extractor локальную модель для разбора; Code собирает поля в CSV-строку и добавляет метку времени; Convert to File превращает строку в файловый объект; Read/Write Files from Disk дописывает файл на диск.
Цепочка сознательно устроена так, чтобы разбор заявки шёл локальной моделью, а не внешним API - это убирает и стоимость токенов, и отправку содержимого заявок на сторонний сервер.
Установка: Docker-контейнер за одну команду
Самый предсказуемый способ поднять n8n локально - через Docker, с отдельным томом для данных и отдельной папкой для файлов, которые сценарий будет создавать на диске:
docker volume create n8n_data docker run -it --rm --name n8n -p 5678:5678 \ -e GENERIC_TIMEZONE="Europe/Moscow" -e TZ="Europe/Moscow" \ -e N8N_RUNNERS_ENABLED=true \ -v n8n_data:/home/node/.n8n \ -v ~/.n8n-files:/home/node/.n8n-files \ docker.n8n.io/n8nio/n8n
После запуска редактор открывается на localhost:5678. Альтернатива - запуск через Node.js командой npx n8n, но этот способ считается устаревающим для новых проектов, и Docker для постоянной установки предпочтительнее.
Webhook: приём заявки и разница между тестовым и рабочим адресом
Узел Webhook слушает входящие POST-запросы по конкретному пути, например zayavka. У n8n на этом шаге есть нюанс, который легко пропустить: пока сценарий не опубликован, доступен только тестовый адрес вида http://localhost:5678/webhook-test/zayavka. Рабочий адрес http://localhost:5678/webhook/zayavka начинает принимать запросы только после того, как сценарий явно опубликован (Publish) - присылать заявки на продакшен-адрес до публикации бессмысленно, они просто не долетят.
Information Extractor: четыре поля и выбор модели
Information Extractor вытаскивает из свободного текста заявки четыре конкретных атрибута: имя (если оно упомянуто, иначе пустая строка), задачу (обязательное поле, одно предложение сути запроса), срочность (обязательное поле со значением строго из трёх вариантов - срочно, обычно, не срочно) и контакт (телефон, email или ник, если он есть в тексте). Разбор делает локальная модель через Ollama - это отдельный узел Ollama Chat Model, подключённый к тому же адресу, где крутится Ollama, обычно http://127.0.0.1:11434.
Выбор конкретной модели - это компромисс между скоростью и точностью, а не формальность. Лёгкая модель вроде qwen2.5-coder:3b отвечает быстро - медианное время в районе 0,7 секунды, - но может разобрать заявку не полностью. Модель покрупнее вроде qwen3:4b даёт заметно более точный разбор полей ценой заметно большей задержки - счёт идёт уже на десятки секунд на ответ. Для формы на сайте, где заявка должна обработаться почти мгновенно, это принципиальная развилка выбора модели, а не второстепенная деталь.
Code: сборка строки и типичная ошибка с output
Узел Code превращает четыре извлечённых поля в одну CSV-строку и добавляет к ней метку времени с явно заданным часовым поясом - без этого время сборки может съехать в зависимости от того, где физически стоит сервер. Частая ошибка на этом шаге - обращаться к результату Information Extractor напрямую как к корню объекта, хотя реальные извлечённые поля лежат во вложенном ключе output (то есть правильный путь - что-то вроде item.json.output.zadacha, а не item.json.zadacha). Здесь же стоит явно экранировать запятые и переносы строк внутри значений - иначе одна заявка со случайной запятой в тексте способна сломать структуру CSV-файла.
Convert to File и запись на диск: ограничение по пути
Convert to File превращает готовую строку в файловый объект, а Read/Write Files from Disk дописывает его в конец файла на диске - с включённым режимом добавления (append), а не перезаписи. Здесь есть жёсткое ограничение самого n8n: по умолчанию операции с файлами разрешены только внутри директории ~/.n8n-files - путь за её пределами n8n просто отклонит с ошибкой доступа. Это одна из причин, по которой в Docker-команде эта папка отдельно проброшена как том - без этого записанные файлы исчезали бы вместе с контейнером.
Проверка цепочки
После публикации сценарий можно проверить одним запросом на рабочий адрес:
curl -s -X POST http://localhost:5678/webhook/zayavka \
-H "Content-Type: application/json" \
-d '{"text":"Здравствуйте! Меня зовут Марина, нужен лендинг под запуск курса, стартуем через неделю, горит. Пишите в телеграм @marina_k"}'Если цепочка настроена верно, в файле заявок появится новая строка с именем, задачей, отметкой срочности «срочно» и контактом в Telegram - без единого ручного действия.
Пять граблей, на которые чаще всего наступают
- Учётные данные с адресом
localhostу некоторых узлов не срабатывают - вместо него нужно указывать127.0.0.1. - Пути для файловых операций обязаны оставаться внутри
~/.n8n-files, иначе n8n откажет в доступе. - Результат Information Extractor лежит во вложенном ключе
output, а не в корне объекта. - Форматирование времени требует явно заданного часового пояса, иначе метка времени будет зависеть от настроек сервера.
- После любого изменения сценария его нужно опубликовать заново - иначе рабочий адрес продолжит обслуживать старую версию цепочки.
Сколько это стоит: самостоятельный хостинг и облако
Локальная установка n8n бесплатна и не ограничена по числу запусков сценария. Но бесплатность привязана к конкретной лицензии - Sustainable Use License, - и у неё есть чёткая граница. Разрешено: использовать и дорабатывать n8n внутри своей компании для внутренних задач, оказывать клиентам консалтинг и разработку сценариев на n8n за деньги, встраивать интеграции с n8n в свой продукт. Запрещено без отдельного коммерческого соглашения с n8n: разворачивать n8n как хостинг и брать деньги за доступ к нему, White-label-версии n8n под своим брендом для продажи клиентам.
Официальные облачные тарифы n8n Cloud при годовой оплате: Starter - 20 евро в месяц, 2500 выполнений сценариев; Pro - 50 евро в месяц, 10 000 выполнений; Business - 667 евро в месяц, 40 000 выполнений; Enterprise - цена и объём по запросу. Во все тарифы включены неограниченное число пользователей, сценариев и доступ ко всем интеграциям - разница именно в лимите выполнений и уровне поддержки.
Чек-лист
- Папка для файлов (~/.n8n-files) отдельно проброшена томом в Docker-команде
- Учётные данные Ollama указывают на 127.0.0.1, а не на localhost
- В Code-узле результат Information Extractor читается из вложенного ключа output
- Сценарий явно опубликован (Publish) перед проверкой через рабочий адрес webhook
- Выбор модели для Ollama Chat Model сделан осознанно - скорость против точности разбора