Nika Gateway

Распознавание речи

Транскрибация аудио через 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 минут длительности.