Skip to main content

Обзор

Модели реального времени работают через долгоживущее WebSocket-соединение: аудио поступает в поток, аудио передаётся из потока, а модель можно прервать прямо посреди фразы — без цикла «записать, загрузить, подождать, воспроизвести». Отличие от объединения ASR + текстовой модели + TTS заключается в том, что это сквозная система: модель напрямую воспринимает интонацию, паузы и эмоции и напрямую говорит. Задержка составляет менее секунды. В настоящее время APIYI предлагает 4 модели на базе 2 протоколов, использующие один эндпоинт и один ключ:
  • gpt-realtime-2.1 / gpt-realtime-2.1-mini — протокол OpenAI Realtime GA
  • qwen3.5-omni-plus-realtime / qwen3.5-omni-flash-realtime — протокол Alibaba Cloud Model Studio
Статус (обновлено 2026-09-14, UTC+8): все четыре модели доступны — выберите группу по умолчанию для своего ключа и вызывайте их напрямую, запрос не требуется; они также доступны в группах VIP и SVIP. Вы можете тестировать, изучать и интегрировать их; если на этой странице чего-либо не хватает или результаты ваших измерений отличаются, сообщите нам. Протокол и поведение вышестоящей системы всё ещё могут измениться; всё, что указано в разделе «Известные ограничения» ниже, измерено и будет обновляться по мере изменений вышестоящей системы. Перед выпуском в продакшен реализуйте повторное подключение и корректную деградацию. Если вам нужна более высокая степень параллельных запросов, свяжитесь с нами через поддержку WeCom или по электронной почте [email protected] / [email protected].
🎤 Основные возможности: двунаправленный поток аудио через одно соединение, прерывание в любой момент, server_vad и semantic_vad обнаружение окончания реплики, полный цикл вызова функций (включая внедрение результата), ввод изображений и usage с разбивкой по модальностям. Всё перечисленное проверено на всех четырёх моделях (первая проверка 2026-08-24, повторная проверка 2026-09-14, UTC+8).
Главное, что нужно запомнить: 4 модели используют два разных протокола запросов с разными именами полей и событий. Изменение только параметра model без изменения тела запроса не сработает — это безусловно самая распространённая ошибка интеграции. Различия сводятся к 6 полям и 3 именам событий, перечисленным ниже в разделе «Сравнение протоколов».

Поддержка WeCom

Вопросы по интеграции, увеличение степени параллельных запросов и недочёты в документации — свяжитесь напрямую со специалистом.

Руководство по API

Создание ключей, базовый URL, режимы тарификации и другие общие соглашения.

Ключи и группы

Создание ключей, выбор групп и установка квот.

Журналы вызовов

Просмотр использования token и фактических расходов для каждого вызова в консоли.
Эта страница большая. Три раздела обязательны к прочтению: Сравнение протоколов (прочтите перед сменой моделей), Начните с текста (проверьте всю цепочку без микрофона) и Известные ограничения (четыре измеренных различия, влияющих на код клиента).

Пусть AI-агент выполнит интеграцию

Если вы разрабатываете с Codex / Claude Code / Cursor, скопируйте туда prompt ниже. Сначала он получит текстовую версию этой страницы (добавьте .md к любому docs URL), а затем напишет code под ваш стек — в требования уже заложены две семейства полей, жёсткое ограничение по sample rate, семантика cancel и отключения при простое.

Пусть кодирующий агент интегрирует или отладит Realtime voice. Скопируйте и вставьте в Codex, Claude Code, Cursor и похожие инструменты.

Почему APIYI для голосовой связи в реальном времени

Один ключ, четыре модели

Один и тот же wss эндпоинт и те же данные авторизации. Для смены модели достаточно изменить параметр model и соответствующий шаблон полей — не нужно поддерживать второй аккаунт у поставщика.

Прямой доступ без зарубежной настройки

Получайте доступ к api.apiyi.com из дата-центров в материковом Китае, домашней сети или зарубежных узлов. Аккаунт у вышестоящего поставщика, подтверждение личности и предварительная оплата не требуются.

Различия протоколов уже сопоставлены

Сравнение полей, сравнение названий событий, ограничения частоты дискретизации и четыре выявленных ограничения подробно описаны здесь, поэтому вам не придётся изучать их заново.

