Голосовой агент захватывает реплику в момент срабатывания определения конца речи, и ничто ниже по конвейеру не может начаться, пока не вернутся слова. Функция диктовки должна выводить текст на экран, пока пользователь ещё удерживает клавишу. Телефонное меню захватывает одно высказывание и направляет вызов в зависимости от того, что услышало. Push-to-talk сообщение отправляется в момент, когда пользователь убирает палец. Во всех этих случаях сначала выполняется транскрибация, и каждая последующая модель рассуждает над словами, которые передала транскрибация. Ошибка в слове — это неверный ответ тремя звонками позже, и LLM не может об этом узнать.
Модельный слой, стоящий за этим первым вызовом, консолидировался везде, кроме самого первого вызова. Если вы разрабатываете на OpenRouter, вы уже получаете доступ к десяткам моделей через один ключ, один биллинговый аккаунт и один формат запроса. Speech-to-text оставался вне этого — отдельный вендор, отдельный контракт, отдельный SDK, — оборачиваясь вокруг единственного компонента, который определяет, что видит остальная часть вашего стека.
Сегодня Universal-3.5 Pro доступен на OpenRouter и обслуживается через наш Sync Speech-to-Text API. Он указан в эндпоинте транскрибации OpenRouter как assemblyai/universal-3-5-pro. Цена соответствует нашим опубликованным тарифам, и OpenRouter передаёт её без наценки.
Один POST-запрос к уже знакомому эндпоинту
Один запрос, один транскрипт, никаких задач для опроса и никакого WebSocket, который нужно держать открытым:
Это и есть вся интеграция. Если вы уже вызываете OpenRouter для chat completions, меняются только путь и строка модели. Эндпоинт также принимает multipart-запросы в стиле OpenAI, поэтому существующий клиент OpenAI SDK, направленный на базовый URL OpenRouter, работает с Universal-3.5 Pro без изменения кода. Временные метки слов возвращаются через собственные поля OpenRouter response_format и timestamp_granularities, а не через наши, что сохраняет форму ответа идентичной любой другой модели транскрибации на этом эндпоинте.
Три способа сообщить модели, что ей предстоит услышать
Три опции AssemblyAI передаются в provider.options.assemblyai: prompt, keyterms_prompt и conversation_context. Именно они меняют результат на сложном аудио и являются разницей между транскриптом, который в целом верен, и транскриптом, который точно передаёт лексику вашего клиента.
prompt описывает ситуацию до того, как прозвучит первое слово. До 6 000 символов, сообщающих модели, какая речь ожидается: ваша предметная область, ваш продукт, структура разговора. «Транскрибируй этот разговор на медицинском приёме» настраивает декодер на клиническую лексику — именно ту область, где универсальная модель угадывает и правдоподобно ошибается. Правдоподобная ошибка — это дорогостоящий сбой, потому что она проходит все последующие проверки.
conversation_context передаёт предыдущие реплики с каждым запросом — до 500 реплик или 16 000 символов, — и модель транскрибирует текущий фрагмент с учётом этой истории. Когда звонящий отвечает «да, второй» или зачитывает номер, который только что спросил агент, модель знает, на какой вопрос отвечает. Вы платите только за аудио текущей реплики, поэтому передача полного диалога ничего не стоит, кроме размера запроса.
keyterms_prompt принимает до 100 терминов на запрос и смещает модель в сторону уже известных вам строк: названий продуктов, наименований лекарств, SKU, относящихся к конкретному аккаунту. Поскольку они отправляются с каждым запросом, их можно ограничивать рамками отдельного разговора, а не зашивать в глобальную конфигурацию, что важно, когда лексика различается для каждого клиента.
Создан для одной реплики речи и немедленного ответа
Sync API устроен как запрос, который реально делает голосовой продукт: одна реплика на входе, один транскрипт на выходе в том же ответе. При прямом вызове он возвращает готовый транскрипт примерно за 134 мс на p50, тогда как подход submit-and-poll добавляет 5–6 секунд служебных затрат к аудио, которое звучит две секунды. Запрос, направленный через OpenRouter, добавляет к этому один дополнительный сетевой переход, так что закладывайте это в бюджет и измеряйте собственный p50 из своего региона, прежде чем встраивать его в цикл обработки реплик.
Фрагменты — от 80 мс до 2 минут, до 40 МБ, только в формате WAV. Это ограничение является частью дизайна, а не пределом, который мы обходим: аудио длиннее одной реплики относится к Async API, а постоянная живая сессия — к Realtime. Sync покрывает случай, когда аудио уже короткое и ответ нужен до того, как пользователь заметит ожидание.
Точность, которую наследует каждая последующая модель
Маркетплейсы делают модели взаимозаменяемыми, но транскрибация — это единственный вызов в стеке, где они не взаимозаменяемы. Universal-3.5 Pro занимает первое место по точности в независимых бенчмарках speech-to-text и показывает 1,59% нормализованной частоты ошибок в словах на коротких аудиофрагментах — именно тот аудиопрофиль, который создаёт запрос в форме реплики.
Имена собственные, буквенно-цифровые коды, адреса электронной почты и почтовые адреса — это строки, которые звонящий произносит по буквам, а агент должен обработать, и именно здесь разрыв между моделями транскрибации проявляется как невыполненная задача, а не просто более низкий балл. Это та же модель, что работает за нашими поверхностями Async, Realtime и Sync, на том же чекпоинте, на всех 19 нативных языках. Маршрутизация через OpenRouter меняет биллинговые отношения и формат запроса. Она не меняет модель.
Ключевые детали
Цены
$0,45 за час аудио, оплата по длительности, соответствует тарифу Sync API на нашей странице с ценами. В течение первой недели цена через OpenRouter будет на 50% ниже прайс-листа.
Начало работы
Если у вас есть ключ OpenRouter, приведённый выше фрагмент Python работает как есть. Если вам нужны поверхности, которые OpenRouter не предоставляет, начните с бесплатного аккаунта AssemblyAI и прочитайте руководство по Sync API. Оба пути ведут к одной и той же модели.
FAQ
Это та же модель, что и в собственном API AssemblyAI?
Да. Та же модель, тот же чекпоинт, те же 19 языков. OpenRouter предоставляет доступ к Sync API; он не размещает отдельную копию.
Нужен ли мне аккаунт AssemblyAI?
Нет. Ваш ключ OpenRouter — единственный используемый идентификатор, а биллинг проходит через OpenRouter. Аккаунт AssemblyAI нужен только для поверхностей, которые OpenRouter не предоставляет.
Наценка от OpenRouter?
Нет. $0,45/час аудио — это наш опубликованный тариф Sync, передаваемый без изменений.
Могу ли я использовать свой существующий клиент OpenAI SDK?
Да. Направьте его на базовый URL OpenRouter и задайте строку модели. Эндпоинт принимает multipart-запросы в стиле OpenAI.
Как получить временные метки слов?
Установите response_format: "verbose_json" и timestamp_granularities: ["word"]. Это поля OpenRouter, а не наши.












