Извлечение ответа и Respond to Webhook

После того как узел HTTP Request получил ответ от OpenAI, в него приходит большой JSON. Пользователю весь этот JSON не нужен — нужен только сам текст ответа модели. Достанем его и вернём в качестве HTTP-ответа на webhook.

Структура ответа OpenAI

Ответ от Chat Completions API выглядит примерно так:

{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "model": "gpt-4o-mini",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Почему программисты путают Хеллоуин и Рождество? Потому что 31 OCT == 25 DEC."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": { "prompt_tokens": 12, "completion_tokens": 24, "total_tokens": 36 }
}

Текст ответа лежит по пути choices[0].message.content.

Узел Respond to Webhook

Сценарий с триггером Webhook сам по себе не возвращает ничего осмысленного, если в настройках webhook выбрано Respond: When Last Node Finishes — он отдаст содержимое последнего узла как есть. Чтобы контролировать ответ, добавьте отдельный узел Respond to Webhook в конце сценария.

В настройках узла Respond to Webhook:

  • Respond With: выберите JSON (или Text, если хотите вернуть просто строку).
  • Response Body: введите JSON, в который положите только нужное поле, например:
{
  "answer": "{{ $json.choices[0].message.content }}"
}

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

Альтернатива: вытащить текст в отдельный узел

Если вы хотите явно отделить шаг «извлечение ответа» от шага «отправка ответа», добавьте между HTTP Request и Respond to Webhook узел, который преобразует данные. Подойдёт Edit Fields (в более старых версиях он назывался Set) — в нём добавьте поле answer со значением {{ $json.choices[0].message.content }}. На выходе у вас будет один объект только с этим полем, и его легко вернуть.

Проверка

Отправьте запрос в Postman:

{ "question": "Объясни рекурсию одним предложением." }

В ответ webhook должен вернуть JSON с полем answer и текстом от модели. Если что-то пошло не так, откройте список executions сценария и посмотрите данные на каждом узле — это самый быстрый способ найти ошибку.