Пошаговые инструкции Для начинающих 11 мин

HTTP Request в n8n: как получить JSON из API и проверить ответ

Готовый workflow без API-ключей: GET-запрос, разбор JSON, проверка полей, четыре значения на выходе и тесты ошибок.

n8n HTTP Request JSON

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

Результат инструкции

Вы получите workflow из пяти узлов: Manual Trigger → Get Demo Post → Check Post. Ветка true ведёт в Build Result, ветка false - в Reject Response. На выходе будут status, post_id, title и body_length. Данные остаются в результате выполнения n8n: схема не отправляет письма, не меняет записи и не вызывает нейросеть.

HTTP Request сам обращается к внешнему адресу. Webhook, наоборот, принимает входящий запрос. Здесь нужен первый вариант: запуск вручную и чтение учебного API JSONPlaceholder. Его записи вымышленные, а не сведения о настоящих клиентах.

Что понадобится

  • Запущенный n8n и доступ к редактору. Пример проверен на локальном n8n 2.42.4; новый платный аккаунт не нужен.
  • Доступ к интернету у самого n8n. Открытый сайт в вашем браузере ещё не доказывает, что контейнер или облачный экземпляр может выполнить запрос.
  • Новый пустой workflow. Учебный файл не содержит credentials, секретов и автоматической публикации.
  • Для предварительной проверки в Windows - PowerShell и curl.exe. Остальные действия выполняются в редакторе n8n.

Установить n8n локально через Docker

Шаг 1. Проверьте учебный API

В PowerShell выполните команду ниже. Это GET, который читает одну публикацию и ничего не создаёт. Ключ не требуется. В ответе должны быть HTTP 200 и JSON с userId = 1, id = 1, title и body.

powershell
curl.exe --include --max-time 20 "https://jsonplaceholder.typicode.com/posts/1"

Если соединение не установилось, проверьте написание адреса и доступ к сети. Не отключайте проверку сертификата. Эту команду выполняет ваш компьютер; следующий запрос выполнит уже n8n, поэтому его доступ проверим отдельно.

Шаг 2. Скачайте готовый workflow

Скачать n8n-http-request-json-demo.json

Сохраните файл с расширением .json. Если браузер показывает JSON вместо скачивания, сохраните страницу как файл. Внутри пять узлов и только публичные учебные URL. Перед импортом убедитесь, что это полный JSON, а не скопированный фрагмент статьи.

Шаг 3. Импортируйте схему в новый workflow

Откройте Overview → Create workflow. Откройте скачанный файл в текстовом редакторе, выделите всё и скопируйте. Щёлкните свободную область пустой схемы n8n и нажмите Ctrl+V. Другой вариант - Import from File в меню More actions, если этот пункт доступен в вашей версии.

Имя схемы станет ezgpt-http-request-json-demo. Проверьте наличие пяти узлов и нажмите Zoom to Fit. Не вставляйте их поверх рабочего workflow. Выход true у Check Post должен вести в Build Result, выход false - в Reject Response.

n8n: импорт и экспорт workflow

Шаг 4. Проверьте GET, адрес и авторизацию

Дважды щёлкните по значку Get Demo Post. Это узел HTTP Request. На вкладке Parameters проверьте Method = GET, URL - как ниже, Authentication = None. Send Query Parameters, Send Headers и Send Body для этого упражнения не включайте.

text
https://jsonplaceholder.typicode.com/posts/1

None допустимо здесь потому, что выбран публичный учебный API. Для вашего CRM или другого закрытого сервиса понадобятся его собственные credentials и права. Не вставляйте ключ в URL или прямо в текст скачиваемой схемы.

Шаг 5. Включите JSON и полный ответ

В Options проверьте настройку Response: Response Format = JSON, Include Response Headers and Status включено, Never Error выключено. Если настройка не видна, добавьте Response через Add option. В импортированном файле эти параметры уже заданы.

Также установлен Timeout = 15000 миллисекунд. Это настройка ожидания начала ответа в HTTP Request, а не обещание завершить весь workflow за 15 секунд. Ignore SSL Issues не включайте. Never Error здесь не нужен: ошибочные HTTP-коды должны останавливать запрос, а не выглядеть как штатные данные.

n8n: параметры HTTP Request

Шаг 6. Выполните запрос и найдите JSON

Нажмите Execute step в Get Demo Post. После завершения откройте JSON в панели OUTPUT. Должен появиться один item. Благодаря включённому полному ответу у него есть body с публикацией, headers и statusCode. Проверьте statusCode = 200, body.id = 1 и body.userId = 1.

