Как отправлять json запрос на n8n

Как отправлять JSON запрос на n8n: Полное руководство

n8n — это инструмент автоматизации рабочих процессов с открытым исходным кодом, который использует JSON (JavaScript Object Notation) как один из основных форматов для обмена данными между узлами (нодами) и внешними системами. Отправка JSON-запроса в n8n является фундаментальной операцией для интеграции с веб-сервисами, API, базами данных и другими приложениями. Данная статья детально рассматривает методы, лучшие практики и решение распространенных проблем при работе с JSON в n8n.

Основные методы отправки JSON запроса в n8n

В n8n существует несколько ключевых способов отправки и обработки JSON-запросов, каждый из которых применяется в определенных сценариях. Основные методы включают использование встроенных триггеров, HTTP-запросов и обработку входящих данных.

1. Использование узла Webhook

Узел Webhook является основным триггером для получения JSON-данных из внешних систем. Он создает конечную точку (endpoint), которую могут вызывать другие приложения, отправляя JSON в теле POST, PUT, PATCH или GET запроса.

    • Настройка узла Webhook: Добавьте узел Webhook на канвас рабочего процесса. При первой настройке создается уникальный URL. Выберите метод HTTP (чаще всего POST для отправки JSON). В разделе «Options» можно установить «Response Mode» на «Last Node» или «Response Node» для немедленного ответа вызывающей стороне.
    • Отправка JSON на Webhook: Внешнее приложение должно отправить HTTP-запрос на сгенерированный URL, установив заголовок Content-Type: application/json и поместив JSON-объект в тело запроса. Пример с использованием cURL: curl -X POST https://your-n8n-instance.com/webhook/unique-id -H 'Content-Type: application/json' -d '{"key": "value"}'.
    • Доступ к данным в рабочем процессе: Полученный JSON будет доступен в последующих узлах как данные элемента (item). Обратиться к полю key можно через выражение {{$json.key}}.

    2. Использование узла HTTP Request

    Узел HTTP Request используется, когда n8n должен инициировать запрос к внешнему API и отправить JSON. Это активная операция в отличие от реактивного Webhook.

    • Настройка узла HTTP Request: Добавьте узел «HTTP Request» на канвас. Укажите метод запроса (POST, PUT и т.д.) и URL целевого API.
    • Формирование JSON тела запроса:
      • В поле «Send Body» выберите «Yes».
      • В поле «Body Content Type» выберите «JSON».
      • В поле «JSON/RAW Body» введите JSON-данные. Данные могут быть статическими (введенными вручную) или динамическими, собранными с помощью выражений.
    • Пример настройки тела запроса: Для статического JSON: {"userId": 123, "action": "update"}. Для динамического JSON с использованием данных предыдущего узла: {"email": "{{$json.email}}", "status": "processed"}.
    • Заголовки запроса: В разделе «Headers» обязательно добавьте заголовок Content-Type со значением application/json.

    3. Обработка неструктурированных JSON данных в узле Code

    Иногда JSON-данные могут поступать в виде строки или требовать сложной обработки. Узел «Code» (JavaScript или Python) позволяет программно разбирать, валидировать и преобразовывать JSON.

    • Парсинг строки JSON: Если данные пришли как строка в поле rawData, используйте в узле Code (JavaScript) код: const jsonData = JSON.parse(items[0].json.rawData); return [{json: jsonData}];.
    • Генерация JSON для отправки: Вы можете создать сложный JSON-объект в коде и передать его следующему узлу, например, HTTP Request.

    Детальная таблица сравнения методов отправки JSON

    Метод Назначение Направление данных Типичный сценарий использования Ключевые настройки
    Webhook Прием входящих запросов В n8n (входящий) Триггер workflow из внешней системы (например, оповещение от CRM, веб-форма). HTTP Method, Response Mode, Path.
    HTTP Request Отправка запросов к API Из n8n (исходящий) Отправка данных в сторонний сервис (например, создание лида в Salesforce, отправка в Telegram). URL, Method, Headers, Body Content Type, JSON/RAW Body.
    Code Node Обработка и трансформация Внутренняя обработка Парсинг сложных JSON, валидация, преобразование структур, динамическая генерация JSON. Язык (JS/Python), входные данные, возвращаемые элементы.

    Практический пример рабочего процесса: Прием и обработка заказа

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

    1. Узел Webhook (POST): Создает конечную точку, например, /webhook/order. Принимает JSON вида: {"orderId": "ABC123", "customerEmail": "client@example.com", "items": [{"name": "Product1", "qty": 2}]}.
    2. Узел Function (или Code): Для валидации и обогащения данных. Добавляем поле timestamp: const newJson = { ...$json, receivedAt: new Date() }; return [{ json: newJson }];.
    3. Узел HTTP Request (POST): Отправляет обработанные данные во внутреннюю систему учета. URL: https://internal-api.example.com/orders. В тело запроса (JSON/RAW Body) помещается выражение: {{$json}} для отправки всего полученного и обогащенного объекта.
    4. Узел Email (SMTP): Отправляет подтверждение клиенту. В поле «To» указывается {{$json.customerEmail}}, а в теле письма используется выражение для доступа к orderId.

    Лучшие практики и обработка ошибок

    • Валидация структуры JSON: Используйте узел «If» для проверки наличия обязательных полей перед обработкой, например: {{$json.orderId}} exists.
    • Безопасность Webhook: Для публичных инстансов n8n защитите Webhook, используя опцию «Authentication» (например, Header Auth с секретным токеном) или проверку подписи в узле Code.
    • Обработка ошибок API: В узле HTTP Request включите опцию «Continue on Fail». После него добавьте узел «If» для проверки статус-кода ответа ({{$json["__response"].statusCode}}) и организуйте ветвление для сценариев успеха и неудачи.
    • Логирование: Используйте узел «Spreadsheet File» для записи входящих JSON-ов в файл для аудита или узел «Sentry» для отслеживания ошибок.

    Ответы на часто задаваемые вопросы (FAQ)

    Вопрос 1: Как отправить вложенный (nested) JSON объект в теле HTTP Request?

    В поле «JSON/RAW Body» укажите полную структуру объекта. Для динамических значений используйте выражения. Пример: {"order": {"id": "{{$json.id}}", "meta": {"source": "web"}}}. n8n корректно сериализует такие структуры.

    Вопрос 2: Почему внешний сервис получает от n8n пустое тело запроса или ошибку формата?

    Убедитесь в следующем:

    • В узле HTTP Request установлен «Body Content Type: JSON».
    • Заголовок Content-Type: application/json добавлен вручную в разделе «Headers». Иногда его необходимо добавить, даже если выбрана опция JSON.
    • Данные в поле «JSON/RAW Body» являются валидным JSON. Проверьте кавычки и запятые.

