Как отправлять 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}}. - Настройка узла 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. - Парсинг строки JSON: Если данные пришли как строка в поле
rawData, используйте в узле Code (JavaScript) код:const jsonData = JSON.parse(items[0].json.rawData); return [{json: jsonData}];. - Генерация JSON для отправки: Вы можете создать сложный JSON-объект в коде и передать его следующему узлу, например, HTTP Request.
- Узел Webhook (POST): Создает конечную точку, например,
/webhook/order. Принимает JSON вида:{"orderId": "ABC123", "customerEmail": "client@example.com", "items": [{"name": "Product1", "qty": 2}]}. - Узел Function (или Code): Для валидации и обогащения данных. Добавляем поле timestamp:
const newJson = { ...$json, receivedAt: new Date() }; return [{ json: newJson }];. - Узел HTTP Request (POST): Отправляет обработанные данные во внутреннюю систему учета. URL:
https://internal-api.example.com/orders. В тело запроса (JSON/RAW Body) помещается выражение:{{$json}}для отправки всего полученного и обогащенного объекта. - Узел 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» для отслеживания ошибок.
- В узле HTTP Request установлен «Body Content Type: JSON».
- Заголовок
Content-Type: application/jsonдобавлен вручную в разделе «Headers». Иногда его необходимо добавить, даже если выбрана опция JSON. - Данные в поле «JSON/RAW Body» являются валидным JSON. Проверьте кавычки и запятые.
2. Использование узла HTTP Request
Узел HTTP Request используется, когда n8n должен инициировать запрос к внешнему API и отправить JSON. Это активная операция в отличие от реактивного Webhook.
3. Обработка неструктурированных JSON данных в узле Code
Иногда JSON-данные могут поступать в виде строки или требовать сложной обработки. Узел «Code» (JavaScript или Python) позволяет программно разбирать, валидировать и преобразовывать JSON.
Детальная таблица сравнения методов отправки 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 с информацией о заказе, обрабатывает его и отправляет подтверждение в другой сервис.
Лучшие практики и обработка ошибок
Ответы на часто задаваемые вопросы (FAQ)
Вопрос 1: Как отправить вложенный (nested) JSON объект в теле HTTP Request?
В поле «JSON/RAW Body» укажите полную структуру объекта. Для динамических значений используйте выражения. Пример: {"order": {"id": "{{$json.id}}", "meta": {"source": "web"}}}. n8n корректно сериализует такие структуры.
Вопрос 2: Почему внешний сервис получает от n8n пустое тело запроса или ошибку формата?
Убедитесь в следующем:
Вопрос 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.
Добавить комментарий