Demo av 46elks röst-API

Ring och beställ pizza med AI

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 77

Ring numret och se beställningen dyka upp nedan—live!

Se dashboarden

Beställningar dyker upp här i realtid

Ring numret ovan och se din order dyka upp. Allt drivs av 46elks röst-API.

Meny

Beställningar

🦌Inga beställningar ännu
Ring och beställ!

Om demot

Vad är pizzanummer.se?

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.

📞

Röstsamtal via 46elks

Ditt samtal kopplas via 46elks WebSocket-API direkt till en AI-röstassistent som förstår svenska.

🤖

AI som förstår dig

OpenAI Realtime API driver konversationen. Röstassistenten förstår naturligt tal och sammanfattar din order.

💬

SMS-bekräftelse

När beställningen är klar skickas ett SMS via 46elks med orderdetaljer och en spårningslänk.

💻

Realtidsdashboard

Dashboarden ovan visar ordrar live. Hantera meny, ingredienser och orderstatus direkt.


Så fungerar det

Från samtal till pizza

Hela flödet — från att du ringer till att pizzerian börjar baka — sker automatiskt.

1

Du ringer 076-686 77 77

Samtalet kopplas via 46elks till vår server över WebSocket. Ingen väntetid, ingen kö.

2

AI tar din beställning

Röstassistenten presenterar menyn, hjälper dig välja, och bekräftar din order på svenska.

3

SMS + spårning

Du får ett SMS med din order och en länk där du kan följa status i realtid.

4

Pizzerian hanterar ordern

Dashboarden visar nya ordrar live. Pizzerian uppdaterar status — kunden ser det direkt.


Under huven

Byggt med 46elks

Hela demot kör på en enda server och använder tre 46elks-funktioner.

🎙

Röst via WebSocket

46elks kopplar samtal som rå PCM-ljud över WebSocket. Vi bridgar det till OpenAI Realtime API.

💬

SMS-API

Orderbekräftelse, statusuppdateringar och spårningslänkar skickas via 46elks SMS.

📞

Telefonnummer

Svenskt mobilnummer allokerat via 46elks. Konfigurerat att peka på vår WebSocket-server.

Exempel — Konfigurera nummer med 46elks API
# 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!

Steg-för-steg

Bygg ditt eget pizzanummer

Allt du behöver är ett 46elks-konto, en server och en OpenAI API-nyckel. Här är hela processen.

Skapa konto & allokera nummer

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.

Sätt upp WebSocket-servern

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:

voice_agent.py

WebSocket-server som tar emot ljud från 46elks, skickar det till OpenAI Realtime API, och spelar upp svaret tillbaka.

web_app.py

Flask-app som tar emot beställningar från AI:n, lagrar i SQLite, skickar SMS via 46elks och visar dashboarden.

menu.py

Menydata som Python-listor. AI:n får menyn som text i sitt systemprompt. Lätt att ändra och utöka.

.env

API-nycklar: ELKS_API_USER, ELKS_API_PASS, OPENAI_API_KEY och PIZZA_PHONE.

Bridga 46elks ↔ OpenAI

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

Definiera AI-verktyg (function calling)

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.

Skriv AI-promptet

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:

AI-prompt — Systeminstruktioner för röstassistenten
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.
Tips för bra prompts: Ge AI:n en tydlig personlighet och konkreta steg. Inkludera hela menyn med priser i promptet — AI:n behöver det för att räkna rätt. Använd VERSALER för viktiga regler. Håll instruktionerna till max ~2000 ord för bäst prestanda.
Dynamiskt prompt: Bygg promptet vid varje samtalsstart. Hämta listan över ej tillgängliga rätter från databasen och lägg till i promptet — då kan personalen styra menyn i realtid utan att starta om servern.
Komplett flöde — Python-pseudokod
# 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:8104/api/orders", json=args)
        send_sms_via_46elks(args["customer_phone"], "Din pizza är beställd!")

Vanliga frågor

FAQ

Nej! 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.

Bygg din egen röstlösning

Skapa ett gratis 46elks-konto och börja bygga. Telefonnummer, röst-API och SMS — allt via ett enkelt API.

Skapa konto gratis → Läs dokumentationen
Relaterade demos

Fler demos från 46elks