Serve dashboard at /, version the REST API under /api/v1
The SvelteKit build was always made for the root (no base path); it now mounts at / — registered last so /api/v1, /ws, /health, and /mcp match first — and the JSON root endpoint is gone (its info lives in /health and gateway_status). REST routers move from /api/* to /api/v1/*; /ws and /health stay put; /mcp/ unchanged. Dashboard API client, tests, README, and docs updated; dashboard rebuilt (build/ is gitignored). Verified live: / serves the UI, /api/v1 answers 200/401, the old /api paths 404, MCP still lists 15 tools. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
22
README.md
22
README.md
@@ -21,7 +21,7 @@ You give it a phone number and an intent ("dispute a charge on my December state
|
||||
│ │
|
||||
│ ┌──────────┐ ┌──────────┐ ┌───────────┐ ┌──────────────┐ │
|
||||
│ │ REST API │ │WebSocket │ │MCP Server │ │ Dashboard │ │
|
||||
│ │ /api/* │ │ /ws/* │ │ (HTTP) │ │ /dashboard │ │
|
||||
│ │ /api/v1/*│ │ /ws/* │ │ (HTTP) │ │ / │ │
|
||||
│ └────┬─────┘ └────┬─────┘ └─────┬─────┘ └──────────────┘ │
|
||||
│ │ │ │ │
|
||||
│ ┌────┴──────────────┴──────────────┴────┐ │
|
||||
@@ -79,7 +79,7 @@ You give it a phone number and an intent ("dispute a charge on my December state
|
||||
- **REST API** — Call management, call history, transcripts, recordings, routing rules, device DND, call flow CRUD
|
||||
- **WebSocket** — Real-time call events, transcripts, classification updates, receptionist state transitions
|
||||
- **MCP Server** — 15 tools + 3 resources for AI assistant integration (make calls, send DTMF, get transcripts, manage flows), served over streamable HTTP at `/mcp/`
|
||||
- **Dashboard** — SvelteKit UI served at `/dashboard` with live monitor, call history with transcript playback, and a routing-rules editor
|
||||
- **Dashboard** — SvelteKit UI served at `/` with live monitor, call history with transcript playback, and a routing-rules editor
|
||||
|
||||
### Data Models
|
||||
- **Call** — Active call state with classification history, transcript chunks, hold time tracking
|
||||
@@ -189,7 +189,7 @@ npm run build
|
||||
cd ..
|
||||
```
|
||||
|
||||
The gateway serves the built UI at `/dashboard` automatically when
|
||||
The gateway serves the built UI at `/` automatically when
|
||||
`dashboard/build/` exists. Skip this step if you only need the REST/WS API.
|
||||
|
||||
### 4. Run
|
||||
@@ -211,7 +211,7 @@ pytest tests/ -v
|
||||
**Launch Hold Slayer on a number:**
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/api/calls/hold-slayer \
|
||||
curl -X POST http://localhost:8000/api/v1/calls/hold-slayer \
|
||||
-H "Authorization: Bearer $API_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
@@ -225,21 +225,21 @@ curl -X POST http://localhost:8000/api/calls/hold-slayer \
|
||||
**Check call status:**
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/api/calls/call_abc123
|
||||
curl http://localhost:8000/api/v1/calls/call_abc123
|
||||
```
|
||||
|
||||
**Browse call history (persisted in the database):**
|
||||
|
||||
```bash
|
||||
curl http://localhost:8000/api/calls/history?limit=50
|
||||
curl http://localhost:8000/api/calls/call_abc123/transcript
|
||||
curl -O http://localhost:8000/api/calls/call_abc123/recording # WAV
|
||||
curl http://localhost:8000/api/v1/calls/history?limit=50
|
||||
curl http://localhost:8000/api/v1/calls/call_abc123/transcript
|
||||
curl -O http://localhost:8000/api/v1/calls/call_abc123/recording # WAV
|
||||
```
|
||||
|
||||
**Create a smart-routing rule:**
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8000/api/routing/rules \
|
||||
curl -X POST http://localhost:8000/api/v1/routing/rules \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"name": "Block tollfree at night",
|
||||
@@ -256,7 +256,7 @@ curl -X POST http://localhost:8000/api/routing/rules \
|
||||
**Toggle Do Not Disturb on a device:**
|
||||
|
||||
```bash
|
||||
curl -X PATCH http://localhost:8000/api/routing/devices/dev_abc123/dnd \
|
||||
curl -X PATCH http://localhost:8000/api/v1/routing/devices/dev_abc123/dnd \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"enabled": true}'
|
||||
```
|
||||
@@ -355,7 +355,7 @@ All configuration is via environment variables (see `.env.example`):
|
||||
|
||||
- **Python 3.12+** + **asyncio** — Single-process async architecture
|
||||
- **FastAPI** — REST API + WebSocket server
|
||||
- **SvelteKit** — Dashboard UI (built static, served by FastAPI at `/dashboard`)
|
||||
- **SvelteKit** — Dashboard UI (built static, served by FastAPI at `/`)
|
||||
- **Sippy B2BUA** — SIP call control and DTMF
|
||||
- **PJSUA2** — Media pipeline, conference bridge, recording, WAV playback
|
||||
- **Speaches** (Whisper) — Speech-to-text
|
||||
|
||||
Reference in New Issue
Block a user