Главная → Блог → Как сделать телеграм-бота, который расшифровывает голосовые
Как сделать телеграм-бота, который расшифровывает голосовые
Голосовые сообщения не читаются на совещании, в метро и просто когда лень. Бот, который присылает текст в ответ на голосовое, закрывает эту боль за вечер работы. Разберём схему целиком: от получения файла до ответа в чат.
Что делает бот
Логика простая и укладывается в четыре шага:
- Получить обновление с голосовым сообщением и вытащить идентификатор файла.
- Скачать файл по ссылке, которую отдаёт Telegram.
- Отправить его на распознавание.
- Ответить текстом на исходное сообщение.
Приятная деталь: Telegram отдаёт голосовые в ogg/opus — то есть в формате, который принимается без конвертации.
Код обработчика
Пример на python-telegram-bot, но логика одинакова для любой библиотеки:
import io
from telegram import Update
from telegram.ext import Application, MessageHandler, filters, ContextTypes
from openai import OpenAI
client = OpenAI(base_url="https://voicesscribe.com/v1", api_key="ваш ключ")
async def on_voice(update: Update, ctx: ContextTypes.DEFAULT_TYPE):
voice = update.message.voice or update.message.audio
tg_file = await ctx.bot.get_file(voice.file_id)
buf = io.BytesIO(await tg_file.download_as_bytearray())
buf.name = "voice.ogg"
text = client.audio.transcriptions.create(model="whisper-1", file=buf).text
await update.message.reply_text(text or "не удалось разобрать речь")
app = Application.builder().token("токен бота").build()
app.add_handler(MessageHandler(filters.VOICE | filters.AUDIO, on_voice))
app.run_polling()
Ключевая строка здесь — присвоение buf.name. Без имени файла библиотека не поймёт формат и вернёт ошибку.
Подводные камни
- Долгий ответ. Пока идёт распознавание, отправьте действие «печатает» — иначе кажется, что бот завис.
- Длинные сообщения. Telegram обрезает ответы длиннее 4096 символов, длинный текст придётся разбивать на части.
- Кружки. Видеосообщения приходят отдельным типом video_note; звук из них тоже распознаётся, но обработать этот тип надо явно.
- Групповые чаты. Боту по умолчанию не видны чужие сообщения — режим приватности отключается у BotFather.
Что добавить после базовой версии
Первая версия бота отвечает голым текстом. Дальше обычно добавляют три вещи: краткое содержание для длинных сообщений, ограничение на пользователя, чтобы бот не превратился в бесплатный сервис для всего интернета, и хранение расшифровок для поиска по истории.
Учёт расхода удобно вести по минутам аудио: сколько обработано, столько и списано, а остаток виден в личном кабинете.
Попробуйте на своих записях. Регистрация занимает минуту, бесплатных минут хватает, чтобы оценить качество.
Получить ключ бесплатноЧастые вопросы
Нужно ли конвертировать голосовые из Telegram?
Нет. Мессенджер отдаёт ogg/opus, который принимается напрямую — достаточно указать имя файла с расширением ogg.
Почему бот отвечает ошибкой на короткие голосовые?
Чаще всего это пустая запись длиной в доли секунды — случайное нажатие. Проверяйте длительность до отправки на распознавание.
Как понять, кто сколько наговорил?
Считайте длительность обработанных сообщений по каждому пользователю: тарификация идёт за минуты аудио, и эта же метрика показывает расход.
Можно ли расшифровывать кружки?
Да, звук из видеосообщений распознаётся так же. В коде их нужно обработать как отдельный тип сообщения.
Читайте также
- Транскрибация голосовых сообщений: Telegram, WhatsApp и другие мессенджеры — Как автоматически переводить голосовые сообщения в текст: работа с форматом ogg/opus, обработка коротких записей, примеры кода для чат-ботов.
- Как превращать голосовые заметки в текст автоматически — Как настроить расшифровку голосовых заметок с телефона и диктофона в текстовую базу знаний: папка синхронизации, скрипт-наблюдатель, шаблон записи.
- Распознавание речи на Python: от одного файла до рабочего скрипта — Рабочая расшифровка аудио на Python за десять минут: установка, первый запрос, форматы ответа, обработка ошибок и приёмы, которые экономят больше всего времени.