🎁 Nuevo Regístrate gratis, 10 llamadas de regalo. Hasta 1 $, sin tarjeta.

Voz en tiempo real

Crea agentes de voz bidireccionales con gpt-realtime — el modelo escucha el habla y responde con voz en tiempo real (como una llamada telefónica), a través de una conexión WebSocket a /v1/realtime. Tu SDK de OpenAI Realtime existente funciona sin cambios; solo apúntalo a nuestro endpoint y usa tu clave de Synthorai.

Voz a voz, no transcripción
Esta página cubre voz a voz: voz de entrada, voz de salida. Conéctate con ?model=gpt-realtime.
Si solo necesitas convertir audio en texto (sin respuesta hablada), usa Voz a texto en su lugar — es una capacidad diferente.

Endpoint y autenticación

Abre un WebSocket a /v1/realtime con tu modelo en la cadena de consulta. La autenticación se ejecuta antes del upgrade, así que una clave rechazada nunca abre un socket.

# WebSocket, server-side (Node / Python / Go — anything that can set headers)
GET wss://synthorai.io/v1/realtime?model=gpt-realtime
Authorization: Bearer $YOUR_KEY
# Send only the Authorization header. Do NOT send OpenAI-Beta: realtime=v1
# (the beta protocol is retired; it makes the upstream reject the session).
  • Tu clave sk-syn nunca sale de nuestro gateway — la credencial del upstream se sustituye de nuestro lado.
  • Diseñado para clientes del lado del servidor (Node, Python, Go — cualquier cosa que pueda establecer una cabecera Authorization). Los tokens efímeros de navegador no se admiten.
  • Solo WebSocket. SIP (telefonía) y WebRTC conectan el cliente directamente al upstream y no se retransmiten — en su lugar, puentea el audio de telefonía hacia un WebSocket.

Configura la sesión

Cuando se abre la conexión recibes session.created. Envía un session.update para definir la voz, las modalidades, el formato de audio y la detección de turno. Usa el formato GA (session.type: "realtime", el audio bajo audio.input / audio.output) — el antiguo formato plano en beta está descontinuado.

{
  "type": "session.update",
  "session": {
    "type": "realtime",
    "output_modalities": ["audio"],
    "instructions": "You are a concise customer-support agent.",
    "audio": {
      "input":  { "format": { "type": "audio/pcm", "rate": 24000 },
                  "turn_detection": { "type": "server_vad" } },
      "output": { "format": { "type": "audio/pcm", "rate": 24000 } }
    }
  }
}

Un turno de conversación mínimo:

  1. Transmite el audio del micrófono con input_audio_buffer.append (PCM en base64).
  2. Confirma el turno con input_audio_buffer.commit y luego response.create.
  3. Recibe los deltas de audio (response.output_audio.delta) y la transcripción de texto, y luego response.done con el uso.
  4. Con el server VAD activado, el modelo detecta los turnos por ti; los mismos eventos fluyen sin commits manuales.

Herramientas, llamada a funciones y conocimiento

Declara funciones en session.update. El modelo las llama a mitad de la conversación — así es como conectas la consulta de pedidos, la emisión de tickets o cualquier sistema de negocio. Devuelve el resultado y el modelo continúa hablando con él:

// 1. Declare tools in session.update: "tools": [{ "type": "function", ... }]
// 2. The model emits a function_call in response.done.
// 3. Return the result, then ask the model to continue:
{ "type": "conversation.item.create",
  "item": { "type": "function_call_output",
            "call_id": "call_abc",
            "output": "{\"status\":\"shipped\"}" } }
{ "type": "response.create" }

También se admiten servidores MCP remotos ("type": "mcp") — el upstream se conecta directamente al servidor MCP. Para una base de conocimiento, inyecta datos mediante instructions, una herramienta de función respaldada por tu RAG, o MCP; el conocimiento incorporado del modelo no es una fuente fiable de datos de negocio.

Facturación

Se factura por el uso de cada response.done al precio de lista oficial (sin recargo) — audio y texto, entrada y salida, con una tarifa de entrada en caché. Cada sesión escribe una fila de registro al final.

TipoEntrada / 1M tokensSalida / 1M tokens
Audio$32 / 1M$64 / 1M
Texto$4 / 1M$16 / 1M
Entrada en caché$0.40 / 1M

Los precios mostrados son para gpt-realtime / gpt-realtime-2.1; gpt-realtime-2.1-mini es aproximadamente un tercio. La entrada de audio es de ~10 tokens/second y la salida de ~20 tokens/second. Mantener el historial de conversación como solo de anexado permite que la tarifa en caché ($0.40/1M) absorba la mayor parte de una llamada larga.

Duración de la sesión y cambio en caliente

!

Una sola sesión Realtime dura como máximo 60 minutes — es un límite de la plataforma OpenAI, no nuestro. El upstream cierra la conexión al alcanzar el límite.

  • Para llamadas que puedan alargarse, haz el cambio en caliente bastante antes del límite (p. ej. a los 50 minutes): abre una sesión nueva y reproduce la conversación como texto con conversation.item.create (el usuario como input_text, el asistente como output_text — el audio del asistente no se puede reproducir).
  • No hay reanudación de sesión: si el WebSocket se cae, el estado del upstream se pierde. La reconexión usa la misma vía de reproducción de texto, así que incorpora la reconexión desde el primer día.
  • El contexto es de 128K para gpt-realtime-2.1 / -mini (≈3.5 hours de audio de entrada); el antiguo gpt-realtime es de 32K — no lo uses para llamadas largas.

Acceso

gpt-realtime está en beta por invitación. Aparece en el catálogo y en los precios, pero para usarlo tu espacio de trabajo debe tener acceso concedido — contáctanos para habilitarlo.