Бесплатное самостоятельное тестирование через текст

Проверяйте рукопожатие, авторизацию, поля, интеграцию с tools и параллельные запросы без микрофона — тарифы для аудио на порядок дороже текстовых, поэтому во время интеграции это позволяет существенно сэкономить.

Измеренные задержка и параллельные запросы

p50 для рукопожатия составляет около 1 с, а p50 для первой текстовой дельты — около 1 с при 40 одновременных сессиях; успешно завершились 120 из 120 сессий. Условия и дата тестирования указаны в разделе «Технические характеристики».

Прямая инженерная поддержка

Прямой канал WeCom для вопросов по интеграции, увеличению числа параллельных запросов и изменениям поведения вышестоящего поставщика.

Основные возможности

Двунаправленная потоковая передача, прерываемая

Аудио передаётся по мере генерации; клиент может отправить response.cancel в любое время. Сессия сохраняется, контекст сохраняется. Проверено на всех четырёх моделях.

Два режима определения смены реплики

server_vad разделяет по длительности тишины, semantic_vad разделяет по намерению (лучше игнорирует слова-паразиты вроде «uh-huh»). Оба режима проверены на всех четырёх моделях.

Полный цикл вызова функций

Модель вызывает инструмент, клиент выполняет его, function_call_output внедряет результат, и модель продолжает отвечать. Проверено от начала до конца на всех четырёх моделях.

Ввод изображений, учёт использования по модальностям

Отправляйте изображения в ходе сеанса, чтобы модель могла их прочитать; usage возвращает tokens текста / аудио / изображений отдельно, чтобы можно было отнести стоимость. Проверено на всех четырёх моделях.

Поддерживаемые модели

Для всех четырёх моделей выходной звук имеет формат PCM signed 16-bit / mono / 24 кГц.
Два семейства протоколов совместно используют только эндпоинт и схему аутентификации. Поля запросов и названия событий сервера различаются. При переключении моделей необходимо также переключить шаблоны полей — см. раздел «Сравнение протоколов» ниже.

Тарификация

Тарификация в одном предложении: тарификация выполняется за token, при этом аудио стоит на порядок дороже текста (для gpt-realtime-2.1 входные аудио-данные стоят $32 против $4 для текста; выходные аудио-данные — $64 против $24 для текста). Во время интеграции используйте только текст, а после проверки цепочки переключитесь на аудио — см. раздел «Начните с текста» ниже.
В таблицах ниже указаны официальные прайс-листы поставщиков в USD за 1 млн token; APIYI выполняет тарификацию за token по тем же ставкам (сверка по модальностям выполнена 2026-09-14, (UTC+8)). Фактические списания в APIYI соответствуют данным, указанным в журналах вызовов; бонус за пополнение дополнительно снижает фактическую стоимость.

Протокол Realtime GA

Протокол Model Studio

Измерения тарификации различаются: входные изображения включаются в текстовый уровень, а выходные данные разделяются на «только текст» и «текст + аудио» (при последней ставке тарифицируется только аудиочасть).
Примечания по тарификации: текстовые, аудио- и image token тарифицируются за token по указанным выше ценам; прерванный ход (response.cancel) тарифицируется по фактически сгенерированному объёму, а пустая сессия не тарифицируется. Входные данные из кэша пока не тарифицируются со скидкой: попадания в кэш достоверно отображаются в usage.cached_tokens, но APIYI в настоящее время тарифицирует их по соответствующей ставке для входных текстовых данных. Официальная ставка для кэшированных данных начнёт применяться автоматически после исправления пути тарификации; об этом будет объявлено в журнале изменений. Цены могут изменяться в соответствии с политикой поставщиков и доступностью ресурсов. Эта возможность предоставляется для обеспечения поставок и обслуживания клиентов, а не как ориентированное на получение прибыли предложение.

Группа доступа

Все четыре модели используют один эндпоинт и один ключ. Переключение групп выполняется установкой флажка в разделе управление ключами; изменения кода не требуются.

Технические характеристики

Измеренная задержка и параллельные запросы

Измерено 2026-09-14 (UTC+8) по публичному пути api.apiyi.com, gpt-realtime-2.1 и -mini при 20 и 40 параллельных сессиях для каждого, односторонний обмен только текстом:
Это измерения на определённый момент времени при конкретном уровне параллельных запросов и не являются обязательством по производительности. SLA по доступности не предоставляется — реализуйте переподключение и плавную деградацию на клиенте.

Эндпоинт

Все четыре модели используют этот эндпоинт; параметр запроса model выбирает, к какой из них вы обратитесь.
При подключении из браузера: этот эндпоинт также поддерживает аутентификацию через субпротокол Sec-WebSocket-Protocol (realtime, openai-insecure-api-key.<key>, openai-beta.realtime-v1), так что браузерный WebSocket может подключаться напрямую — но это передаёт ваш ключ браузеру, где любой посетитель может прочитать его в сетевой панели. Используйте это только для локальной проверки. В production настройте бэкенд-релей: бэкенд хранит ключ и открывает соединение с APIYI, а фронтенд общается только с вашим сервисом.

⚠️ Сравнение протоколов (прочтите перед переключением моделей)

Обе семейства используют один и тот же эндпоинт, схему авторизации и общий поток событий. Различия сосредоточены в структуре поля session.update и нескольких именах серверных событий.

Сравнение полей запроса

Сравнение серверных событий

Все остальные события — session.created, session.updated, conversation.item.create, input_audio_buffer.append, input_audio_buffer.commit, response.create, response.cancel, response.done — называются одинаково в обоих.

Два минимальных payload для session.update

Один и тот же текст, записанный дважды; копируйте напрямую. Протокол Model Studio:
Протокол Realtime GA:
Частота дискретизации — жёсткое ограничение: audio.input.format.rate в протоколе Realtime GA должна быть ≥ 24000; при отправке 16000 запрос сразу завершается с integer_below_min_value: Expected a value >= 24000. Протокол Model Studio требует входные данные 16 kHz. Выполните ресемплирование на клиенте.

Начните с текста: для чего нужен текстовый канал и трёхэтапная самопроверка

Аудиопайплайн включает захват с микрофона, ресемплинг, chunking и определение turns. Любое слабое звено проявляется как «ничего не происходит», а это трудно диагностировать. Поэтому не начинайте с микрофона.

Текст — это управляющая плоскость, а не запасной способ ввода

В realtime voice model текст — это не «ещё один способ передать ввод», а весь канал управления, кроме аудиопотока:

Трёхэтапная самопроверка

1

Шаг 1: только текст, без микрофона

Установите output_modalities в режим только текста, отключите turn detection и отправьте один input_text. Уже это проверяет handshake, ключ и группу, правильно ли вы выбрали шаблон полей, сработал ли session.update, корректно ли подставляются tools, сохраняется ли многотуровый контекст и как ведут себя параллельные запросы. Вообще не создаётся ни одного audio token.
2

Шаг 2: воспроизведите локальный wav-файл

Используйте фиксированный локальный аудиофайл вместо микрофона, передавая его в input_audio_buffer.append блоками по 100 ms. Это отделяет аудиопайплайн (формат, частоту дискретизации, разбиение на чанки, commit, срабатывание VAD) от вашей бизнес-логики и делает процесс воспроизводимым — один и тот же файл должен дважды давать один и тот же результат.
3

Шаг 3: подключите живой микрофон

Когда первые два шага пройдены, остаются только захват и воспроизведение. Если теперь что-то ломается, пространство поиска уже небольшое.
Нет под рукой тестового аудио? На macOS встроенные инструменты за одну строку создают совместимый файл:
Выбор неверной частоты дискретизации — самая частая ошибка на шаге 2: два протокола различаются, не путайте их.

Запускаемый текстовый smoke test

Зависит только от websockets (pip install websockets). Переключайте протоколы, изменяя одну переменную:
Если это запускается, эндпоинт, ключ, группа и шаблон полей настроены правильно — переходите к шагу 2.

Особенности сессии: голос, определение смены реплики, инструменты, изображения

Голос

Закрепляйте голос в первом session.update. После того как сессия сгенерировала аудиовывод, изменение голоса завершается cannot_update_voice — это относится к обоим протоколам. Чтобы сменить голос, откройте новую сессию. Также в протоколе Model Studio не отправляйте пустую строку в качестве голоса; система откатится к неподдерживаемому голосу и вернёт 400. Если вам не нужно задавать значение, просто не передавайте это поле.

