Kom igång på under en timme
Allt du behöver för att bygga en AI-receptionist som tar emot samtal och bokar tider. Följ guiden steg för steg.
Förutsättningar
- Python 3.10+ — med
aiohttpför asynkron WebSocket-hantering - 46elks-konto — registrera dig gratis och få testkrediter
- Deepgram-konto — skapa konto för röst-AI (Voice Agent)
- En server — VPS med publik IP (t.ex. Hetzner, DigitalOcean) för WebSocket-anslutningar
Steg för steg
-
Skaffa ett telefonnummer via 46elks
Registrera dig på 46elks.com och allokera ett WebSocket-nummer. Peka numret mot din server:
# Allokera ett nummer med WebSocket-routing curl -X POST https://api.46elks.com/a1/numbers \ -u "API_USER:API_PASS" \ -d country=se \ -d number_type=mobile \ -d voice_start="ws://din-server.se:8401"TipsWebSocket-nummer levererar samtalet direkt som en WS-anslutning — inget behov av webhooks eller SIP.
-
Sätt upp WebSocket-servern
Skapa en minimal aiohttp-server som tar emot samtal från 46elks:
from aiohttp import web import json async def handle_call(request): """Ta emot inkommande samtal från 46elks.""" ws = web.WebSocketResponse() await ws.prepare(request) # Första meddelandet = samtalsinformation first = await ws.receive_str() data = json.loads(first) caller = data.get("from", "okänt") print(f"Samtal från {caller}") # Starta audio-streams await ws.send_str(json.dumps({ "t": "start_stream", "stream": "caller", "codec": "pcm/24000" })) # Här kopplar du in Deepgram (steg 3) await bridge_to_deepgram(ws, caller) return ws app = web.Application() app.router.add_get("/", handle_call) web.run_app(app, port=8401) -
Koppla in Deepgram Voice Agent
Anslut till Deepgrams Voice Agent och konfigurera språk, modell och systemmeddelande:
import aiohttp async def connect_deepgram(api_key, system_prompt): """Anslut till Deepgram Voice Agent.""" session = aiohttp.ClientSession() ws = await session.ws_connect( "wss://agent.deepgram.com/v1/agent/converse", headers={"Authorization": f"Token {api_key}"} ) # Konfigurera agenten await ws.send_str(json.dumps({ "type": "Settings", "audio": { "input": {"encoding": "linear16", "sample_rate": 24000}, "output": {"encoding": "linear16", "sample_rate": 24000} }, "agent": { "listen": {"provider": {"type": "deepgram", "model": "nova-3", "language": "sv"}}, "think": {"provider": {"type": "open_ai", "model": "gpt-4o-mini"}, "prompt": system_prompt, "functions": [] # Lägg till verktyg här (steg 4) }, "speak": {"provider": {"type": "deepgram"}}, "greeting": "Hej! Vad kan jag hjälpa dig med?" } })) return ws, session -
Lägg till verktyg och funktioner
Definiera de funktioner som AI:n ska kunna anropa. Här är ett schema för att kolla lediga tider:
TOOLS = [ { "name": "check_availability", "description": "Kolla lediga tider för ett datum.", "parameters": { "type": "object", "properties": { "date": {"type": "string", "description": "YYYY-MM-DD"} }, "required": ["date"] } } ] # Hantera function calls från Deepgram async def handle_function_call(event, dg_ws): for fn in event.get("functions", []): if fn["name"] == "check_availability": args = json.loads(fn["arguments"]) result = check_db(args["date"]) # Din databasfråga await dg_ws.send_str(json.dumps({ "type": "FunctionCallResponse", "id": fn["id"], "name": fn["name"], "content": json.dumps(result) })) -
Deploya med nginx + systemd
Kör servern som en systemd-tjänst och lägg nginx framför för HTTPS:
# /etc/systemd/system/ai-receptionist.service [Unit] Description=AI Receptionist After=network.target [Service] Type=simple User=deploy WorkingDirectory=/home/deploy/ai-receptionist ExecStart=/usr/bin/python3 server.py Restart=always [Install] WantedBy=multi-user.target# nginx — proxy för webb, direkt för 46elks WS server { server_name ai.din-doman.se; location / { proxy_pass http://localhost:8400; proxy_set_header Host $host; } } # 46elks WS går direkt till port 8401 (ingen nginx)Viktigt46elks WebSocket-nummer ansluter direkt till din server — gå inte via nginx för samtalsportarna. Öppna porten i brandväggen (t.ex.
ufw allow 8401).
Anpassa till din bransch
Grunden är densamma oavsett bransch — det enda du behöver ändra är system prompten och verktygen. Här är några idéer:
Tandläkare
Bokningar, behandlingstyper, prislista, akuttider. Precis som den här demon.
Frisör
Klippning, färgning, stylist-val. Lägg till öppettider och personalschema.
Restaurang
Bordsbokning, antal gäster, specialkost. “Vi har ett bord för fyra klockan 19.”
Bilverkstad
Service, däckbyte, besiktning. AI:n kan fråga efter bilmodell och registreringsnummer.
Kom igång idag
Registrera dig hos 46elks och Deepgram — du kan ha en fungerande AI-receptionist inom en timme.