ButtonTask Demo Server
Демо-сервер для голосовых кнопок и обычных HTTP-нажатий.
Возможности
POST /api/v1/classify-audio— multipartaudio+source_id, заголовокX-API-KeyPOST /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