Tandläkare Svensson AI-receptionist — ring och se bokningen dyka upp live
📞 076-686 72 26

Så byggde vi AI-tandläkaren

En enkel arkitektur med tre delar: telefoni via 46elks, röst-AI från Deepgram och en SQLite-databas för bokningar. Allt körs på en enkel Linux-server.

Arkitekturöversikt

När en patient ringer kommer samtalet in via 46elks som en WebSocket-anslutning. Servern bridgar ljudet till Deepgram Voice Agent som hör vad patienten säger, tänker ut ett svar och pratar tillbaka. När AI:n behöver kolla schemat eller boka en tid anropas funktioner mot vår SQLite-databas.

Översikt

Patient → Telefon → 46elks (WebSocket) → Server → Deepgram Voice Agent → Tool calls → SQLite

Telefonin — 46elks

46elks är ett svenskt telekom-API som gör det enkelt att ta emot och ringa samtal programmatiskt. Vi använder deras WebSocket-baserade telefoni — när någon ringer vårt nummer skickas samtalet som en WebSocket-anslutning till vår server.

Minimal WebSocket-bridge

Så här ser kopplingen mellan 46elks och Deepgram ut i sin enklaste form:

async def bridge_call(elks_ws, deepgram_ws):
    """Bridga ljud mellan 46elks och Deepgram."""

    async def elks_to_deepgram():
        async for msg in elks_ws:
            event = json.loads(msg.data)
            if event.get("t") == "audio":
                audio = base64.b64decode(event["data"])
                await deepgram_ws.send_bytes(audio)

    async def deepgram_to_elks():
        async for msg in deepgram_ws:
            if msg.type == WSMsgType.BINARY:
                audio_b64 = base64.b64encode(msg.data).decode()
                await elks_ws.send_str(json.dumps({
                    "t": "audio", "data": audio_b64
                }))

    await asyncio.gather(elks_to_deepgram(), deepgram_to_elks())

Röst-AI — Deepgram Voice Agent

Deepgram Voice Agent är en helthetslösning för röstbaserade AI-agenter. Den hanterar hela kedjan:

🎤

Tal-till-text (STT)

Nova-3 med svenska — uppfattar naturligt tal med hög precision, även med dialekt.

🧠

LLM-resonerande

GPT-4o-mini förstår sammanhanget och bestämmer vad som ska göras — svara, boka eller kolla schema.

🔈

Text-till-tal (TTS)

Deepgrams egna röstmodell ger naturligt klingande svar med låg latens.

🔧

Function calling

AI:n kan anropa funktioner — kolla lediga tider, boka och avboka — direkt under samtalet.

Tool call-schema för bokning

Så här definierar vi bokningsfunktionen som Deepgram kan anropa:

{
    "name": "book_appointment",
    "description": "Boka en tid åt en patient.",
    "parameters": {
        "type": "object",
        "properties": {
            "patient_name": { "type": "string" },
            "date":         { "type": "string", "description": "YYYY-MM-DD" },
            "time":         { "type": "string", "description": "HH:MM" },
            "treatment":    { "type": "string" }
        },
        "required": ["patient_name", "date", "time", "treatment"]
    }
}

Realtidsdashboard

Dashboarden är en ren HTML/CSS/JS-sida som pollar servern var tredje sekund. När en ny bokning görs visas den omedelbart i kalendern med en pulsande animation, och en toast-notis glider in från höger.

Bygg din egen

Intresserad av att bygga något liknande? Kolla vår steg-för-steg-guide eller registrera dig hos 46elks.

Läs mer