Вопрос 3: Как обработать массив JSON объектов, присланный на Webhook?

Если внешний сервис отправляет массив [{...}, {...}] напрямую в теле, n8n автоматически создаст несколько элементов (items) в рабочем процессе — по одному на каждый объект в массиве. Последующие узлы будут обрабатывать их по отдельности или вы можете агрегировать их в узле Code.

Вопрос 4: Как отправить JSON запрос с аутентификацией?

В узле HTTP Request используйте соответствующие параметры аутентификации на вкладке «Authentication». Для API-ключа в заголовке выберите «Header Auth» и укажите имя заголовка (например, X-API-Key) и его значение. Для Bearer Token выберите «Generic Credentials» и укажите токен. n8n автоматически добавит нужные заголовки к вашему JSON-запросу.

Вопрос 5: Как протестировать отправку JSON на локальный Webhook n8n с localhost?

Используйте инструменты вроде cURL, Postman или Insomnia. Если n8n работает локально на порту 5678, URL Webhook будет выглядеть как http://localhost:5678/webhook/unique-id. Убедитесь, что клиент и n8n находятся в одной сети, и нет блокировки брандмауэром.

Вопрос 6: Можно ли отправлять бинарные данные (например, файлы) вместе с JSON?

Да, но это требует особого подхода. Часто используется multipart/form-data кодирование. В узле HTTP Request установите «Body Content Type: Form-Data» или «Multipart-Form-Data». Добавьте параметры: для JSON-части укажите тип «Text», а для файла — «File» и укажите путь к нему. Альтернативно, можно отправить JSON с ссылкой (URL) на файл или закодировать файл в base64 и включить эту строку в JSON-объект.

Заключение

Отправка и прием JSON-запросов составляют основу интеграционных возможностей n8n. Понимание различий между узлами Webhook и HTTP Request, умение работать с выражениями для динамического формирования тел запросов, а также знание принципов обработки ошибок и обеспечения безопасности позволяют создавать надежные и эффективные автоматизированные рабочие процессы. Регулярное обращение к официальной документации n8n и тестирование workflow на этапе разработки являются ключевыми факторами успешной реализации интеграций с использованием JSON.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *