Типичный сценарий использования n8n — связать «триггер — обработку — вывод» в один автоматический процесс: новое письмо превращается в краткое резюме, отправка формы — в классификацию лида, новая строка таблицы — в черновик текста. Если подключить OpenAI, в этих процессах появляется шаг обработки естественного языка, но вместе с ним приходят новые вопросы: как хранить ключ, что писать в Base URL и почему при пакетном запуске счёт внезапно вырастает.

Разберём всё в порядке реальной сборки: сначала выбор способа подключения, затем настройка учётных данных, запуск первого сценария и, наконец, обработка ошибок и контроль расходов. Названия узлов и полей могут отличаться в зависимости от вашей версии n8n.

Примечание: n8n и OpenAI — товарные знаки соответствующих правообладателей; статья не подразумевает аффилированности с этими компаниями. Названия моделей и цены смотрите в разделе тарифов.

1. Как выбрать способ подключения

В n8n есть два распространённых пути к OpenAI:

Способ Когда подходит Плюсы Ограничения
Узел OpenAI Диалог, резюме, классификация, изображения, транскрипция Параметры видны в интерфейсе, учётные данные хранятся централизованно Ограничен набором операций, реализованных в узле
Узел HTTP Request Нужны нестандартные параметры, пакетные запросы или особые поля Гибкость, прямой вызов /v1/chat/completions Тело запроса, авторизацию и обработку ошибок пишете сами

Начните с узла OpenAI, а к HTTP Request переходите по мере необходимости. Не пишите запросы вручную с самого начала, если только вам действительно не нужны параметры, которых нет в узле.

2. Настройка учётных данных и Base URL

В разделе учётных данных n8n создайте запись типа OpenAI и укажите API-ключ. Если используется собственный шлюз, в той же записи заполните Base URL — обычно до /v1. Названия полей и наличие отдельного поля для Base URL зависят от текущей версии.

Несколько практических рекомендаций:

  1. Храните ключ только в учётных данных, не вставляйте его в узел Code или JSON сценария.
  2. Для продакшена и тестов используйте разные ключи — так проще раздельно задавать лимиты и отзывать доступ.
  3. При самостоятельном развёртывании берегите N8N_ENCRYPTION_KEY: после его смены существующие учётные данные не расшифруются.
  4. В Base URL не добавляйте /chat/completions — узел сам допишет путь.
  5. Если экземпляром пользуется команда, разделяйте учётные данные по проектам или используйте виртуальные ключи шлюза.

После настройки проверьте подключение минимальным запросом:

curl https://your-gateway.example.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"your-model-id","messages":[{"role":"user","content":"Ответь только OK"}]}'

3. Запуск первого сценария

Рассмотрим пример «после отправки формы создать черновик ответа»:

  1. Добавьте узел Form Trigger или Webhook, который принимает данные формы.
  2. Добавьте узел OpenAI и выберите операцию отправки сообщения (Message a Model).
  3. Выберите учётные данные и модель, передайте поля формы в промпт через выражение, например {{ $json.message }}.
  4. Добавьте узел Set и оставьте только те поля ответа, которые понадобятся дальше.
  5. Добавьте узел Gmail, Slack или таблицы, чтобы записать результат в нужное место.
  6. Запустите сценарий вручную, проверьте вход и выход каждого узла, затем включите его.

Если используете узел HTTP Request, тело запроса может выглядеть так:

{
  "model": "your-model-id",
  "messages": [
    {"role": "system", "content": "Ты помощник службы поддержки. Отвечай только на основе предоставленных данных."},
    {"role": "user", "content": "{{ $json.message }}"}
  ],
  "temperature": 0.3,
  "max_tokens": 500
}

Обратите внимание на два момента: имена полей в выражении должны совпадать с фактическим выводом предыдущего шага, а ключ передаётся в заголовке Authorization: Bearer <key>, не в JSON.

4. Четыре типа задач, которые стоит автоматизировать

Не каждую задачу имеет смысл отдавать модели. Вот несколько направлений с понятной отдачей:

  • Обработка текста: резюме писем, классификация комментариев, теги для тикетов, перевод.
  • Структурированное извлечение: имя, сумма, дата из заявок, резюме и счетов — с выводом в JSON.
  • Генерация контента: заголовки, преимущества и черновики ответов по строке таблицы с последующей проверкой человеком.
  • Маршрутизация: распределение обращений по ответственным в зависимости от срочности.

Для структурированного извлечения явно задавайте формат вывода и добавляйте после модели узел проверки. Иногда модель дописывает пояснения, и JSON перестаёт разбираться. Помогает промпт «выведи только JSON, без блоков Markdown» и одна повторная попытка.

5. Обработка ошибок: самое недооценённое место

В сценариях без присмотра сбои — норма. Настройте в параметрах узлов следующее:

  1. Retry On Fail: повторять при 429, 5xx и сетевых тайм-аутах, не более 2–3 раз.
  2. Интервал повтора: используйте экспоненциальную задержку, чтобы не усиливать нагрузку при лимитах.
  3. On Error: различайте «остановить сценарий» и «продолжить с записью ошибки» — одна плохая запись не должна обрушивать весь пакет.
  4. Тайм-аут: задайте разумный лимит для HTTP-запросов; для длинных текстов его можно увеличить, но не делать бесконечным.
  5. Сценарий ошибок: собирайте сбои в Slack или почту с ID выполнения и кратким описанием входа.
  6. Идемпотентность: перед повтором проверяйте, не записан ли результат в целевую систему, чтобы не отправить письмо и не провести платёж дважды.

Типовые ошибки удобно разбирать в таком порядке:

Симптом Вероятная причина Что делать
401 Неверный ключ или не выбраны учётные данные Выберите запись заново, проверьте лишние пробелы
404 Неверный путь Base URL Убедитесь, что адрес указан до /v1, без полного пути интерфейса
429 Слишком высокая параллельность или исчерпана квота Снизьте параллельность, включите повтор с задержкой
400 Параметр не поддерживается провайдером Уберите несовместимое поле, сверьте имя модели
Пустой ответ Вывод обрезан или сработал фильтр Увеличьте лимит вывода, проверьте промпт и политику фильтрации
Ошибка разбора JSON Модель добавила лишний текст Ограничьте вывод JSON, повторите запрос один раз

6. Контроль расходов: не позволяйте циклам раздувать счёт

Пакетная обработка в n8n легко превращает один вызов в сотни. Экономить нужно на уровне структуры сценария:

Мера Как реализовать Эффект
Уровни моделей Небольшие модели для классификации и очистки, сильные — для генерации Снижает среднюю стоимость запроса
Ограничение вывода Задайте максимум токенов, просите отвечать кратко Длинные ответы не увеличивают счёт
Объединение запросов Тексты, которые можно обработать пакетно, отправляйте одним запросом Меньше запросов и повторяющегося контекста
Дедупликация Пропускайте уже обработанные записи через базу или кэш Нет повторных вызовов
Усечение контекста Передавайте только нужные поля, длинные тексты сначала сокращайте Меньше входных токенов
Учёт расхода Сохраняйте поле usage из ответа и считайте по сценариям Видно аномальное потребление

Ещё две детали: в цикле каждый вызов тарифицируется отдельно, поэтому всё, что можно объединить, лучше объединить; при отладке не запускайте сценарий на всём массиве — сначала проверьте на одной записи. Конкретные цены смотрите в разделе тарифов.

7. Данные и права доступа

Автоматизация часто соприкасается с клиентскими данными, поэтому заранее определите:

  • какие поля можно отправлять модели, а какие нужно обезличивать или обрабатывать локально;
  • сохраняет ли провайдер запросы и использует ли их для обучения;
  • сколько хранится история выполнений сценария с входными и выходными данными;
  • кто имеет право экспортировать учётные данные и JSON сценариев;
  • на каких этапах, связанных с договорами и персональными данными, нужен ручной контроль.

Самостоятельный хостинг n8n даёт больше контроля над маршрутом данных, но не означает автоматического соответствия требованиям: условия обработки данных у провайдера модели нужно проверять отдельно.

Частые вопросы

Поддерживает ли узел OpenAI в n8n собственный Base URL?

В большинстве версий в учётных данных OpenAI есть поле Base URL для прокси или собственного шлюза. Если в вашей версии такого поля нет, используйте узел HTTP Request и обращайтесь напрямую к /v1/chat/completions.

Почему в редакторе сценарий работает, а по расписанию падает?

Чаще всего различаются область действия учётных данных, переменные окружения или сетевой выход. Посмотрите конкретный узел и код ошибки в истории выполнений, затем проверьте, доступен ли адрес из экземпляра, где запускается расписание.

На что обратить внимание при пакетной обработке сотен записей?

Ограничьте параллельность и число повторов, присвойте каждой записи уникальный идентификатор, сохраняйте исходные данные при сбое. Лучше выполнять обработку партиями с паузами между ними, чтобы не упираться в лимиты.

Как оценить стоимость одного сценария?

Берите поле usage из ответов, суммируйте входные и выходные токены, умножьте на цену модели и добавьте повторы и неудачные запросы. Сначала прогоните 20–50 реальных примеров и усредните результат — это надёжнее оценки на глаз.

Что делать, если модель возвращает нестабильный JSON?

Зафиксируйте в промпте поля и типы, запретите лишние пояснения; добавьте вниз по потоку узел проверки JSON. При ошибке разбора повторите один раз, затем переведите запись в ручную обработку или очередь исключений.

Что дальше

Главное при подключении OpenAI к n8n — не красота схемы, а безопасность ключей, обработка ошибок и понятные границы расходов. Начните с одного реального бизнес-процесса и небольшого трафика, затем расширяйте. Если нужен единый OpenAI-совместимый вход и управление расходом, можно зарегистрироваться в ZSQH AI Gateway; модели и цены смотрите в разделе тарифов.

Читайте также: