wss://api.erlcrussia.com/v1/realtime?model=emmy-voice-1. Параметр model можно не передавать.
Авторизация, как в OpenAI:
- на сервере — заголовок
Authorization: Bearer sk-voice-…; - в браузере — подпротоколы WebSocket
realtimeиopenai-insecure-api-key.sk-voice-….
instructions или tools), игнорируются.
Сессия
После подключения сервер присылаетsession.created. Настройки меняются событием session.update:
ru, en, uk, be, es, it, fr, zh, ja, ko. Голоса: F1, F2. Звук на входе и на выходе — PCM16, моно, 24 кГц.
Ход определяется вручную: turn_detection должен быть null, конец реплики отмечает событие input_audio_buffer.commit. Автоматическое определение речи (server_vad) не поддерживается.
Текстовый запрос
id элемента необязателен. Роль может быть user или system.
Голосовой запрос
commit сервер присылает input_audio_buffer.committed и conversation.item.added. Когда речь распознана, приходят conversation.item.input_audio_transcription.completed с текстом и conversation.item.done. Если распознать не удалось — conversation.item.input_audio_transcription.failed. response.create можно отправить сразу после commit: ответ начнётся, когда распознавание закончится.
input_audio_buffer.clear очищает буфер. Голос можно передать и одним элементом с частью input_audio в conversation.item.create.
Ответ
Сервер присылаетresponse.created, затем response.output_audio_transcript.delta (текст) и response.output_audio.delta (PCM в base64), и в конце response.done с расходом в usage.
- Распознавание голоса оплачивается по той же цене, что и распознавание речи.
event_idнеобязателен (до 128 символов). Если он передан, повтор события с тем жеevent_idигнорируется.- Одновременно возможен один ответ. Текст запроса — от 1 до 12 000 символов, голос — от 100 мс до 120 секунд.
- После 100 обменов или 4096 событий откройте новое соединение.