Определение смены реплики: server_vad и semantic_vad

  • server_vad — разделяет по длительности тишины, с простыми параметрами (threshold, silence_duration_ms, prefix_padding_ms).
  • semantic_vad — разделяет по намерению в разговоре, игнорируя слова-паразиты и бессмысленный фоновый шум. Более устойчиво в средах с несколькими говорящими.
  • Вы также можете отключить определение смены реплики (null или none) и работать в ручном режиме: сами отправляйте input_audio_buffer.commit, затем response.create. Это подходит для интерфейсов push-to-talk, где сменой реплик управляет UI.
В режиме VAD вы обязаны продолжать потоковую передачу. После окончания речи продолжайте передавать короткий отрезок тишины (2 секунды достаточно при тестировании), чтобы сервер мог определить конец речи. Если вы отправите только озвученную часть и затем остановитесь, speech_stopped никогда не сработает и ответ не будет сгенерирован.

Вызов функций

Порядок событий: модель отправляет response.output_item.done типа function_call (содержащий call_id и arguments) → клиент выполняет его → результат подставляется → ещё одно response.create позволяет модели продолжить.
Полный цикл подтверждён на всех четырёх моделях — после подстановки модель корректно пересказывает, что вернул инструмент.

Ввод изображений

протокол Realtime GA: поместите input_image напрямую в сообщение; значение может быть data URI.
протокол Model Studio: изображения рассматриваются как кадры видео, поэтому сначала нужно добавить audio, иначе вы получите Error append image before append audio.. При тестировании рабочий подход — вставлять input_image_buffer.append в поток input_audio_buffer.append примерно с частотой один кадр в секунду.

Известные ограничения

Каждый пункт ниже измерен, и все они влияют на код клиента. Ознакомьтесь с этим разделом перед интеграцией.
Такое поведение может измениться по мере развития upstream; эта страница будет поддерживаться в актуальном состоянии. Если вы столкнулись с тем, что не перечислено здесь, сообщите об этом через поддержку WeCom или по адресу [email protected], указав временную метку и session.id, чтобы мы могли отследить проблему.

Лучшие практики

1

Сначала выбирайте шаблон поля по семейству протокола

Записывайте два session.update payloads как две константы конфигурации, выбираемые по имени модели, а не разбросанные по if-веткам. Именно эта часть чаще всего ломается при сопровождении спустя шесть месяцев.
2

Закрепите параметры сеанса в первом фрейме

Установите output_modalities, voice, speed, turn_detection и transcription в самом первом session.update. Особенно для голосового режима — после того как audio уже сгенерировано, будет слишком поздно.
3

Сначала пройдите текстовый smoke test перед добавлением audio

Запустите текстовый smoke test на этой странице, чтобы убедиться, что endpoint, ключ, группа и шаблон поля заданы верно, а затем переходите к audio. Аудио-уровни стоят на порядок дороже текстовых, так что это экономит большую часть вашего бюджета на интеграцию.
4

Преобразуйте sample rate и channels на клиенте

PCM 16-битный со знаком, моно; 16 kHz для Model Studio, ≥ 24 kHz для Realtime GA. Не ожидайте исправления на стороне сервера — неверный формат обычно проявляется тишиной, а не явной ошибкой.
5

Завершайте работу по output_item.done с тайм-аутом

Не ждите только response.done. Этот подход корректен для обеих семейств и помогает не зависать на одном ходе, когда пользователь прерывает.
6

Добавьте поддержание соединения и переподключение для длительных сеансов

Следите за 300-секундным лимитом простоя в Model Studio и expires_at в Realtime GA. После переподключения повторно отправьте session.update и весь необходимый контекст, иначе новый сеанс будет работать с настройками по умолчанию.
7

Используйте бэкенд-релей в продакшене

Храните ключ на бэкенде и заставьте фронтенд обращаться только к вашему сервису. Прямые подключения из браузера технически работают, но раскрывают ключ.

Ошибки и повторные попытки

