Тестування голосового чату (STT) через Telegram¶
Дата: 2025-11-18
Сервер: 144.76.224.179
Боти: DAARWIZZ, Helion, GREENFOOD
🎤 Що тестуємо?¶
1. Speech-to-Text (STT)¶
- Сервіс:
dagi-stt(порт 9000) - Модель: Whisper (faster-whisper)
- Призначення: Транскрипція голосових повідомлень з Telegram
2. Інтеграція з Telegram¶
- Gateway:
telegram-gateway(Long Polling) - Endpoint:
/sttна dagi-stt - Флоу:
- Користувач надсилає голосове повідомлення
- Telegram Gateway отримує
voiceабоaudioабоvideo_note - Завантажує аудіо через Local Telegram Bot API
- Відправляє на
/stt(dagi-stt) - Отримує текст
- Відправляє текст в DAGI Router (як звичайне текстове повідомлення)
- Повертає відповідь користувачу
✅ Передумови¶
1. Перевірка STT сервісу¶
# Перевірка статусу
docker ps | grep dagi-stt
# Тест health endpoint (якщо є)
curl http://localhost:9000/health
# Логи
docker logs --tail 50 dagi-stt
Очікуваний вивід:
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:9000
2. Перевірка Telegram Gateway¶
# Статус
docker ps | grep telegram-gateway
# Логи (перевірка polling)
docker logs --tail 50 telegram-gateway | grep -E '(daarwizz|helion|greenfood|polling)'
Очікуваний вивід:
INFO:app.telegram_listener:🤖 Creating bot: 8323412397:AAFxa...
INFO:aiogram.dispatcher:Run polling for bot @DAARWIZZBot id=8323412397
INFO:aiogram.dispatcher:Run polling for bot @energyunionBot id=8112062582
INFO:aiogram.dispatcher:Run polling for bot @greenfoodliveBot id=7495165343
3. Перевірка Local Telegram Bot API¶
# Статус
docker ps | grep telegram-bot-api
# Тест
curl http://localhost:8081/bot<TOKEN>/getMe
🧪 План тестування¶
Test Case 1: Базова транскрипція¶
Кроки:
1. Відкрити Telegram
2. Знайти бота @DAARWIZZBot (або @energyunionBot, @greenfoodliveBot)
3. Відправити голосове повідомлення (українською/англійською)
4. Дочекатися відповіді
Очікуваний результат: - Бот повинен відповісти текстом (підтвердження транскрипції) - Час відповіді < 10 секунд
Лог:
INFO:app.telegram_listener:📨 Received message from chat=<CHAT_ID>
INFO:app.telegram_listener:📤 Publishing to NATS: agent.telegram.update
INFO:app.router_handler:📬 NATS event: agent.telegram.update
INFO:app.router_handler:🔊 Voice message detected, calling STT...
INFO:app.router_handler:📝 Transcribed: "Хочу дізнатися про MicroDAO"
INFO:app.router_handler:📤 Sending to Router: mode=chat, message="Хочу дізнатися про MicroDAO"
INFO:app.router_handler:✅ Response from Router
INFO:app.telegram_listener:📤 Sending response to chat=<CHAT_ID>
Test Case 2: Довге голосове повідомлення¶
Кроки: 1. Надіслати голосове повідомлення > 30 секунд 2. Дочекатися транскрипції
Очікуваний результат: - Успішна транскрипція - Час відповіді < 20 секунд
Test Case 3: Різні мови¶
Кроки: 1. Надіслати українською: "Привіт, як справи?" 2. Надіслати англійською: "Hello, how are you?" 3. Надіслати російською: "Привет, как дела?"
Очікуваний результат: - Всі мови коректно розпізнаються - Whisper підтримує мультимовність
Test Case 4: Фонові шуми¶
Кроки: 1. Надіслати голосове з фоновим шумом (музика, вулиця) 2. Перевірити якість транскрипції
Очікуваний результат: - Транскрипція працює, але може містити помилки - Бот відповідає на основі розпізнаного тексту
🐛 Troubleshooting¶
Проблема 1: Бот не відповідає на голосові¶
Діагностика:
# 1. Перевірити логи telegram-gateway
docker logs --tail 100 telegram-gateway | grep -E '(voice|audio|video_note|STT)'
# 2. Перевірити логи dagi-stt
docker logs --tail 100 dagi-stt | grep -E '(POST|/stt|transcrib)'
# 3. Перевірити доступність STT
curl http://localhost:9000/health
Можливі причини: - STT сервіс не запущено - Telegram Gateway не викликає STT - Помилка завантаження аудіо з Telegram - Моделі Whisper не завантажені
Рішення:
# Перезапустити STT
docker restart dagi-stt
# Перевірити моделі
docker exec dagi-stt ls -lh /weights/ # або інший шлях до моделей
Проблема 2: STT повертає порожній текст¶
Діагностика:
# Перевірити формат аудіо
docker logs dagi-stt | grep -i 'format\\|codec\\|error'
Можливі причини: - Неправильний формат аудіо (OGG, MP3, WAV) - Занадто короткий файл (< 1 сек) - Пошкоджений файл
Рішення: - Telegram зазвичай надсилає OGG/Opus - Whisper має підтримувати - Перевірити конвертацію на стороні STT сервісу
Проблема 3: Повільна транскрипція (> 30 сек)¶
Діагностика:
# Перевірити CPU/RAM
docker stats dagi-stt
# Перевірити модель Whisper
docker exec dagi-stt env | grep WHISPER
Можливі причини: - Велика модель (large/large-v2) на CPU - Недостатньо RAM - Інші процеси навантажують сервер
Рішення:
- Використовувати tiny або base модель для швидкості
- Додати GPU (NVIDIA) для прискорення
- Збільшити ресурси контейнера
📊 Metrics для STT¶
# Кількість STT запитів
rate(stt_requests_total[5m])
# Час транскрипції (p95)
histogram_quantile(0.95, rate(stt_duration_seconds_bucket[5m]))
# Кількість помилок
rate(stt_errors_total[5m])
✅ Критерії успіху¶
- ✅ STT сервіс працює (
docker ps | grep dagi-stt) - ✅ Telegram Gateway отримує голосові повідомлення (логи)
- ✅ Бот коректно транскрибує українську та англійську
- ✅ Час відповіді < 10 секунд для коротких повідомлень (< 10 сек аудіо)
- ✅ Бот відповідає на основі транскрибованого тексту
🚀 Наступні кроки¶
- Додати підтримку інших форматів (MP3, WAV)
- Оптимізувати модель Whisper (smaller model або GPU)
- Додати кешування для повторних фраз
- Інтеграція з TTS для повної voice-to-voice взаємодії
Тест створено: 2025-11-18