Первое body - оболочка HTTP-ответа. Второе body внутри публикации - сам текст. Поэтому заголовок доступен как $json.body.title, а текст - как $json.body.body. Если отключить Include Response Headers and Status, пути изменятся: публикация будет непосредственно в $json. Не меняйте этот переключатель, не исправив следующие узлы.

json
{
  "body": {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
    "body": "текст учебной публикации"
  },
  "headers": {},
  "statusCode": 200
}

Выше сокращённая схема ответа, а не буквальная копия всех заголовков и текста API. Наличие JSON ещё не означает, что пришла нужная запись. Этим займётся следующий узел.

Шаг 7. Проверьте условие в Check Post

Закройте HTTP-узел и откройте Check Post. Это If. Условия должны быть строгими: Boolean → is true; левое значение - Expression. Импорт уже содержит выражение ниже. При ручной вставке в редактор выражений используйте {{ ... }} без служебного начального знака = из JSON-файла workflow.

javascript
{{ $json.statusCode === 200 && $json.body?.id === 1 && $json.body?.userId === 1 && typeof $json.body?.title === 'string' && $json.body.title.trim().length > 0 && typeof $json.body?.body === 'string' && $json.body.body.trim().length > 0 }}

Условие требует код 200, числовые id = 1 и userId = 1, непустые строки title и body. Число в виде строки "1" не подходит. Это проверка нашего конкретного учебного ответа, а не универсальная JSON Schema. Для другого API измените правила под его контракт, а не выключайте проверку типов ради зелёного запуска.

n8n: узел If и ветвление

Шаг 8. Проверьте четыре поля Build Result

Откройте Build Result - узел Edit Fields (Set). Mode = Manual Mapping. В Fields to Set оставьте четыре поля. status имеет тип String и фиксированное значение checked; остальные значения должны быть в режиме Expression.

  • post_id: Number, {{ $json.body.id }}.
  • title: String, {{ $json.body.title }}.
  • body_length: Number, {{ $json.body.body.length }}.

Include Other Input Fields должен быть выключен. Так на выход не попадут headers и вся исходная публикация. body_length считается свойством length JavaScript: это длина строки, не количество слов и не размер в байтах. Некоторые символы, например emoji, могут занимать две единицы.

n8n: Edit Fields и выбор выходных полей

Шаг 9. Проверьте ветку отказа

Откройте Reject Response - узел Stop And Error. Он подключён только к false у Check Post. В качестве сообщения об ошибке задан текст ниже. Не соединяйте эту ветку с Build Result: отказ должен остановить обработку неподходящих данных.

text
Unexpected demo response: expected HTTP 200, post 1, user 1, nonempty title and body

Ошибка на этой ветке ожидаема: она означает, что API ответил, но данные не прошли нашу проверку. Она отличается от ошибки самого HTTP-запроса, который может остановиться ещё до If.

n8n: Stop And Error

Шаг 10. Запустите всю цепочку

Вернитесь на схему и нажмите Execute workflow. После завершения откройте Build Result → OUTPUT → JSON. Должен быть один item и ровно четыре поля. Для учебной публикации при нашей проверке получился следующий объект:

json
{
  "status": "checked",
  "post_id": 1,
  "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
  "body_length": 158
}

В панели n8n объект показан внутри массива из одного элемента. Это нормально: n8n передаёт items между узлами. Проверьте не только зелёный статус, но и значения полей, отсутствие headers и то, что Reject Response не выполнился. Если API когда-нибудь поменяет учебную запись, сверяйте исходный ответ и правила, а не подгоняйте результат к числу 158.

Шаг 11. Получите 200 с неподходящими данными

В Get Demo Post временно замените URL на адрес ниже. Это существующая задача, а не публикация. Запустите весь workflow заново: API вернёт 200, но нужного строкового поля body не будет. Check Post должен выбрать false, а Reject Response - завершить выполнение ошибкой. Build Result не должен запускаться.

text
https://jsonplaceholder.typicode.com/todos/1

Этот тест показывает, почему одного statusCode = 200 недостаточно. После проверки верните /posts/1. Не оценивайте старые данные в OUTPUT как результат нового запуска: сверяйте время и журнал последнего выполнения.

Шаг 12. Проверьте 404 и восстановите рабочий адрес

Теперь временно укажите несуществующую публикацию:

text
https://jsonplaceholder.typicode.com/posts/999999

