wss://api.erlcrussia.com/v1/realtime?model=emmy-voice-1. El parámetro model es opcional.
La autenticación funciona como en OpenAI:
- en un servidor, con la cabecera
Authorization: Bearer sk-voice-…; - en el navegador, con los subprotocolos WebSocket
realtimeyopenai-insecure-api-key.sk-voice-….
instructions o tools) se ignoran.
Sesión
Al conectarte, el servidor envíasession.created. Los ajustes se cambian con session.update:
ru, en, uk, be, es, it, fr, zh, ja, ko. Voces: F1, F2. El audio de entrada y de salida es PCM16, mono, 24 kHz.
Los turnos son manuales: turn_detection debe ser null y el evento input_audio_buffer.commit cierra el turno. La detección automática de voz (server_vad) no está disponible.
Solicitud de texto
id del elemento es opcional. El rol puede ser user o system.
Solicitud de voz
commit, el servidor envía input_audio_buffer.committed y conversation.item.added. Cuando se reconoce la voz llegan conversation.item.input_audio_transcription.completed con el texto y conversation.item.done. Si el reconocimiento falla, llega conversation.item.input_audio_transcription.failed. Puedes enviar response.create justo después de commit: la respuesta empieza cuando termina el reconocimiento.
input_audio_buffer.clear vacía el búfer. La voz también se puede enviar como un único elemento conversation.item.create con una parte input_audio.
Respuesta
El servidor envíaresponse.created, luego response.output_audio_transcript.delta (texto) y response.output_audio.delta (PCM en base64), y al final response.done con el consumo en usage.
- El reconocimiento de voz cuesta lo mismo que el reconocimiento de voz por archivo.
event_ides opcional (hasta 128 caracteres). Si se envía, un evento repetido con el mismoevent_idse ignora.- Solo una respuesta a la vez. El texto va de 1 a 12 000 caracteres; la voz, de 100 ms a 120 segundos.
- Tras 100 intercambios o 4096 eventos, abre una conexión nueva.