Зачем нужен TTS в боте
Голосовые ответы делают бота удобнее: можно слушать ответ на ходу, за рулём или на тренировке. Пользователь отправляет голосовое сообщение — логично, что бот тоже может ответить голосом. Оставалось выбрать движок синтеза речи с хорошим качеством русского голоса и, желательно, бесплатный.
Сравнение вариантов
Я рассмотрел три варианта:
- Google Cloud TTS — отличное качество, но платный ($4 за 1 млн символов для WaveNet)
- Amazon Polly — хорошие голоса, но тоже платный и требует AWS-аккаунт
- edge-tts — использует API Microsoft Edge, бесплатный, отличное качество русских голосов
Выбор пал на edge-tts: библиотека асинхронная, не требует
API-ключей и поддерживает десятки русских голосов с разной интонацией.
Качество на уровне коммерческих решений.
Интеграция с aiogram
Интеграция оказалась простой. Вызываем edge_tts.Communicate
с нужным текстом и голосом, сохраняем результат в MP3-файл. Но
Telegram ожидает голосовые сообщения в формате OGG Opus. Для конвертации
использую ffmpeg через subprocess:
ffmpeg -i input.mp3 -c:a libopus output.ogg. Весь
процесс — генерация и конвертация — занимает 1–2 секунды для
типичного ответа.
Результат
Бот теперь отвечает голосом с естественной интонацией. Пользователи могут выбрать предпочитаемый голос через настройки. Решение полностью бесплатное, не требует внешних API-ключей и работает стабильно. Единственное ограничение — зависимость от доступности Edge API, но за несколько месяцев эксплуатации проблем не было ни разу.