En AI-röstassistent tar din beställning, skickar SMS-bekräftelse och håller koll på din pizza. Byggt med 46elks API + OpenAI.
076-686 77 77Ring numret och se beställningen dyka upp nedan—live!
Se pizzaköketRing numret ovan och se din order dyka upp. Allt drivs av 46elks röst-API.
Pizzanummer.se är en teknisk demo som visar hur man kan bygga en komplett AI-driven telefonbeställning med 46elks röst-API. Ingen riktig pizza levereras — men tekniken bakom är verklig.
Ditt samtal kopplas via 46elks WebSocket-API direkt till en AI-röstassistent som förstår svenska.
OpenAI Realtime API driver konversationen. Röstassistenten förstår naturligt tal och sammanfattar din order.
När beställningen är klar skickas ett SMS via 46elks med orderdetaljer och en spårningslänk.
Pizzaköket ovan visar ordrar i realtid. Hantera meny, ingredienser och orderstatus direkt.
Hela flödet — från att du ringer till att pizzerian börjar baka — sker automatiskt.
Samtalet kopplas via 46elks till vår server över WebSocket. Ingen väntetid, ingen kö.
Röstassistenten presenterar menyn, hjälper dig välja, och bekräftar din order på svenska.
Du får ett SMS med din order och en länk där du kan följa status i realtid.
Pizzaköket visar nya ordrar live. Pizzerian uppdaterar status — kunden ser det direkt.
Hela demot kör på en enda server och använder tre 46elks-funktioner.
46elks kopplar samtal som rå PCM-ljud över WebSocket. Vi bridgar det till OpenAI Realtime API.
Orderbekräftelse, statusuppdateringar och spårningslänkar skickas via 46elks SMS.
Svenskt mobilnummer allokerat via 46elks. Konfigurerat att peka på vår WebSocket-server.
# Peka ett 46elks-nummer mot din WebSocket-server curl -X POST https://api.46elks.com/a1/numbers/<nr> \ -u <api_user>:<api_pass> \ -d voice_start=wss://din-server.se/ws # Skicka SMS-bekräftelse curl -X POST https://api.46elks.com/a1/sms \ -u <api_user>:<api_pass> \ -d from=Pizzerian \ -d to=+46701234567 \ -d message=Din pizza är beställd!
Allt du behöver är ett 46elks-konto, en server och en OpenAI API-nyckel. Här är hela processen.
Registrera dig på 46elks.com. Allokera sedan ett svenskt telefonnummer via API:et:
curl -X POST https://api.46elks.com/a1/numbers \ -u <api_user>:<api_pass> \ -d country=se \ -d sms_url=https://din-server.se/sms \ -d voice_start=wss://din-server.se/ws
voice_start pekar på din WebSocket-server där samtalet kopplas.
När någon ringer ditt nummer öppnar 46elks en WebSocket-anslutning till din server. Ljud skickas som rå PCM-data (8kHz, 16-bit, mono). Du behöver:
WebSocket-server som tar emot ljud från 46elks, skickar det till OpenAI Realtime API, och spelar upp svaret tillbaka.
Flask-app som tar emot beställningar från AI:n, lagrar i SQLite, skickar SMS via 46elks och visar pizzaköket.
Menydata som Python-listor. AI:n får menyn som text i sitt systemprompt. Lätt att ändra och utöka.
API-nycklar: ELKS_API_USER, ELKS_API_PASS, OPENAI_API_KEY och PIZZA_PHONE.
Koppla samman två WebSockets: en från 46elks (inkommande ljud) och en till OpenAI Realtime API (AI-svar). Ljudet måste konverteras:
46elks → OpenAI: PCM 8kHz → base64-encode → skicka som input_audio_buffer.append
OpenAI → 46elks: Ta emot response.audio.delta → base64-decode → resampla till 8kHz → skicka tillbaka
OpenAI Realtime API stöder function calling. Definiera en submit_order-funktion som AI:n anropar när kunden är klar:
# Verktygsdefinition för OpenAI { "name": "submit_order", "description": "Skicka in beställningen", "parameters": { "customer_name": { "type": "string" }, "items": [{ "pizza_nr": "integer", "qty": "integer", "modifications": "string" }] } }
När AI:n anropar funktionen, posta beställningen till din Flask-app och skicka SMS via 46elks.
Promptet är nyckeln — det bestämmer hur AI:n beter sig på telefon. Här är ett förenklat exempel baserat på vårt riktiga prompt:
Du är en trevlig receptionist på [Din Pizzeria]. Du svarar på svenska. Du tar emot pizzabeställningar via telefon. Här är menyn: --- Klassiska pizzor --- 1. Margherita (95 kr) — Mozzarella, tomat, basilika 2. Vesuvio (105 kr) — Skinka 3. Capricciosa (115 kr) — Skinka, champinjoner ... (hela din meny här) --- Drycker --- Coca-Cola 33cl (25 kr) Fanta 33cl (25 kr) Så här gör du: 1. Hälsa kunden välkommen 2. Fråga vad de vill beställa 3. Om kunden säger ett pizzanummer eller namn, bekräfta valet 4. Fråga om de vill ha något att dricka 5. Fråga om de vill ha fler pizzor 6. Fråga kundens namn 7. Sammanfatta beställningen med totalpris 8. Anropa submit_order med beställningen 9. Avsluta samtalet artigt Var trevlig och naturlig, som en riktig pizzeria-receptionist. Håll svaren korta — det är ett telefonsamtal. # Tips: Lägg till regler för ändringar, tillval, och ej tillgängliga rätter dynamiskt.
VERSALER för viktiga regler. Håll instruktionerna till max ~2000 ord för bäst prestanda.
# 1. 46elks ringer din WebSocket-server async def handle_call(elks_ws): # 2. Öppna anslutning till OpenAI Realtime API openai_ws = await connect("wss://api.openai.com/v1/realtime") # 3. Skicka konfiguration + prompt await openai_ws.send({ "type": "session.update", "session": { "instructions": build_prompt(), "voice": "alloy", "tools": [submit_order_tool], } }) # 4. Bridga ljud i båda riktningarna async for msg in elks_ws: # PCM från 46elks → base64 → OpenAI await openai_ws.send({ "type": "input_audio_buffer.append", "audio": base64_encode(msg) }) # 5. När AI anropar submit_order → spara + skicka SMS def on_function_call(name, args): requests.post("http://localhost:5000/api/orders", json=args) send_sms_via_46elks(args["customer_phone"], "Din pizza är beställd!")
Jag använder en Hetzner Cloud CX22 (2 vCPU, 4 GB RAM, Ubuntu 24.04). Det räcker gött för det här. Så här sätter du upp den:
Peka din domän mot serverns IP (A-record). Sen fixar Certbot SSL åt dig:
Nginx behöver proxy:a både HTTP (Flask-appen) och WebSocket (röstagenten). Lägg till proxy_pass och Upgrade-headers för /ws-pathen.
Här är det magiska. Istället för att skriva all kod själv promptade jag Claude Code att bygga hela projektet. Jag beskrev vad jag ville ha och Claude skrev koden, skapade filerna och laddade upp dem till servern via SSH.
Det här är ungefär prompten jag började med:
Björn: Jag vill bygga en demo för 46elks som visar röst-API:et. Konceptet: en fejkad pizzeria där man ringer ett nummer och en AI tar ens beställning. Jag behöver: 1. En WebSocket-server (Python) som tar emot samtal från 46elks och bridgar till OpenAI Realtime API 2. En Flask-app med pizzakök där pizzerian ser ordrar 3. SMS-bekräftelse via 46elks när ordern är klar 4. En tracking-sida som kunden får i SMSet Servern är på root@din-server.hetzner.com 46elks API-credentials och OpenAI-nyckel lägger jag i .env Bygg allt och deploya på servern. Claude: Jag börjar med att sätta upp projektstrukturen... [Claude skapar menu.py, voice_agent.py, web_app.py, templates, systemd-services, nginx-config — och laddar upp allt via SSH]
Det fina med Claude Code är att du itererar snabbt. När grunderna var på plats fortsatte jag prompta:
Varje ändring: beskriv vad du vill → Claude skriver koden → laddar upp via SSH → startar om tjänsten. Hela loopen tar några minuter.
När koden är på plats behöver du:
voice_start till wss://din-domän.se/wsNej! Pizzanummer.se är en teknisk demo. Ingen pizza levereras. Syftet är att visa vad man kan bygga med 46elks röst-API och OpenAI.
46elks är ett svenskt API för telefoni och SMS. Med några rader kod kan du ringa samtal, skicka SMS och bygga avancerade röstapplikationer. Över 4000 företag använder 46elks.
Absolut! Skapa ett gratis konto på 46elks.com, allokera ett telefonnummer och koppla det till din WebSocket-server. Kombinera med OpenAI för AI-driven rösthantering.
Det är gratis att skapa ett 46elks-konto och testa. Du betalar bara för faktisk användning — samtal och SMS. Inga bindningstider eller fast avgift.
Röstassistenten i denna demo pratar svenska. Men 46elks röst-API är språkneutralt — det vidarebefordrar ljud. AI-modellen (OpenAI) stöder 50+ språk.
46elks skickar samtalets ljud som rå PCM-data över en WebSocket-anslutning till din server. Du kan processa, spela upp eller bridga ljudet i realtid — perfekt för AI-röstassistenter.
Skapa ett gratis 46elks-konto och börja bygga. Telefonnummer, röst-API och SMS — allt via ett enkelt API.