Byron Loarte
Para hacer esta práctica se requiere tener saldo en la cuenta de Open AI API Developers ?
Conectar tu código con la API de OpenAI es más sencillo de lo que parece. Solo necesitas una terminal, un editor de código y un runtime de JavaScript para enviar tu primer prompt y recibir una respuesta generada por inteligencia artificial. A continuación se desglosa cada paso esencial para lograrlo sin rodeos.
¿Qué necesitas antes de escribir la primera línea de código?
Antes de tocar el editor, hay tres requisitos que deben estar listos:
Para verificar que Node.js está disponible, basta con ejecutar node -v en la terminal [0:48]. Si la versión es igual o mayor a 20, puedes continuar sin inconvenientes.
¿Cómo se inicializa el proyecto?
El flujo arranca creando una carpeta de trabajo. Con mkdir conexion-terminal && cd conexion-terminal generas el directorio y entras en él de inmediato [1:08]. Después, dentro del editor, ejecutas:
bash npm init -y
Esto produce el archivo package.json, que es el manifiesto donde se registran las dependencias del proyecto [1:38]. Un detalle importante: dentro de ese package.json debes agregar "type": "module" para que Node.js interprete correctamente las importaciones con import en lugar de require [3:15].
¿Cómo se instala la librería de OpenAI?
Con un solo comando obtienes el paquete oficial:
bash npm i openai
Esto descarga la librería, crea la carpeta node_modules y registra openai como dependencia en tu package.json [2:42].
¿Cómo se configura la API key de OpenAI?
La API key es la credencial que autoriza las peticiones. Sin ella, el cliente de OpenAI lanza un error indicando que no hay credenciales disponibles [3:28].
Para generarla, ve al panel de API keys en la plataforma de OpenAI y crea una nueva. Una buena práctica es nombrarla igual que tu proyecto —por ejemplo, "Conexión Terminal"— para recordar dónde la utilizas [4:08]. Esta clave solo se muestra una vez; si la pierdes, tendrás que eliminarla y crear otra.
El valor se almacena en un archivo de variables de entorno. Puedes llamarlo .env, .env.local, .env.development o .env.production, según la convención de tu equipo [4:52]. Dentro colocas:
OPENAI_API_KEY=sk-tu-clave-aquí
¿Por qué Bun.js lee la variable y Node.js no?
Bun.js carga automáticamente los archivos .env al iniciar, mientras que Node.js requiere una configuración explícita [5:32]. Para solucionar esto en Node, puedes pasar la clave directamente al instanciar el cliente:
javascript import OpenAI from 'openai';
const client = new OpenAI({ apiKey: process.env.OPENAI_API_KEY || '' });
Otra alternativa es exportar la variable desde la terminal antes de ejecutar el script [8:32]:
bash export OPENAI_API_KEY="sk-tu-clave-aquí"
Con cualquiera de las dos opciones, Node.js reconoce la credencial y la conexión funciona.
¿Cómo se hace la primera llamada real a la API?
El archivo de debug inicial importa el cliente, lo instancia con logLevel: 'debug' y muestra en consola todas las funciones disponibles: responses, realtime, evals, conversations, entre otras [5:55]. Esto confirma que la conexión está activa.
Para ir más allá del debug, se crea un segundo archivo, cuento.js, que utiliza el endpoint responses [6:38]. La diferencia clave es que ahora se envían dos parámetros obligatorios:
gpt-4o o el más reciente disponible.javascript import OpenAI from 'openai';
const client = new OpenAI();
const response = await client.responses.create({ model: 'gpt-4o', input: 'Escribe una pequeña oración en español sobre un niño que se encuentra un dragón en el bosque' });
console.log(response.output_text);
Al ejecutar bun cuento.js, la respuesta llega en segundos [7:22]: "Un niño se internó en el bosque y detrás de un árbol antiguo encontró un dragón dormido que lo miró con curiosidad". El modelo respeta el idioma, la extensión y la temática indicados en el prompt.
Esta interacción demuestra que la integración de IA en el código es, en esencia, una llamada a una API como cualquier otra: defines la petición, envías los parámetros y recibes la respuesta.
OpenAI ofrece múltiples endpoints más allá de texto —imágenes, audio, completado— que amplían las posibilidades del proyecto. El siguiente paso natural es convertir esta conexión en algo interactivo y probar cada uno de esos endpoints. Mientras tanto, comparte en los comentarios del uno al cinco qué tan complejo te resultó esta primera integración.
Byron Loarte
Para hacer esta práctica se requiere tener saldo en la cuenta de Open AI API Developers ?
Marco Aurelio
Yuly Fuentes
Lo intenté con bun y node pero no funciona.
Marco Aurelio
¡¡¡Hola @Yuly Fuentes!!! La comunidad ama los retos ( al menos yo ), y así como yo estaría dispuesto a ayudarte, otros también siempre que dejes tus errores que te dan los códigos que ejecutes, de esa forma todos podremos aprender algo nuevo juntos 😄😄😄
Jesus Armando Tapia Gallegos
Al segundo intento lo logré, primero empecé con VS Code, y cambié a Windsurf, pero quedo claro al final como se configura, después los cambios y ajustes. Bien explicado, en el paso por paso.
Erasmo Hernández
ProfesorBienvenido entonces al Windsurf team, Jesús!
Daniel Andres Rojas Paredes
bun es otro runtime the java script nuevo optimizado y que supuestamente no es tan chevre para aprender fundamentos
Santiago Pineda Botero
Contexto del curso: Introducción técnica a la integración de la API de OpenAI mediante Node.js y Bun.js, enfocada en la configuración del entorno, autenticación y ejecución de llamadas básicas a modelos.
Conceptos clave: npm init, package.json (type: module), variables de entorno (.env), OpenAI SDK, log level: debug, runtime (Node vs Bun), API Key y endpoints.
Preguntas avanzadas:
type: module?log level: debug al rendimiento en producción?.env.local?dotenv en lugar de export?chat.completions y responses?debug en la privacidad de los datos?client instance en el SDK de OpenAI?node_modules y por qué es necesario?console.log para depuración?require); type: module habilita ES Modules (import).dotenv.process.env; si no está en el shell, el proceso no la ve..env.local puede filtrarse en repositorios si no está en .gitignore..env en Node.try/catch en la promesa del cliente.chat.completions es el estándar actual; responses es una simplificación.max_tokens y el historial.debug (npm package) o inspectores de VS Code.Fuentes: Documentación oficial de OpenAI (implícita en el SDK). Ausencia de fuentes externas citadas.
Vacíos y límites: Omite el manejo de errores (try/catch), seguridad avanzada (secret management), gestión de historial de chat y costos por token.
Aportes publicables:
type: module es obligatorio en proyectos modernos de JS."dotenv y variables de entorno del sistema."Recomendación: Cómo funciona la API de OpenAI
Gabriel Obregón
• 🧠 Meta principal: conectar un proyecto de JavaScript con la API de OpenAI.
• ⚙️ Primero necesitas: terminal, editor de código y Node.js v20+ o Bun.js.
• 📁 Luego creas el proyecto: carpeta nueva, npm init -y y ajuste de "type": "module".
• 📦 Después instalas la librería oficial: npm i openai.
• 🔐 La API key es obligatoria: se genera en OpenAI y se guarda en .env.
• ⚠️ Diferencia importante: Bun carga .env automáticamente, Node normalmente requiere configuración manual.
• 🚀 La conexión real ocurre al hacer una solicitud con client.responses.create(...).
• 🔑 Elementos clave de la solicitud: • model = modelo de IA. • input = instrucción que recibe el modelo.
• 💬 Resultado esperado: el modelo responde según el idioma, la temática y la longitud pedida.
• 🔍 Idea central: OpenAI funciona como cualquier API.
• Envías una petición.
• Agregas parámetros.
• Recibes una respuesta.
• 🔮 Lo aprendido aquí es solo el inicio: además de texto, OpenAI también permite trabajar con imágenes, audio, evaluaciones y conversaciones.
• 🎯 En una frase:
• Preparas el entorno.
• Configuras la clave.
• Instalas la librería.
• Haces la petición.
• Obtienes la respuesta.
Katherine Colmenares
Me gusto, solo que si tuve que hacer varias integraciones porque use phyton, pero muy bien.
John Salcedo
me sirvio con este comando:
node --env-file=.env.local index.js
Daniel Andres Rojas Paredes
Node soporta dos sistemas de módulos:
require(...) y module.exportsimport y exportTu archivo usa import OpenAI from "openai" → sintaxis ES Modules. Pero Node por default asume CommonJS, y require no entiende import. Por eso el SyntaxError.
Las dos soluciones:
"type": "module" en package.json → le dice a Node "todos los .js de este proyecto son ES Modules".mjs → la extensión sola indica ES ModuleEl tutorial eligió opción 1 porque es más limpio para un proyecto entero.
¿Por qué existen los dos? Node nació antes de que JS estándar tuviera módulos, así que inventó CommonJS. Años después el estándar oficial llegó (ES Modules). Node mantiene ambos por compatibilidad.
Maria José Alvarez Perez
es facil para poder realizarlo
Erasmo Hernández
ProfesorUna vez tienes los conocimientos, es mucho más fácil. Pero eso depende del background de cada quien, si para ti es fácil es porque ya tienes una base de conocimientos importante, reconócetelo siempre. :)
JULIO ISMAEL GALINDO GARCÍA
5, por que no tengo instalados los programas, pero con práctica lo hare
Joel David Valverde Gonzalez
Profesor de donde sacas el primer codigo con que configuras el json por qué en la pagina de OpenAi aparece uno parecido pero no es igual?
import OpenAI from "openai"; const client = new OpenAI(); const response = await client.responses.create({ model: "gpt-5.4", tools: [ { type: "web_search" }, ], input: "What was a positive news story from today?", }); console.log(response.output_text);
Erasmo Hernández
ProfesorPueden irse cambiando, recuerda que esto cambia todos los días, la idea de esto es hacer las pruebas con lo que vas encontrando. De hecho, durante la grabación de este curso, nos pasó que el modelo más poderoso que existía al inicio fue reemplazado/superado...
Jose Gomez Lobelo
Me pedí con que software es que lo haremos
Erasmo Hernández
ProfesorPuedes usar el editor que prefieras, yo uso Windsurf, pero tu puedes usar el que quieras.
¡¡¡HOLA A TODOS!!!
para quienes no puedan o quieran dar dinero a openAI par ausar la API pero igualmente quieren practicar este módulo✨, AQUÍ está la solución :
baseURL: "https://generativelanguage.googleapis.com/v1beta/openai",
Agregando esa simple línea de código a client podrás usar los modelos gratuitos de google (GEMINI) con la API de openAI🎉
para quienes quieran un ejemplo, dejaré una script que puedes ejecutar así como vez en la clase, solo recuerda instalar openai dotenv ¡¡¡ES CRUCIAL!!!, esto como parte de que sepas que funciona✅
import readline from "readline"; import dotenv from "dotenv"; import OpenAI from "openai"; dotenv.config(); const client = new OpenAI({ apiKey: "tu llave secreta AQUÍ", baseURL: "https://generativelanguage.googleapis.com/v1beta/openai" }); let historial = [ { role: "system", content: "personalizame AQUÍ" } ]; async function llamarIA(mensaje) { historial.push({ role: "user", content: mensaje }); process.stdout.write("\nIA: "); const stream = await client.chat.completions.create({ model: "gemini-3.1-pro-preview", messages: historial, temperature: 1, stream: true }); let respuestaCompleta = ""; for await (const chunk of stream) { const texto = chunk.choices?.[0]?.delta?.content; if (texto) { process.stdout.write(texto); respuestaCompleta += texto; } } process.stdout.write("\n\n"); historial.push({ role: "assistant", content: respuestaCompleta }); } async function main() { console.log("=== Chat IA (streaming) ==="); console.log("Escribe 'salir' para terminar\n"); console.log("dejame un corazón en el comentario de la clase 🤗\n"); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); const preguntar = (texto) => new Promise((resolve) => rl.question(texto, resolve)); while (true) { const mensaje = await preguntar("Tú: "); if (["salir", "exit", "quit"].includes(mensaje.toLowerCase())) { console.log("Cerrando chat..."); rl.close(); break; } await llamarIA(mensaje); } } main();
una vez comprobado que funciona, puedes continuar con el curso haciendo todo lo que vez cada clase siempre asegurandote de que client tenga la línea :
baseURL: "https://generativelanguage.googleapis.com/v1beta/openai"
🎉Y LISTO🎉 agradecería que dejes tu corazón 🤗