Совет по устранению неполадок: записывайте event_id каждого события и session.id сессии и указывайте их при сообщении о проблеме — это значительно сокращает время диагностики. Также обратите внимание, что объекты ошибок Realtime GA содержат code и param (с указанием точного имени поля и допустимых значений), тогда как сообщения об ошибках Model Studio являются менее подробными. При отладке сначала проверьте синтаксис полей в Realtime GA.

Часто задаваемые вопросы

Интерактивные песочницы работают на основе спецификаций OpenAPI, которые описывают один запрос и один ответ по HTTP. Realtime — это десятки типов событий, передаваемых в обоих направлениях через одно долгоживущее соединение, что не соответствует этой модели. Альтернатива — текстовый smoke-тест в разделе «Начало с текста»: несколько десятков строк без микрофона, которые подтверждают работоспособность всей цепочки.
Нет. Эндпоинт и аутентификация одинаковы, но поля запроса и имена событий относятся к двум протоколам. Как минимум необходимо изменить: modalities ↔ output_modalities, voice ↔ audio.output.voice, input_audio_format ↔ audio.input.format, turn_detection ↔ audio.input.turn_detection, input_audio_transcription ↔ audio.input.transcription, а также имена событий response.text.delta ↔ response.output_text.delta и response.audio.delta ↔ response.output_audio.delta. Полное соответствие приведено в разделе «Сравнение протоколов».
Последовательно проверьте пять пунктов: 1. схема — wss://, а не https://; 2. эндпоинт содержит ?model=<model-name>; 3. присутствует заголовок Authorization: Bearer <key>; 4. группа ключа включает модель (все четыре модели входят в группу по умолчанию; несоответствие возвращает 503 с сообщением «нет доступного канала»); 5. промежуточный обратный прокси не удаляет заголовок Upgrade — это распространённая проблема при передаче запросов через собственный шлюз.
Технически да: эндпоинт принимает аутентификацию через субпротокол Sec-WebSocket-Protocol, поэтому браузер WebSocket может подключаться напрямую. Но в этом случае ключ передаётся браузеру, где любой посетитель может прочитать его на вкладке сети, поэтому такой способ подходит только для локальной проверки. В рабочей среде создайте серверный релей: сервер хранит ключ и открывает соединение с APIYI, а фронтенд взаимодействует только с вашим сервисом.
Протокол Realtime GA требует, чтобы частота дискретизации входного аудио составляла не менее 24000; значение 16000 возвращает integer_below_min_value. Правильный вариант — "audio": {"input": {"format": {"type": "audio/pcm", "rate": 24000}}}. Для двух моделей Model Studio требуется частота 16 кГц — эти варианты несовместимы.
Выполните трёхэтапную самопроверку из раздела «Начало с текста»: сначала проверьте цепочку с помощью текста (аудиотокены не создаются), затем воспроизведите локальный wav-файл для проверки аудиоконвейера и только после этого подключайте рабочий микрофон. Тестовое аудио можно создать одной строкой с помощью встроенных средств macOS say и afconvert — команды приведены в этом разделе.
Это известное поведение двух моделей Model Studio (воспроизводится во всех 6 тестовых запусках): после прерывания вы получаете response.text.done, response.content_part.done и response.output_item.done, но response.done не передаётся. Используйте response.output_item.done как сигнал завершения хода и добавьте тайм-аут в качестве резервного механизма. Сама сессия не затрагивается, и диалог продолжается в обычном режиме. Две модели Realtime GA работают здесь корректно.
Протокол Model Studio разрывает соединения после 300 секунд бездействия, причём ping/pong на уровне WebSocket не считается активностью — heartbeat не продлит этот таймер. Либо периодически отправляйте событие на уровне приложения во время простоя (например, session.update), либо примите отключение и автоматически подключайтесь заново. После повторного подключения не забудьте повторно отправить session.update и весь необходимый контекст.
В протоколе Realtime GA событие session.created содержит expires_at, значение которого составляет примерно 30 минут с момента подключения, после чего необходимо подключиться заново. В протоколе Model Studio основным наблюдаемым ограничением является отключение после 300 секунд бездействия. Проектируйте длительные диалоги с учётом того, что срок действия сессий истекает, и заранее продумайте перенос контекста между сессиями.
Задайте голос в session.update: на верхнем уровне voice для Model Studio и audio.output.voice для Realtime GA. После того как сессия вывела аудио, изменить голос больше нельзя — это относится к обоим протоколам и возвращает cannot_update_voice. Зафиксируйте голос в первом кадре и откройте новую сессию для его смены. Кроме того, не отправляйте пустую строку в качестве голоса в Model Studio: это возвращает 400.
Модель flash в Model Studio не передаёт событие завершения транскрипции в ручном режиме commit (это стабильно воспроизводится в разных запусках); модель plus передаёт его, и обе модели работают в режиме VAD. Переключитесь на server_vad или semantic_vad. Тестирование показывает, что в этом случае текст транскрипции записывается в недокументированное поле событий delta, однако это поле может измениться в любой момент, и полагаться на него не следует. Это влияет только на отображение сказанного пользователем в вашем интерфейсе — диалог не нарушается, а модель корректно понимает аудио и отвечает на него.
Все четыре модели поддерживают ввод изображений, но синтаксис различается. В Realtime GA input_image помещается непосредственно в сообщение. В Model Studio изображения обрабатываются как кадры видео, поэтому аудио необходимо добавлять перед любым изображением, что и вызывает эту ошибку. В ходе тестирования рабочий подход заключался во вставке кадров изображений в аудиопоток примерно по одному кадру в секунду.
Две модели Realtime GA поддерживают эту возможность, и она применяется автоматически: в ходе тестирования второй ход в рамках сессии уже попадал в кэш, при этом значение отображалось в usage.input_token_details.cached_tokens (префикс длиной не менее 1024 token с шагом 128 token). Обратите внимание: APIYI в настоящее время тарифицирует кэшированные token по полной ставке для текстового ввода; о скидке будет объявлено в журнале изменений после её запуска. Для двух моделей Model Studio попаданий в кэш не наблюдалось.
Нет. POST /v1/realtime/client_secrets и POST /v1/realtime/calls в APIYI возвращают 404, SIP также недоступен; единственной точкой входа является один эндпоинт WebSocket wss://api.apiyi.com/v1/realtime. Для клиентов браузера или мобильных приложений создайте серверный релей: сервер хранит ключ и открывает WebSocket-соединение, а фронтенд взаимодействует только с вашим сервисом.
Да. В ходе тестирования каждое из них передавалось без изменений и возвращалось в session.updated: reasoning.effort (minimal / low / medium / high / xhigh, принимаются обеими моделями), audio.input.noise_reduction, audio.input.turn_detection.idle_timeout_ms, audio.input.transcription.model (включая gpt-realtime-whisper), truncation, tracing, max_output_tokens и parallel_tool_calls. Семантика полей соответствует справочной документации OpenAI; шлюз не изменяет их.
Объект usage в response.done сообщает количество token отдельно для каждой модальности (текст / аудио / изображение, раздельно для ввода и вывода), поэтому стоимость можно распределить; в подробном представлении журнала вызовов указаны те же usage для каждой модальности — одна запись на каждый завершённый response.done. Тарифы для аудио значительно выше, чем для текста, поэтому на этапе интеграции рекомендуется использовать только текст. Фактические списания см. в журналах вызовов.

Связанная документация

Руководство по API

Создание ключей, базовый URL, режимы тарификации и другие общие соглашения.

Ключи и группы

Создание ключей, выбор групп и установка квот.

Генерация текста

Обычные чат-модели — оптимальный вариант для общения только в текстовом формате.

Цены на модели

Актуальные цены, эндпоинты и группы для каждой модели на платформе.

Бонус за пополнение

Дополнительно снижает вашу фактическую стоимость.

Поддержка WeCom

Вопросы по интеграции, увеличение числа параллельных запросов и сообщения о недочётах в документации.
Все четыре модели Realtime доступны в группе по умолчанию. Измеренные результаты на этой странице получены в ходе первого прогона 2026-08-24 и повторного тестирования 2026-09-14 (UTC+8) и будут обновляться по мере изменений со стороны upstream. Если вы планируете интеграцию, столкнулись с тем, чего нет на этой странице, или вам нужно увеличить число параллельных запросов, свяжитесь с нами по адресу [email protected] / [email protected].