Операция сложения

В этом проекте вы на практике потренируетесь отправлять HTTP‑запросы, поработаете с Postman и создадите свой мини‑калькулятор в n8n, который будет считать примеры и возвращать вам результат.

Создадим сценарий сложения

Зайдите в n8n и создайте новый сценарий. В нём мы будем складывать два числа, которые передадим в качестве параметров.

Дайте название сценарию, например, "Calculator. Plus". img1.png

Создайте узел "Webhook".

Метод POST будет использоваться для отправки данных на сервер. Выберите его в выпадающем списке методов.

В поле Path укажите путь, по которому будет запускаться ваш сценарий: calculator/plus.

В поле Respond оставим Immediately, чтобы сразу отправлять ответ после выполнения этого узла. Мы это значение потом изменим на Using 'Respond on Webhook' node, когда добавим узел для отправки ответа.

img2.png

В верхней части экрана вы увидите URL, по которому будет доступен ваш сценарий в тестовом и продакшн-режиме. Скопируйте тестовый URL, он понадобится для отправки запросов.

Нажмите на кнопку Listen for test event, чтобы включить прослушивание входящих запросов. Это позволит вашему сценарию принимать данные.

После этого узел будет выглядеть так:

img4.png

Тестируем узел с Postman

Откройте Postman и создайте новый запрос.

Выберите метод POST и вставьте скопированный URL в адресную строку.

У меня это https://bogutski.up.railway.app/webhook-test/calсulator/plus. У вас будет свой URL.

Первая часть моего URL https://bogutski.up.railway.app – это адрес моего сервера, вторая часть webhook-test – это путь, который назначает n8n для принятия запросов автоматически, а calculator/plus – это путь, который мы указали в узле "Webhook".

В разделе Body выберите raw и установите тип данных JSON. Введите два числа, которые нужно сложить, в формате JSON:

{
  "operand1": 3,
  "operand2": 2
}

Postman будет выглядеть так:

img2.png

Запрос готов к отправке. Сценарий в n8n находится в режиме ожидания тестового события.

Нажмите на кнопку Send в Postman, чтобы отправить запрос на ваш сценарий в n8n.

Если всё настроено правильно, вы увидите ответ со статусом 200 OK и сообщением:

{
  "message": "Workflow was started"
}

img3.png

Проверяем, что узел сработал

В n8n узел "Webhook" должен получить данные и в правой части появится информация о полученном запросе.

img6.png

Узел "Webhook" успешно получил данные из Postman.

Pin Data – зафиксируем данные

Чтобы сохранить данные, которые мы получили из Postman, нажмите на кнопку Pin Data в правой части узла "Webhook". Это позволит нам использовать эти данные в следующих узлах сценария без необходимости повторно отправлять тестовые данные.

После этого узел будет выглядеть так:

img7.png

Кстати, эти данные можно редактировать прямо в узле.


Чтобы выйти из режима редактирования узла, нажмите на кнопку Back to canvas в левом верхнем углу или на любую темно-серую область вокруг узла – это легче.

Узел "Webhook" будет выглядеть так: img8.png

Иконка пина показывает, что данные зафиксированы и будут доступны в следующих узлах сценария.

Добавляем узел вычисления

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

Нажмите на кнопку с плюсом справа от узла "Webhook" и введите в поиске "code".

img9.png

Выберите узел "Code" из списка. Этот узел позволяет выполнять произвольный код на JavaScript или Python.

img10.png

В поле Language выбран JavaScript, так как мы будем писать код на этом языке.

Замените код в поле Code на следующий:

const operand1 = $input.first().json.body.operand1;
const operand2 = $input.first().json.body.operand2;

return [{ json: { result: operand1 + operand2 } }];

Внимательно проверьте, что код правильно переписан.

Нажмите на кнопку Execute Step, чтобы выполнить этот узел.

Если всё правильно, вы увидите результат сложения в правой части узла:

img11.png

Передача данных между узлами

Визуально узел делится на 3 части. Слева – это входящие данные, в центре – действие, справа – выходящие данные.

