646917c322a09e40db261f6278f13df06d2da78f
- Embeddable vanilla-JS chat widget (one script tag + tenant public key):
WebSocket, resumable sessions (24h localStorage token), honeypot + per-IP
and per-message rate limits, Bosnian UI (§7)
- Session auth (bcrypt + signed cookies), owner accounts + super-admins,
admin impersonation ('otvori kao salon', §11)
- Owner dashboard (§10, Bosnian): requests with same actions as email,
call/chat history with transcripts, usage bar; settings for profile,
working hours (manual + LLM paste-to-parse), services CRUD + 'Zalijepi
cjenovnik' LLM import with review step, scheduling (Google OAuth free/busy
read-only + calendar mappings + buffers, partner status), telephony
(forwarding MMI codes per operator, ring group, worker SIP creds + QR),
agent voice/price-mode/notes + widget snippet, notifications/SMS templates
- Super-admin panel (§11): tenant CRUD incl. plan/minutes/paid-until,
partner API config (encrypted secrets), number/SIM registry + assignment,
connectivity test (live availability + dry-run push), versioned prompt
template editor with publish/rollback, playground, usage overview, health
- Fixes: WAL + busy_timeout for sqlite tests, no awaits in WS disconnect
path (deadlock), template publish autoflush bug
- 76 tests green (incl. widget WS e2e booking flow); dashboard, widget and
admin verified live in a browser against Postgres
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%