Skip to content

# Тестування голосового чату (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])

## ✅ Критерії успіху

1. ✅ STT сервіс працює (`docker ps | grep dagi-stt`)
2. ✅ Telegram Gateway отримує голосові повідомлення (логи)
3. ✅ Бот коректно транскрибує українську та англійську
4. ✅ Час відповіді < 10 секунд для коротких повідомлень (< 10 сек аудіо)
5. ✅ Бот відповідає на основі транскрибованого тексту

## 🚀 Наступні кроки

1. Додати підтримку інших форматів (MP3, WAV)
2. Оптимізувати модель Whisper (smaller model або GPU)
3. Додати кешування для повторних фраз
4. Інтеграція з TTS для повної voice-to-voice взаємодії

Тест створено: 2025-11-18