Транскрибация
Расшифровка аудио в текст моделью ElevenLabs Scribe v2 — больше 90 языков, включая русский, пунктуация, таймкоды слов и разметка собеседников. Тот же ключ, тот же base URL, запрос — как у OpenAI.
Запрос: POST /audio/transcriptions
Файл передаётся формой multipart/form-data, как в API OpenAI, поэтому работают и curl,
и OpenAI SDK. Ответ приходит целиком, стриминга нет. Сейчас доступна одна модель —
elevenlabs/scribe-v2.
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
| file | file | да | Аудиофайл до 25 МБ — mp3, wav, m4a, ogg, opus, webm, flac или aac. Формат определяется по расширению имени файла. |
| model | string | да | Идентификатор модели — elevenlabs/scribe-v2. |
| language | string | нет | Язык записи в ISO-639-1 — ru, en и т. д. Без параметра модель определит язык сама. |
| response_format | string | нет | json — только текст, значение по умолчанию. verbose_json — ещё язык, длительность, сегменты и слова с таймкодами. |
| diarize | boolean | нет | Разметка собеседников — у каждого слова появляются speaker и speaker_label. Работает только с verbose_json. |
Подсказки терминов (keyterms) Scribe v2 не поддерживает и отвечает
400. Ссылку на файл вместо самого файла передать нельзя — только загрузка.
Примеры
Самый короткий вариант — только текст записи.
curl https://api.tokendock.cloud/v1/audio/transcriptions \
-H "Authorization: Bearer $TOKENDOCK_API_KEY" \
-F file=@call.mp3 \
-F model=elevenlabs/scribe-v2
Для записей разговоров нужна разметка собеседников: diarize=true вместе с
response_format=verbose_json. Без verbose_json запрос с
diarize отклоняется с 400.
curl https://api.tokendock.cloud/v1/audio/transcriptions \
-H "Authorization: Bearer $TOKENDOCK_API_KEY" \
-F file=@call.mp3 \
-F model=elevenlabs/scribe-v2 \
-F language=ru \
-F response_format=verbose_json \
-F diarize=true
В OpenAI SDK метод называется audio.transcriptions.create. Параметра
diarize в SDK нет, он передаётся через extra_body.
import os
from itertools import groupby
from openai import OpenAI
client = OpenAI(
base_url="https://api.tokendock.cloud/v1",
api_key=os.environ["TOKENDOCK_API_KEY"],
)
with open("call.mp3", "rb") as audio:
result = client.audio.transcriptions.create(
model="elevenlabs/scribe-v2",
file=audio,
language="ru",
response_format="verbose_json",
extra_body={"diarize": True},
)
# Реплики: подряд идущие слова одного собеседника
for speaker, words in groupby(result.words, key=lambda word: word.speaker_label):
print(f"{speaker}: {' '.join(word.word for word in words)}")
# speaker_0: Здравствуйте. Это служба поддержки Token Dock. Чем могу помочь?
# speaker_1: Добрый день. Хочу узнать, сколько стоит расшифровка записи разговора. Ответ
С response_format=json — текст и длительность записи в
usage.seconds.
{
"text": "Здравствуйте. Это служба поддержки Token Dock. Чем могу помочь? Добрый день. Хочу узнать, сколько стоит расшифровка записи разговора.",
"usage": {
"seconds": 8.7306875,
"cost": 0.0002667710069443959
}
} С verbose_json и diarize — слова и текст в примере усечены.
{
"text": "Здравствуйте. Это служба поддержки Token Dock. …",
"usage": { "seconds": 8.7306875, "cost": 0.0002667710069443959 },
"task": "transcribe",
"language": "rus",
"language_confidence": 1,
"duration": 8.7306875,
"segments": [
{ "id": 0, "start": 0, "end": 8.7306875, "text": "Здравствуйте. Это служба поддержки Token Dock. …" }
],
"words": [
{ "word": "Здравствуйте.", "start": 0.1, "end": 0.72, "speaker": 0, "speaker_label": "speaker_0", "confidence": 0.998 },
{ "word": "Это", "start": 0.9, "end": 1.06, "speaker": 0, "speaker_label": "speaker_0", "confidence": 0.999 },
"…"
]
} -
words[].speaker_label— номер собеседника видаspeaker_0,speaker_1в порядке появления в записи. Имён модель не знает. -
startиend— таймкоды слова в секундах от начала записи. -
usage.cost— служебное поле провайдера в долларах. Списание с баланса TokenDock считается по длительности, см. ниже.
Тарификация
Транскрибация считается по длительности записи — её возвращает провайдер, неполная секунда
округляется вверх. Минута записи — 1 000
токенов, сейчас это около 13,51 ₽ за час. Параметры
language, diarize и формат ответа на цену не влияют.
- Звонок на 9 секунд — 150 токенов, около 0,034 ₽.
- Восьмичасовая смена оператора колл-центра — около 108,05 ₽.
-
В консоли и журнале запросов цена модели указана за 1M токенов — это 1 000 минут записи, а
prompt_tokensв журнале — длительность в тех же единицах. - Перед запросом на балансе резервируется сумма по длительности из заголовка файла. Если заголовок не читается, запрос отклоняется — сохраните запись в одном из форматов из таблицы выше.
- Отклонённый запрос — 400, 413, 429 — не тарифицируется.
Практика
Длинные записи
- Один файл — до 25 МБ, это около 25 минут mp3 на 128 кбит/с. Записи длиннее режьте на части по паузам, а не по ровным минутам — так фраза не разрывается посередине.
- Для расшифровки речи хватает моно 16 кГц. Стерео-WAV из записывающей системы стоит пересжать в моно-mp3 или ogg — файл станет в 10–20 раз меньше.
-
Номера собеседников независимы в каждом файле:
speaker_0в соседних частях одной записи может оказаться разными людьми.
Расшифровку удобно сразу отдать чат-модели тем же ключом — выделить договорённости, оценить звонок по чек-листу или найти возражения клиента. Как это сделать — в разделе Chat Completions.