Главная → Блог → Транскрибация голосовых сообщений: Telegram, WhatsApp и другие мессенджеры
Транскрибация голосовых сообщений: Telegram, WhatsApp и другие мессенджеры
Голосовые сообщения удобны отправителю и неудобны получателю: их нельзя пролистать, найти поиском и прочитать на совещании. Автоматическая расшифровка решает это — покажем, как встроить её в бота или бизнес-процесс.
Чем голосовые отличаются от обычных записей
У голосовых сообщений три особенности, которые важно учитывать:
- Формат ogg/opus. Telegram и WhatsApp сжимают голос в opus — конвертировать его заранее не нужно, сервис принимает файл как есть.
- Короткая длительность. Типичное сообщение — от трёх секунд до минуты. Чем короче запись, тем меньше контекста у модели.
- Спонтанная речь. Обрывы фраз, шум улицы, слова-паразиты — всё это попадёт в расшифровку, потому что распознаётся то, что произнесено.
Отправка голосового на расшифровку
Файл передаётся в том виде, в каком пришёл от мессенджера:
from openai import OpenAI
client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="ваш ключ")
with open("voice_message.ogg", "rb") as f:
text = client.audio.transcriptions.create(model="whisper-1", file=f).text
print(text)
Формат определяется по содержимому файла, а не по расширению, поэтому ошибки в имени не помешают распознаванию.
Бот, который отвечает текстом на голосовое
Схема простая: получили голосовое → скачали файл → отправили на расшифровку → вернули текст в чат.
async def on_voice(message, bot):
file = await bot.download(message.voice.file_id) # ogg/opus
text = client.audio.transcriptions.create(
model="whisper-1", file=("voice.ogg", file), language="ru",
).text
await message.reply(text or "Не удалось разобрать речь")
Ответ приходит в том же запросе, поэтому пользователь получает текст через пару секунд после отправки сообщения.
Короткие сообщения: как поднять точность
На записях в две-три секунды модели труднее: контекста мало, а определение языка может ошибиться. Три приёма, которые почти всегда помогают:
- Укажите язык явно —
language="ru". Автоопределение отключается, ошибки на коротких фразах исчезают. - Подскажите формат ожидаемого содержания через
prompt. Для кодов подтверждения:prompt="Код подтверждения из четырёх цифр". - Проверяйте уверенность. В ответе
verbose_jsonесть вероятность языка: низкое значение — сигнал, что запись стоит перепроверить.
Многоязычные потоки
Если сообщения приходят на разных языках, ничего настраивать не нужно: язык определяется автоматически по звуку, поддерживается 99 языков. В ответе verbose_json возвращается распознанный язык — по нему удобно маршрутизировать обращения между менеджерами.
Одна оговорка: язык определяется по началу записи. Если человек начал по-русски и перешёл на английский, расшифровка продолжится в «русском режиме» — такие сообщения лучше обрабатывать отдельно.
Что делать с тишиной и пустыми записями
Часть голосовых оказывается пустой: случайное нажатие, обрыв связи, фоновый шум без речи. Сервис в таких случаях возвращает пустой текст, а не выдуманные фразы — встроенные фильтры отсекают характерные для нейросетей «галлюцинации» вроде титров и благодарностей за просмотр.
В коде достаточно проверить пустую строку и не показывать пользователю бессмысленный ответ.
Попробуйте на своих записях. Регистрация занимает минуту, бесплатных минут хватает, чтобы оценить качество.
Получить ключ бесплатноЧастые вопросы
Нужно ли конвертировать ogg в wav перед отправкой?
Нет. Файл принимается в том формате, в котором его отдаёт мессенджер: ogg, opus, mp3, m4a, wav и другие распространённые форматы.
Распознаются ли голосовые на русском языке?
Да, русский относится к языкам с наилучшим качеством распознавания. Язык определяется автоматически, но для одноязычного потока его лучше указать явно.
Сколько времени занимает расшифровка голосового?
Обычное сообщение длиной до минуты обрабатывается за одну-две секунды, ответ возвращается в том же запросе.
Что вернётся, если в записи нет речи?
Пустой текст. Сервис не додумывает содержание там, где его нет.
Есть ли ограничение на размер файла?
Да, 25 МБ на запрос. Для голосовых сообщений это с огромным запасом: в opus такой размер — это несколько часов речи.
Читайте также
- Как расшифровать запись звонка в текст — Пошаговое руководство: как перевести аудиозапись телефонного разговора в текст через API за несколько минут. Примеры кода на Python и C#, разбор ошибок.
- Автоматические субтитры SRT и VTT из видео и вебинаров — Как получить готовые субтитры с таймкодами из записи вебинара или ролика: извлечение звука, форматы SRT и VTT, примеры кода и разбор частых проблем.