Files
Button/demo-server

ButtonTask Demo Server

Демо-сервер для голосовых кнопок и обычных HTTP-нажатий.

Возможности

  • POST /api/v1/classify-audio — multipart audio + source_id, заголовок X-API-Key
  • POST /api/v1/cancel — JSON { "request_id", "source_id" }, тот же API-ключ
  • GET/POST /api/click/btn?bid=... — обычные latch-нажатия (ответ OK)
  • /ok, /fail, /cleaning, /echo — вспомогательные эндпоинты
  • UI на / — лента событий и активные голосовые вызовы
  • Аудио сохраняется в volume и отдаётся с /media/...; в ленте — плеер в стиле голосового сообщения
  • Перед STT: конвертация в mono 16 kHz; опционально profile-denoise по хвосту (DENOISE + postRollMs)

STT и классификация идут через OpenRouter; при необходимости через SOCKS5 (SOCKS5_PROXY).

HTTPS через nginx + certbot

Контейнер слушает 127.0.0.1:5000 (или :5000 на хосте). Пример:

# /etc/nginx/sites-available/button.grigowashere.ru
server {
    listen 80;
    server_name button.grigowashere.ru;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # важно: не резать API-ключ с панели
        proxy_pass_request_headers on;
        proxy_set_header X-API-Key $http_x_api_key;
        client_max_body_size 25m;
        proxy_read_timeout 120s;
    }
}
sudo ln -s /etc/nginx/sites-available/button.grigowashere.ru /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d button.grigowashere.ru

DNS A/AAAA для button.grigowashere.ru должен указывать на этот сервер.

Быстрый старт

cp .env.example .env
# заполните OPENROUTER_API_KEY и при необходимости SOCKS5_PROXY
# для офлайн-демо: MOCK_AI=true

docker compose up --build

Откройте http://localhost:5000/

Curl

curl -X POST http://localhost:5000/api/v1/classify-audio \
  -H "X-API-Key: 97098109-3188-496b-b075-0e8d83c2bef5" \
  -F "audio=@sample.wav" \
  -F "source_id=panel-01"

curl -X POST http://localhost:5000/api/v1/cancel \
  -H "X-API-Key: 97098109-3188-496b-b075-0e8d83c2bef5" \
  -H "Content-Type: application/json" \
  -d '{"request_id":"...","source_id":"panel-01"}'

Локально без Docker

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt
MOCK_AI=true uvicorn app.main:app --host 0.0.0.0 --port 5000