В этой статье
Если приложению нужно отвечать на сообщения пользователя с помощью модели OpenAI, интеграция начинается не с ChatGPT Web. Ваш сервер отправляет запрос в OpenAI API, получает ответ модели и возвращает клиенту только нужные данные. Браузер или мобильное приложение в этой схеме знают о вашем endpoint, но не видят секретный ключ OpenAI.
Это важное разделение границ. Подписка ChatGPT и API — разные способы работы с сервисом. Для программного вызова нужен API-ключ и выбранная модель, доступная вашему проекту.
Минимальная схема интеграции
Поток выглядит так:
- Клиент отправляет ваше сообщение на backend.
- Backend вызывает Responses API с выбранной моделью.
- OpenAI возвращает объект ответа.
- Backend извлекает
response.output_textи отдаёт его клиенту.
Ключ остаётся внутри второго шага. Если положить его в JavaScript браузера, пользователь сможет открыть DevTools, перехватить запрос и использовать секрет от вашего имени. API-ключ загружают из переменной окружения или сервиса секретов на сервере; в репозиторий его тоже не коммитят. Это правило описано в документации по аутентификации OpenAI.
Для первого эксперимента возьмём Node.js и официальный пакет openai. Создайте отдельный каталог и установите актуальную версию пакета:
mkdir openai-example
cd openai-example
npm init -y
npm install openai
Версия пакета должна быть актуальной на момент установки. Не стоит копировать номер версии из старой статьи: SDK развивается вместе с API.
Ключ и модель до запуска
Сначала задайте ключ в окружении процесса. В PowerShell это можно сделать так:
$env:OPENAI_API_KEY = "ваш_секретный_ключ"
$env:OPENAI_MODEL = "доступный_id_модели"
В Linux или macOS синтаксис другой:
export OPENAI_API_KEY='ваш_секретный_ключ'
export OPENAI_MODEL='доступный_id_модели'
Не вставляйте эти значения в файл, который попадёт в Git. Для локальной разработки подойдёт файл .env, если он добавлен в .gitignore; в размещённом приложении используйте секреты платформы или менеджер секретов.
У OPENAI_MODEL нет вечного универсального значения. Каталог моделей меняется, а доступ зависит от проекта. Проверьте актуальный ID в каталоге моделей OpenAI или запросите список через Models API Reference. Например, с установленным ключом:
curl https://api.openai.com/v1/models \
-H "Authorization: Bearer $OPENAI_API_KEY"
Выберите модель, которая доступна проекту и соответствует вашей задаче. В коде лучше оставить её конфигурацией, а не зашивать имя в нескольких местах.
Первый запрос из Node.js
Создайте файл index.mjs:
import OpenAI from "openai";
const apiKey = process.env.OPENAI_API_KEY;
const model = process.env.OPENAI_MODEL;
if (!apiKey) {
throw new Error("Не задана переменная OPENAI_API_KEY");
}
if (!model) {
throw new Error("Не задана переменная OPENAI_MODEL");
}
const client = new OpenAI({ apiKey });
const response = await client.responses.create({
model,
input: "В двух предложениях объясни, зачем серверному приложению API.",
});
console.log(response.output_text);
Запустите его в том же процессе, где заданы переменные:
node index.mjs
Вызов client.responses.create отправляет текст модели. Объект response содержит структурированный результат, а response.output_text — удобное текстовое представление ответа для простого сценария. Для первого запроса этого достаточно; разбор отдельных элементов ответа понадобится, когда приложению потребуются инструменты, изображения, структурированные данные или другая форма вывода. Общий маршрут соответствует официальному quickstart OpenAI.
Если сервер написан на Python, используйте тот же маршрут через официальный Python SDK: установите пакет, возьмите ключ и модель из окружения, вызовите Responses API и прочитайте текстовый результат. Отдельный полный туториал для этого сценария не нужен; можно перейти к примеру первого запроса OpenAI API на Python.
Как подключить это к HTTP-серверу
В реальном приложении вместо console.log появится ваш серверный маршрут. Клиент отправляет, например, POST /api/chat с полем message, а backend валидирует вход, вызывает OpenAI и возвращает результат:
app.post("/api/chat", async (req, res) => {
const message = req.body?.message;
if (typeof message !== "string" || message.trim() === "") {
return res.status(400).json({ error: "message обязателен" });
}
try {
const response = await client.responses.create({
model,
input: message,
});
return res.json({ answer: response.output_text });
} catch (error) {
console.error("OpenAI request failed", error);
return res.status(502).json({ error: "Не удалось получить ответ модели" });
}
});
Здесь app — уже созданный экземпляр вашего HTTP-фреймворка, а client и model подготовлены так же, как в минимальном скрипте. Важна граница ответственности: клиент получает answer, но не получает OPENAI_API_KEY и не вызывает OpenAI напрямую.
Если ключ ещё нужно подготовить, пригодится отдельная инструкция по получению API-ключа OpenAI. Сам ключ не следует пересылать в чат, записывать в исходники или добавлять в логи.
Как проверить, что интеграция работает
Проверяйте цепочку снизу вверх:
- Процесс видит
OPENAI_API_KEYиOPENAI_MODEL. - Запрос проходит из серверной среды в OpenAI API.
- Ответ приходит без ошибки HTTP.
response.output_textнепустой и содержит осмысленный текст.
Если скрипт завершается сразу, сначала проверьте имя переменной окружения и не потерялись ли кавычки в командной оболочке. Ошибка о модели обычно означает неверный ID или отсутствие доступа к ней у проекта; свериться с доступными идентификаторами можно в Models API Reference. Ошибка аутентификации указывает на ключ, его окружение или права проекта. После исправления запускайте тот же минимальный скрипт заново — так проще отделить проблему API от ошибки вашего HTTP-маршрута.
Не смешивайте эту проверку с проверкой пользовательской подписки ChatGPT. API-интеграция работает по ключу и выбранной модели. Если из России вам отдельно нужен доступ к цифровому сервису или подписке, можно посмотреть каталог Amber Market: наличие и условия проверяются перед заказом, а заказ в магазине можно оплатить через СБП. Каталог не пополняет OpenAI API и не заменяет API-ключ.
После успешного первого запроса можно переносить этот вызов в серверный endpoint. Хранение истории, потоковая выдача и производственная обработка ошибок — следующие отдельные задачи; для базовой интеграции они не нужны.
Источники
- Developer quickstart — OpenAI APIOpenAI Platform
- API Reference — AuthenticationOpenAI Platform
- Models — OpenAI APIOpenAI Platform
- Models API ReferenceOpenAI Platform