Данные, которые узел "Webhook" отдает – узел "Code" принимает.

После выполнения узел "Code" вернет результат в формате JSON. Когда добавим узел после него, то сможем использовать этот результат.

Если узлы связаны, то входящие данные из предыдущего узла будут доступны в текущем узле.

Пояснение кода

В этом коде 3 строки.

В первой строке мы создаем переменную operand1. Ключевое слово const означает, что мы создаем переменную, значение которой не будет изменяться. Это звучит странно, но в JavaScript переменные можно объявлять с помощью let и const.

Знак = означает присваивание значения переменной. То что справа будет присвоено переменной слева.

$input.first().json.body.operand1 – это путь к данным, которые мы получили на вход из предыдущего узла "Webhook".

  • $input – Специфичный синтаксис n8n. Указывает на объект, входящие данные в узел.
  • .first() – Специфичный синтаксис n8n. Означает, что мы берем первый объект из массива входящих данных.
  • .json – Специфичный синтаксис n8n. Это свойство содержит данные в формате JSON.
  • body.operand1 – это путь к конкретному полю в JSON-объекте, которое мы хотим использовать.

Во второй строке мы делаем то же самое для второго числа, только с именем operand2.

В третьей строке мы возвращаем результат сложения в формате JSON.

[
  {
    "result": 5
  }
]

Ключевое слово return означает, что на этом мы завершаем выполнение узла и возвращаем результат.

Добавляем узел для отправки ответа

Теперь добавим узел, который будет отправлять ответ с результатом сложения.

Нажмите на кнопку с плюсом справа от узла "Code" и введите в поиске "respond" и выберите узел "Respond on Webhook".

img12.png

Этот узел будет отправлять ответ на запрос, который мы получили в первом узле "Webhook".

Посмотрите на настройки узла. Respond With установлено в значении All incoming items, что означает, что он будет отправлять ответом все что получил на вход.

img13.png

Вы заметили, что если узлы отвечают в формате JSON, то ответ будет массивом объектов, а не одним объектом, даже если достаточно было бы вернуть один объект. Это важно учитывать при обработке ответа.

Модифицируем первый узел

Теперь нужно изменить узел "Webhook", чтобы он отправлял ответ через узел "Respond on Webhook".

Зайдите в редактирование первого узла "Webhook" и в поле Respond выберите Using 'Respond on Webhook' node.

img14.png

Это значит, что узел "Webhook" будет использовать узел "Respond on Webhook" для отправки ответа на запрос.

Сохраните и активируйте сценарий

Активация сценария позволяет ему работать в фоновом режиме и принимать запросы.

В результате у вас должен получиться такой сценарий из трёх узлов:

img14.png

Теперь вы можете отправлять запросы на ваш сценарий и получать результат сложения двух чисел.

Тестируем сценарий

Вернитесь в Postman и отправьте тот же запрос, что и раньше, но только в адресе замените webhook-test на webhook.

Было https://bogutski.up.railway.app/webhook-test/calсulator/plus

Стало https://bogutski.up.railway.app/webhook/calсulator/plus

{
  "operand1": 3,
  "operand2": 2
}

Почему нужно заменить webhook-test на webhook?

Потому что узел "Webhook" в n8n работает в двух режимах: Test и Production.

В тестовом режиме при отладке сценария он принимает запросы на адрес с webhook-test, а после активации сценария он будет принимать запросы на адрес с webhook.

Отправьте запрос и посмотрите на ответ.

img16.png

Если всё правильно, вы увидите ответ со статусом 200 OK и сообщением:

{
  "result": 5
}

Если вы видите ответ, значит всё работает правильно.

Отладка ошибок

Если сценарий работает не так как ожидалось, или вы видите ошибку, то нужно проверить каждый узел и его настройки.

Пройдитесь по этой инструкции ещё раз и убедитесь, что всё сделано правильно.

Уделяйте внимание деталям.

Если и так не получилось – позовите взрослых на помощь. Они помогут вам разобраться в проблеме.