Распознавание речи
Транскрибация аудио через Deepgram — POST /v1/audio/transcriptions, POST /v1/listen и WSS-стриминг /v1/listen/stream
Распознавание речи
Транскрибация аудио выполняется через Deepgram и тарифицируется за секунды аудио. Доступны prerecorded-эндпоинты (OpenAI-стиль и нативный прокси Deepgram) и потоковая транскрибация по WebSocket.
GET /v1/listen/stream (WebSocket)
Потоковая транскрибация в реальном времени — прокси нативного streaming API
Deepgram (wss://api.deepgram.com/v1/listen). Query-параметры — как у
Deepgram (model, language, diarize, punctuate, smart_format и др.).
Аутентификация — любым из способов:
- query-параметр
?token=sk-tunnel-...; - subprotocol
token, sk-tunnel-...(так работает Deepgram SDK — просто замените хост на шлюз); - заголовок
Authorization: Bearer sk-tunnel-....
const ws = new WebSocket(
"wss://api.nikagateway.ru/v1/listen/stream?model=nova-3&language=ru&smart_format=true",
["token", "sk-tunnel-..."],
);
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === "Results") console.log(message.channel.alternatives[0].transcript);
};
ws.onopen = () => {
// шлём бинарные аудиокадры (например, linear16); JSON-кадры
// {"type": "KeepAlive"} и {"type": "CloseStream"} — как у Deepgram
ws.send(pcmChunk);
};Сообщения Deepgram (Results, Metadata и др.) приходят как есть.
Биллинг — пакетами по 5 минут: на старте резервируется один пакет, далее
каждые 5 минут списывается прожитый пакет и резервируется следующий; по
закрытию соединения списывается фактическое время (посекундно), излишек
резерва возвращается. Максимальная длительность сессии — 2 часа.
Служебные кадры шлюза: при нехватке средств соединение закрывается кадром
{"type": "TunnelError", "error": {"status": 402, ...}}; по достижении
лимита длительности сессии приходит
{"type": "SessionEnded", "reason": "session_time_cap"} и соединение
закрывается.
POST /v1/audio/transcriptions
OpenAI-совместимый multipart-формат: файл + модель. Опциональные поля формы
(diarize, multichannel, punctuate, language и др.) пробрасываются в
Deepgram как query-параметры.
curl https://api.nikagateway.ru/v1/audio/transcriptions \
-H "Authorization: Bearer sk-tunnel-..." \
-F file=@recording.mp3 \
-F model=deepgram/nova-3 \
-F language=ru \
-F diarize=trueОтвет:
{
"text": "Распознанный текст...",
"duration": 62.4,
"model": "deepgram/nova-3",
"cost_rub": "0.045000",
"balance": "999.955000"
}POST /v1/listen
Нативный прокси Deepgram prerecorded: query-параметры — как у Deepgram, тело — бинарь аудио или JSON с URL:
# файл
curl "https://api.nikagateway.ru/v1/listen?model=nova-3&language=ru&diarize=true" \
-H "Authorization: Bearer sk-tunnel-..." \
-H "Content-Type: audio/mpeg" \
--data-binary @recording.mp3
# по URL
curl "https://api.nikagateway.ru/v1/listen?model=nova-3" \
-H "Authorization: Bearer sk-tunnel-..." \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com/recording.mp3"}'Ответ Deepgram пробрасывается как есть; в metadata добавляются cost_rub
и balance.
Модели
Указываются slug'ом deepgram/... (в /v1/listen можно и без префикса,
как у Deepgram; модель по умолчанию — nova-3):
deepgram/nova-3— флагманская модель;deepgram/nova-2;deepgram/whisper-large— хостинг OpenAI Whisper у Deepgram.
Актуальный список — в каталоге.
Тарификация
Оплата за фактическую длительность аудио (по metadata.duration из ответа)
по минутной ставке модели:
- перед запросом резервируется сумма по оценке длительности (для WAV — точной, для прочих форматов — по размеру файла с запасом);
- после ответа списывается факт, излишек резерва возвращается;
- ошибка провайдера — полный возврат резерва.
Платные модификаторы увеличивают ставку:
multichannel=true— ставка умножается на число каналов (стерео — ×2);diarize,summarize,sentiment,intents,topics,detect_language— наценки к базовой ставке.
Ограничения
- Максимальный размер аудио — 100 МБ (свыше —
413 audio_too_large); - неизвестная модель —
400 model_not_found; - транскрибация по URL резервируется с фиксированным лимитом в 60 минут длительности.