Что собираем: шесть узлов от текста до строки таблицы

Шесть узлов и роль каждого в цепочке: 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 - без единого ручного действия.

Пять граблей, на которые чаще всего наступают

  1. Учётные данные с адресом localhost у некоторых узлов не срабатывают - вместо него нужно указывать 127.0.0.1.
  2. Пути для файловых операций обязаны оставаться внутри ~/.n8n-files, иначе n8n откажет в доступе.
  3. Результат Information Extractor лежит во вложенном ключе output, а не в корне объекта.
  4. Форматирование времени требует явно заданного часового пояса, иначе метка времени будет зависеть от настроек сервера.
  5. После любого изменения сценария его нужно опубликовать заново - иначе рабочий адрес продолжит обслуживать старую версию цепочки.

Сколько это стоит: самостоятельный хостинг и облако

Локальная установка 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
  1. Папка для файлов (~/.n8n-files) отдельно проброшена томом в Docker-команде
  2. Учётные данные Ollama указывают на 127.0.0.1, а не на localhost
  3. В Code-узле результат Information Extractor читается из вложенного ключа output
  4. Сценарий явно опубликован (Publish) перед проверкой через рабочий адрес webhook
  5. Выбор модели для Ollama Chat Model сделан осознанно - скорость против точности разбора
Почему вебхук не отвечает, хотя сценарий вроде настроен?
Скорее всего, сценарий ещё не опубликован - до публикации рабочий адрес /webhook/... не принимает запросы, доступен только тестовый адрес /webhook-test/...
Почему в CSV-файле пусто, хотя Information Extractor вроде отработал?
Частая причина - обращение к полям напрямую из корня объекта в Code-узле, хотя реальный результат разбора лежит во вложенном ключе output.
Можно ли писать файлы куда угодно на диске?
Нет, по умолчанию n8n разрешает файловые операции только внутри директории ~/.n8n-files - путь за её пределами будет отклонён с ошибкой доступа.
Какую модель Ollama выбрать для разбора заявок - быструю или точную?
Зависит от сценария: для формы с мгновенным откликом на сайте лучше подходит быстрая лёгкая модель ценой части точности, а для фоновой обработки, где скорость не критична, разумнее выбрать более крупную и точную модель.
Можно ли развернуть n8n у себя и брать с клиентов деньги за доступ к нему как к сервису?
Нет, именно это запрещено Sustainable Use License без отдельного коммерческого соглашения с n8n - разрешена внутренняя эксплуатация, консалтинг и разработка сценариев за деньги, но не перепродажа хостинга самого n8n.
Сколько выполнений сценариев включено в самый дешёвый облачный тариф n8n?
2500 выполнений в месяц на тарифе Starter при цене 20 евро в месяц при годовой оплате.
← Все статьи блога