Documentación

Crea una app de chat en la documentación de NexoRouter.

Crea una app de chat

Este tutorial crea un chat multi-turn de terminal con Node.js, el OpenAI SDK y la API estable de Chat Completions de NexoRouter.

El ejemplo usa requests no streaming para mantenerse dentro de la superficie pública verificada.

Qué vas a construir

  • Un cliente con la base URL de NexoRouter.
  • Historial de conversación conservado entre turnos.
  • Manejo básico de errores.
  • Salida de uso para comprobar tokens.
  • Un flujo fácil de adaptar a una API backend.

Requisitos

  • Node.js 20 o posterior.
  • Una cuenta con saldo prepago.
  • Una API key activa.
  • Un model ID actual copiado desde Models.

1. Crea el proyecto

mkdir nexorouter-chat
cd nexorouter-chat
npm init -y
npm pkg set type=module
npm install openai dotenv

Crea .gitignore:

node_modules
.env

Crea .env:

NEXOROUTER_API_KEY=your_nexorouter_key
NEXOROUTER_MODEL=deepseek-v4-flash

Nunca hagas commit de .env.

2. Envía el primer mensaje

Crea first-message.mjs:

import "dotenv/config";
import OpenAI from "openai";

if (!process.env.NEXOROUTER_API_KEY) {
  throw new Error("Missing NEXOROUTER_API_KEY");
}

const client = new OpenAI({
  apiKey: process.env.NEXOROUTER_API_KEY,
  baseURL: "https://api.nexorouter.com/v1",
  timeout: 60_000,
  maxRetries: 2,
});

const response = await client.chat.completions.create({
  model: process.env.NEXOROUTER_MODEL || "deepseek-v4-flash",
  messages: [
    { role: "system", content: "You are a concise technical assistant." },
    { role: "user", content: "Give me a three-step API launch checklist." },
  ],
  max_tokens: 256,
});

console.log(response.choices[0]?.message?.content);
console.log("usage:", response.usage);

Ejecuta:

node first-message.mjs

Después abre Usage Logs y confirma model ID, status, tokens, costo, latencia y request ID.

3. Convierte el script en chat multi-turn

Crea chat.mjs:

import "dotenv/config";
import OpenAI from "openai";
import { createInterface } from "node:readline/promises";
import { stdin as input, stdout as output } from "node:process";

if (!process.env.NEXOROUTER_API_KEY) {
  throw new Error("Missing NEXOROUTER_API_KEY");
}

const client = new OpenAI({
  apiKey: process.env.NEXOROUTER_API_KEY,
  baseURL: "https://api.nexorouter.com/v1",
  timeout: 60_000,
  maxRetries: 2,
});

const model = process.env.NEXOROUTER_MODEL || "deepseek-v4-flash";
const messages = [
  {
    role: "system",
    content: "You are a concise assistant. State uncertainty and never invent API behavior.",
  },
];
const terminal = createInterface({ input, output });

console.log(`Connected to ${model}. Type /exit to stop.`);

while (true) {
  const text = (await terminal.question("you> ")).trim();
  if (!text) continue;
  if (text === "/exit") break;

  messages.push({ role: "user", content: text });

  try {
    const response = await client.chat.completions.create({
      model,
      messages,
      max_tokens: 500,
    });

    const answer = response.choices[0]?.message?.content ?? "";
    messages.push({ role: "assistant", content: answer });
    console.log(`assistant> ${answer}`);
    console.log(`tokens> ${response.usage?.total_tokens ?? "not reported"}`);
  } catch (error) {
    console.error("request failed>", error?.status, error?.error?.code, error?.message);
  }
}

terminal.close();

Ejecuta:

node chat.mjs

4. Cambia de modelo

No dependas para siempre del ID del tutorial. Copia un modelo disponible desde Models o consulta:

curl https://api.nexorouter.com/v1/models \
  -H "Authorization: Bearer $NEXOROUTER_API_KEY"

Luego cambia:

NEXOROUTER_MODEL=exact-model-id

Los model IDs distinguen mayúsculas y minúsculas. Verifica también precio, unidad de cobro y endpoint en la ficha del modelo.

5. Lleva el ejemplo a producción

Antes de exponerlo a usuarios:

  1. Mueve la llamada a un backend; no publiques la API key.
  2. Crea una key dedicada con budget y alcance de modelos.
  3. Limita longitud de mensajes, max_tokens y concurrencia.
  4. Conserva solo el historial necesario para controlar costo y privacidad.
  5. Agrega autenticación, rate limit por usuario y validación de entrada.
  6. Respeta retry-after y limita reintentos.
  7. Registra request ID, modelo y status sin secretos.
  8. Prueba fallos de key, saldo, modelo, timeout y rate limit.

Problemas comunes

SíntomaRevisión
401 invalid_api_keyKey correcta, header Bearer, key activa y base URL.
404 model_not_foundID exacto, disponibilidad y alcance de modelos de la key.
403 insufficient_quotaSaldo del workspace, budget y alcance de la key.
429 rate_limit_exceededretry-after, concurrencia y tamaño del prompt.
413 request_too_largeReduce historial o divide el input.
502 o 504Reintento limitado, timeout del cliente u otro modelo.

Siguiente

Crea una app de chat — NexoRouter