HTTP-запрос к OpenAI

Продолжим строить сценарий Ask AI. Первым узлом у нас уже есть Webhook. Теперь добавим второй узел — HTTP Request, который будет отправлять запрос к OpenAI и получать ответ.

Примечание. Интерфейс n8n обновляется регулярно. Названия полей и расположение опций могут со временем меняться. Если вы не нашли упомянутый параметр там, где он указан в книге — поищите по смыслу: основные принципы остаются прежними.

Что должен делать запрос

OpenAI принимает обычные HTTP-запросы. Чтобы получить ответ от модели, нужно отправить:

  • метод POST
  • на адрес https://api.openai.com/v1/chat/completions
  • с заголовком авторизации Authorization: Bearer <ваш_API_ключ>
  • с заголовком Content-Type: application/json
  • с телом запроса в формате JSON, в котором указаны модель и сообщения

Минимальное тело запроса выглядит так:

{
  "model": "gpt-4o-mini",
  "messages": [
    { "role": "user", "content": "Расскажи анекдот про программистов." }
  ]
}

Поле model — какую модель использовать. Поле messages — массив сообщений диалога. У каждого сообщения есть role (user, assistant или system) и content (сам текст).

Настройка узла HTTP Request

Добавьте в сценарий узел HTTP Request после Webhook и заполните его параметры:

  • Method: POST
  • URL: https://api.openai.com/v1/chat/completions
  • Authentication: выберите вариант с заголовком Bearer Token или используйте предустановленный тип учётных данных для OpenAI, если он доступен в вашей версии n8n.
  • Headers: добавьте заголовок Content-Type со значением application/json (если он не выставляется автоматически при отправке JSON-тела).
  • Body Content Type: JSON
  • Body: вставьте JSON, как показано выше, и подставьте текст вопроса из webhook через выражение.

Передача вопроса из webhook в запрос

Webhook уже принимает JSON вида { "question": "..." }. Чтобы передать этот вопрос в OpenAI, замените жёстко прописанную строку на выражение:

{
  "model": "gpt-4o-mini",
  "messages": [
    { "role": "user", "content": "{{ $json.body.question }}" }
  ]
}

Запись {{ $json.body.question }} — это выражение n8n. Оно подставит значение поля question из тела webhook-запроса. Подробнее об выражениях — в следующей главе.

Хранение API-ключа

API-ключ OpenAI — это секрет. Не вписывайте его прямо в URL или в тело запроса. Создайте в n8n запись Credentials для OpenAI (или общий тип HTTP Bearer Auth) и выберите её в поле Authentication узла. Тогда ключ будет храниться отдельно от сценария.

Тестирование

Запустите сценарий вручную или отправьте тестовый POST-запрос на webhook из Postman. После выполнения узла HTTP Request посмотрите, что вернула OpenAI. В выходных данных должен появиться объект с полем choices — там и лежит ответ модели. Как извлечь из него текст и вернуть пользователю — в следующем уроке.