ГлавнаяБлог → Транскрибация голосовых сообщений: Telegram, WhatsApp и другие мессенджеры

Транскрибация голосовых сообщений: Telegram, WhatsApp и другие мессенджеры

Опубликовано 2026-08-04 · 5 мин чтения

Голосовые сообщения удобны отправителю и неудобны получателю: их нельзя пролистать, найти поиском и прочитать на совещании. Автоматическая расшифровка решает это — покажем, как встроить её в бота или бизнес-процесс.

Чем голосовые отличаются от обычных записей

У голосовых сообщений три особенности, которые важно учитывать:

Отправка голосового на расшифровку

Файл передаётся в том виде, в каком пришёл от мессенджера:

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 "Не удалось разобрать речь")

Ответ приходит в том же запросе, поэтому пользователь получает текст через пару секунд после отправки сообщения.

Короткие сообщения: как поднять точность

На записях в две-три секунды модели труднее: контекста мало, а определение языка может ошибиться. Три приёма, которые почти всегда помогают:

  1. Укажите язык явноlanguage="ru". Автоопределение отключается, ошибки на коротких фразах исчезают.
  2. Подскажите формат ожидаемого содержания через prompt. Для кодов подтверждения: prompt="Код подтверждения из четырёх цифр".
  3. Проверяйте уверенность. В ответе verbose_json есть вероятность языка: низкое значение — сигнал, что запись стоит перепроверить.

Многоязычные потоки

Если сообщения приходят на разных языках, ничего настраивать не нужно: язык определяется автоматически по звуку, поддерживается 99 языков. В ответе verbose_json возвращается распознанный язык — по нему удобно маршрутизировать обращения между менеджерами.

Одна оговорка: язык определяется по началу записи. Если человек начал по-русски и перешёл на английский, расшифровка продолжится в «русском режиме» — такие сообщения лучше обрабатывать отдельно.

Что делать с тишиной и пустыми записями

Часть голосовых оказывается пустой: случайное нажатие, обрыв связи, фоновый шум без речи. Сервис в таких случаях возвращает пустой текст, а не выдуманные фразы — встроенные фильтры отсекают характерные для нейросетей «галлюцинации» вроде титров и благодарностей за просмотр.

В коде достаточно проверить пустую строку и не показывать пользователю бессмысленный ответ.

Попробуйте на своих записях. Регистрация занимает минуту, бесплатных минут хватает, чтобы оценить качество.

Получить ключ бесплатно

Частые вопросы

Нужно ли конвертировать ogg в wav перед отправкой?

Нет. Файл принимается в том формате, в котором его отдаёт мессенджер: ogg, opus, mp3, m4a, wav и другие распространённые форматы.

Распознаются ли голосовые на русском языке?

Да, русский относится к языкам с наилучшим качеством распознавания. Язык определяется автоматически, но для одноязычного потока его лучше указать явно.

Сколько времени занимает расшифровка голосового?

Обычное сообщение длиной до минуты обрабатывается за одну-две секунды, ответ возвращается в том же запросе.

Что вернётся, если в записи нет речи?

Пустой текст. Сервис не додумывает содержание там, где его нет.

Есть ли ограничение на размер файла?

Да, 25 МБ на запрос. Для голосовых сообщений это с огромным запасом: в opus такой размер — это несколько часов речи.

Читайте также