92095ff5d6ae69b6296b6684c3cb37788410b2d8
deploy / deploy (push) Successful in 32s
Found during production smoke test: if the AMI Redirect call in create_escalation() raises (channel gone, AMI hiccup), the agent stays RESERVED forever with no owning call — orphaned out of the pool until someone fixes it by hand. Now releases the agent and marks the escalation failed before re-raising as a 502.
Merge pull request 'feat: L1->L2 agent pool and routing engine for voice escalation' (#4) from feature/l1-l2-routing-engine into main
Merge pull request 'feat: L1->L2 agent pool and routing engine for voice escalation' (#4) from feature/l1-l2-routing-engine into main
call-center
Омниканальный контакт-центр: телефония (Asterisk), Telegram, WhatsApp, веб-чат, email — плюс встроенный голосовой ИИ-оператор (распознавание речи → LLM → синтез речи). Написан на Python (FastAPI), ~25 сервисов вокруг одной SQLAlchemy-схемы, локально работает на SQLite, в проде — на PostgreSQL.
Документация
| Документ | Про что |
|---|---|
docs/architecture/overview.md |
Обзор микросервисов и их ролей |
docs/architecture/voice-ai.md |
Голосовой ИИ-оператор подробно |
docs/architecture/real-time-voice-service.md |
Рантайм голосового моста (AudioSocket, TTS/ASR) |
docs/architecture/event-schemas.md |
Схемы событий шины (RabbitMQ) |
docs/runbooks/local-setup.md |
Как поднять проект локально (демо-режим и ручной запуск) |
docs/runbooks/deployment.md |
Как разворачивать (Docker Compose / Kubernetes) |
longread.md |
Сквозной архитектурный ревью репозитория — что реально есть, где технический долг |
Быстрый старт
Подробности — в docs/runbooks/local-setup.md. Коротко:
python -m pip install -r requirements.txt
cp .env.example .env # по умолчанию SQLite, без Docker
python scripts/migrate_core_db.py
uvicorn gateway.app:app --reload --port 8080
Точки входа (после старта gateway): /operator, /supervisor, /admin, /analyst на http://localhost:8080.
Демо-режим одной командой (поднимает весь стек + тестовые данные): scripts/prepare_demo.ps1.
Тесты
pytest -q
Частые задачи
- Поменять greeting/system prompt голосового бота Айнур — правится в коде:
services/shared/ai_operator_config.py→ai_operator_default_config(), коммит и деплой; сервис сам синкает значение в БД при старте.
Languages
Python
74.2%
JavaScript
18.8%
HTML
3.4%
CSS
2.9%
PowerShell
0.4%
Other
0.3%