Полноценный Telegram‑бот для расшифровки аудио. Принимает voice‑сообщения и аудиофайлы, отправляет их в STT Gateway и возвращает текст пользователю в ответе.
Добавьте бота в группу, выдайте нужные права — и он будет переводить все аудиосообщения от любых участников. ✅
- 🗣️ Расшифровка голосовых сообщений в личных чатах
- 🎵 Поддержка аудиофайлов:
ogg/opus,wav,mp3 - 👥 Работа в группах: транскрибация всех voice‑сообщений
- 🔁 Потоковый и обычный режимы обработки
- ⏱️ Настраиваемые таймауты и параметры STT
- 📬 Фоновая обработка: бот сразу подтверждает приём и присылает результат позже
- ✂️ Умное разбиение длинных текстов на сообщения с нумерацией
- 🧹 Авто‑очистка временных файлов
sequenceDiagram
autonumber
participant User as Пользователь
participant TG as Telegram
participant Bot as STT Bot
participant STT as STT Gateway
User->>TG: Отправляет voice
TG->>Bot: Доставляет voice
Bot->>STT: POST /stt (audio/ogg|wav|mp3)
STT-->>Bot: Текст
Bot-->>TG: Ответ пользователю
┌────────────┐ voice ┌───────────┐ audio/ogg ┌─────────────┐
│ Telegram │──────────▶ │ STT Bot │──────────────▶│ STT Gateway │
└────────────┘ updates └───────────┘ response └─────────────┘
▲ │
└──── text reply ─────┘
- Python 3.11
- Созданный бот в Telegram (через @BotFather)
- Запущенный STT Gateway
- Создайте виртуальное окружение:
py -3.11 -m venv .venv- Активируйте окружение:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\.venv\Scripts\Activate.ps1- Установите зависимости:
python -m pip install --upgrade pip
pip install -r requirements.txt- Создайте
.env(см..env.example) - Запуск:
python bot.pyНиже — безопасный и удобный способ запуска бота как сервиса с автозапуском и автоперезапуском.
sudo apt update
sudo apt install -y python3.11 python3.11-venv
sudo adduser --system --group --home /opt/stt-bot sttbotСкопируйте проект в /opt/stt-bot (например, через git clone или scp) и выставьте владельца:
sudo mkdir -p /opt/stt-bot
sudo chown -R sttbot:sttbot /opt/stt-botsudo -u sttbot python3.11 -m venv /opt/stt-bot/.venv
sudo -u sttbot /opt/stt-bot/.venv/bin/python -m pip install --upgrade pip
sudo -u sttbot /opt/stt-bot/.venv/bin/pip install -r /opt/stt-bot/requirements.txtСоздайте файл /opt/stt-bot/.env по примеру .env.example:
sudo -u sttbot nano /opt/stt-bot/.envСоздайте файл /etc/systemd/system/stt-bot.service:
[Unit]
Description=STT Telegram Bot
After=network.target
[Service]
User=sttbot
Group=sttbot
WorkingDirectory=/opt/stt-bot
EnvironmentFile=/opt/stt-bot/.env
ExecStart=/opt/stt-bot/.venv/bin/python /opt/stt-bot/bot.py
Restart=always
RestartSec=3
TimeoutStopSec=30
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now stt-botsudo systemctl status stt-bot
sudo journalctl -u stt-bot -fAlwaysdata — это PaaS‑хостинг, не VPS. Здесь нельзя использовать
sudo,apt install, systemd‑службы и системные пакеты.
Зато можно использоватьvirtualenv, а сервисы создаются через панель управления и автоматически стартуют после перезапуска.
- ❌ нет
sudo - ❌ нельзя
apt install - ❌ нельзя создавать
systemd‑службы - ❌ нельзя ставить системные пакеты
- ✅ можно использовать
virtualenv - ✅ можно создавать сервисы через панель управления
- ✅ сервисы автоматически запускаются после перезагрузки
После создания аккаунта:
- Зайти в панель управления
- Создать SSH‑пользователя
- Подключиться:
ssh username@sshX.alwaysdata.comВариант A — через Git (рекомендуется):
cd
git clone https://github.com/yourname/yourrepo.git
cd yourrepoВариант B — через SFTP:
- Загрузить папку проекта в:
/home/username/
python3 --versionНе использовать Python 3.13. Рекомендуется Python 3.11. Проверить доступные версии:
ls /usr/bin/python*Удаляем старое (если есть):
rm -rf venvСоздаём новое:
python3.11 -m venv venvАктивируем:
source venv/bin/activateОбновляем pip:
pip install --upgrade pipУстанавливаем зависимости:
pip install -r requirements.txtЕсли используется .env:
pip install python-dotenvpython bot.pyЕсли бот запускается — всё настроено правильно.
Остановить: CTRL+C
Файл .env должен лежать в корне проекта:
/home/username/yourrepo/.env
Пример:
TELEGRAM_BOT_TOKEN=123456:ABCDEF
STT_URL=http://localhost:8000/stt
STT_API_KEY=your_keyВ коде уже используется:
from dotenv import load_dotenv
import os
load_dotenv()
TELEGRAM_BOT_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")Обязательно указать правильный Working directory в сервисе (см. ниже).
Путь в панели: Advanced → Services → Add service
Заполнить поля:
- 🔹
SSH user: ваш SSH‑пользователь (напримерusername) - 🔹
Command: не использоватьsource
/home/username/yourrepo/venv/bin/python /home/username/yourrepo/bot.py- 🔹
Working directory:
/home/username/yourrepo
- 🔹
Monitoring command: можно оставить пустым - 🔹
Environment: Если используется.env— оставить пустым.
Если без.env, можно задать:
TELEGRAM_BOT_TOKEN=your_token_here
- 🔹
Paused: не отмечать - 🔹
Annotation: любое описание, напримерTelegram bot service
- Нажать
Save - Убедиться, что статус
Running - Проверить логи сервиса
Сервис типа Command на alwaysdata:
- автоматически стартует после перезагрузки сервера
- автоматически перезапускается при падении процесса
Дополнительных настроек не требуется. ✅
- Voice‑сообщения Telegram
- Аудиофайлы, отправленные как
audioилиdocument - Форматы:
ogg/opus,wav,mp3
- Бот обрабатывает сообщения по одному (очередь апдейтов).
- Новые сообщения не теряются и не вызывают ошибок — они ждут своей очереди.
Telegram ограничивает длину одного сообщения. Бот заранее делит длинный текст:
- по предложениям;
- при необходимости — по словам;
- без потери символов.
Если текст короткий, он отправляется одним сообщением.
Если длинный — сообщения нумеруются: 1/6, 2/6, ...
Лимит на сообщение настраивается через TG_MESSAGE_MAX_LEN (по умолчанию 3700).
TELEGRAM_BOT_TOKEN— токен Telegram‑ботаSTT_URL— URL STT Gateway, напримерhttp://localhost:8000/sttSTT_API_KEY— API‑ключ STT GatewaySTT_STREAM—trueилиfalse(по умолчаниюfalse)STT_TIMEOUT_SECONDS— таймаут запроса к STT (по умолчанию180)STT_READ_TIMEOUT_SECONDS— таймаут чтения ответа;0= без лимита (по умолчанию0)BOT_TMP_DIR— путь для временных файлов (по умолчанию./tmp)BOT_LOG_LEVEL— уровень логирования (по умолчаниюINFO)BOT_QUIET_LOGGERS— список логгеров для подавления шума (по умолчаниюtelegram,telegram.ext,httpx,apscheduler)TG_MESSAGE_MAX_LEN— максимальная длина ответа в одном сообщении (по умолчанию3700)
Чтобы бот обрабатывал аудио в группе:
- Добавьте бота в группу, сделайте админом
- Выдайте права на чтение сообщений и голосовых
- Убедитесь, что бот не ограничен и видит все сообщения
После этого бот будет автоматически расшифровывать каждое voice‑сообщение в группе. 💬
- Обычный режим: один запрос → один ответ
- Потоковый режим: читает SSE и собирает полный текст
Переключение через STT_STREAM=true|false.
- Сразу:
Принял, обрабатываю. Отправлю результат позже. - Затем: готовая расшифровка (одно или несколько сообщений)
- Бот не отвечает: проверьте
TELEGRAM_BOT_TOKEN - STT ошибки: проверьте
STT_URLиSTT_API_KEY - Долгая обработка: увеличьте
STT_TIMEOUT_SECONDS - Шум в логах: настройте
BOT_LOG_LEVELиBOT_QUIET_LOGGERS
- Храните
.envвне публичного доступа - Не публикуйте
TELEGRAM_BOT_TOKENиSTT_API_KEY
bot.py— основной код ботаrequirements.txt— зависимости.env.example— шаблон окружения
Добавьте файл лицензии, если требуется для вашего проекта.