714aa1782b51e133848ed90bc7754400202a389c
- AudioSocket server (asyncio TCP, Asterisk wire protocol) bridging calls into the same M2 agent used by chat - Call session engine: greeting → energy-VAD utterance collection → STT → agent turn → TTS playback with barge-in (120ms of caller speech stops playback); inactivity + max-duration guards; unintelligible audio reaches the agent as '[nerazumljivo]' so the two-attempt rule stays in the prompt - STTProvider (faster-whisper, lang hint 'sr', GPU/CPU via env) and TTSProvider (Azure Neural raw-8k PCM / ElevenLabs Flash) + test fakes - Recording (mixed caller+agent WAV), transcripts, per-turn latency trace, metering via record_agent_call (§12) - Internal dialplan API: /internal/calls/register (ring targets computed from working hours + ring settings §5.2), /answered (human outcome, no minutes), /hangup (abandoned → missed-call SMS §5.5); shared-token auth - Asterisk config generator (pjsip.conf + extensions.conf from DB): worker endpoints, per-tenant test-caller endpoint, register→Dial→AudioSocket dialplan with h-extension reporting — validated against a real Asterisk 20 container (modules, dialplan, endpoints all load) - docker-compose 'voice' profile (voice server + Asterisk), Dockerfile.voice, docs/VOICE_TESTING.md softphone runbook - 16 new tests incl. full fake-call e2e and a real-TCP AudioSocket wire test Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Gogo Telefon
Voice-first AI receptionist for small service businesses in Bosnia and Herzegovina.
The agent answers forwarded calls (and web chat), speaks Bosnian, checks real
availability and sends booking proposals to the salon owner — it never books
appointments itself. See docs/ and the product spec for details.
Architecture (short version)
caller → salon number (conditional forwarding) → GSM gateway → Asterisk
→ ring group (staff softphones) → no answer → voice agent (Pipecat)
→ tools HTTP → FastAPI backend → SchedulingProvider (Google Calendar | Partner API)
→ proposal email / partner push → owner action → (optional) SMS to client
Everything self-hosted except LLM + TTS APIs (swappable interfaces).
Development
uv venv && uv pip install -e '.[dev]'
docker compose up -d db # Postgres 16 on localhost:5433 (or use your own)
export GOGO_DATABASE_URL=postgresql+psycopg://gogo:gogo@localhost:5432/gogo
.venv/bin/alembic upgrade head
.venv/bin/uvicorn gogo.main:app --reload
Run tests (SQLite, no services needed):
.venv/bin/python -m pytest
The fake partner booking API used in tests (tests/fake_partner.py) doubles as
the reference implementation of Appendix B for partner IT teams:
.venv/bin/uvicorn tests.fake_partner:app --port 9100
Layout
| Path | What |
|---|---|
gogo/scheduling/ |
SchedulingProvider interface + google_calendar, partner_api, mock |
gogo/proposals/ |
proposal engine, action tokens, owner emails, .ics |
gogo/sms/ |
SmsProvider (console now, GSM gateway in M5) + Bosnian templates |
gogo/api/ |
action links, partner webhook, health |
gogo/agent/ |
LLM agent: prompt composition, tools, conversation loop (M2) |
gogo/voice/ |
Pipecat voice pipeline (M4) |
gogo/telephony/ |
Asterisk/GSM/forwarding codes (M4/M5) |
tests/fake_partner.py |
Appendix B reference implementation |
All code/comments in English; all client- and owner-facing text in Bosnian (Latin).
Description
Languages
Python
87.2%
HTML
11.3%
JavaScript
1.3%
Mako
0.1%