Нажмите Execute workflow. При выключенном Never Error запрос остановится в Get Demo Post с 404; Check Post и Build Result не должны выполнить обработку. Верните /posts/1, выполните цепочку ещё раз и убедитесь, что снова получили checked и четыре поля.

Дождитесь сохранения workflow. Публикация для такого ручного запуска не требуется: здесь нет webhook или расписания. Перед завершением проверьте, что в сохранённой схеме оставлен правильный URL, а не один из двух ошибочных примеров.

Если результат отличается

Симптом Причина Что проверить
401 или 403 Не хватает авторизации или прав Credentials и разрешения вашего API
404 Неверный путь или отсутствующая запись URL и идентификатор
Не удаётся разобрать JSON Пришёл HTML или другой формат Тело ответа и Response Format
undefined в выражении Изменилась структура ответа Полный ответ и путь $json.body
Reject Response при 200 Данные не прошли Check Post Типы, id, userId, title и body
ECONNREFUSED на localhost Адрес относится к самому n8n Доступный адрес целевого сервиса

При запросе к локальному сервису из Docker localhost означает контейнер n8n, а не ваш Windows-компьютер. Для сервиса на Windows-хосте обычно нужен host.docker.internal и действительно доступный порт; облачный n8n не увидит ваш компьютер через собственный localhost. Для JSONPlaceholder это не требуется: он доступен по публичному HTTPS-адресу.

При 429 учитывайте лимит и правила API: не запускайте бесконечные повторы. При ошибке сертификата исправляйте адрес или сертификат сервиса, не выключайте SSL-проверку. Ошибки авторизации и ограничения нагрузки в этом упражнении не моделировались.

n8n: типичные ошибки HTTP Request

Как перейти к своему API

Сначала выберите одну операцию чтения и одну тестовую запись. Проверьте документацию сервиса: HTTP-метод, адрес, способ авторизации и ожидаемый формат. Настройте секрет через Credentials, замените URL, затем адаптируйте Check Post и Build Result под фактический JSON. Выражения из этой статьи работают с одним конкретным ответом, а не со всеми API.

Не добавляйте в первую версию оплату, удаление данных, рассылку или изменение CRM. GET обычно используют для чтения, но значение операции определяется документацией конкретного API. Для изменяющих запросов нужны отдельные тесты, защита от дублей и подтверждение человеком. Не разрешайте AI-модели выбирать произвольные URL и отправлять туда credentials.

HTTP-запрос: термин простыми словами

Принимать входящий JSON через Webhook

Следующий этап: ИИ-агент в n8n

Что проверено редакцией

9 октября 2026 года схема проверена на n8n 2.42.4. В отдельной тестовой базе выполнены три реальных HTTP-сценария: правильная публикация, 200 с неподходящим JSON и 404. Все 12 автоматических проверок результата прошли; отдельно проверены восемь вариантов выражения If. В редакторе локального n8n схема импортирована в новый workflow и выполнена вручную: получены checked, post_id = 1, заголовок и body_length = 158. Существующие схемы не изменялись. n8n Cloud, закрытые API, OAuth, ошибки 429 и сбои сертификатов не тестировались. Обложка - редакционная иллюстрация, не снимок интерфейса.

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

Нужен ли API-ключ для этой инструкции?

Нет. Учебный JSONPlaceholder доступен без ключа. Для закрытого сервиса понадобится его способ авторизации, настроенный через Credentials в n8n. Не сохраняйте секрет в URL или скачиваемом JSON workflow.

Почему в выражении два раза body?

Мы включили Include Response Headers and Status. Первое body содержит ответ API, а вложенное body - текст учебной публикации. Поэтому $json.body.body обращается к тексту. При выключении полного ответа структура и выражения меняются.

Почему workflow выдаёт ошибку, хотя HTTP-код 200?

Код 200 означает успешный ответ сервера, а не соответствие нашим требованиям. Check Post отдельно проверяет поля и типы. Если вместо публикации пришла задача /todos/1, сработает Reject Response, потому что в ней нет нужного текста body.

Нужно ли публиковать workflow для HTTP Request?

Для этой схемы нет: она начинается с Manual Trigger и выполняется кнопкой Execute workflow. Если позже добавите расписание или Webhook, настройку запуска и публикацию нужно проверять отдельно.

Можно ли заменить адрес на API своей CRM?

Да, но недостаточно поменять только URL. Проверьте метод, credentials и права, затем адаптируйте выражение If и выбор полей под JSON вашей CRM. Начинайте с тестовой операции чтения, без изменения клиентских данных.

Дальше по теме

Похожие материалы