Telefon-Assistent auf AWS — POC

KI-Telefonassistent mit Amazon Connect als Voice-Frontend und Bedrock Claude als Brain. Erstmal Proof of Concept in av-production — Region eu-central-1. Budget ist 10 EUR, das reicht für ein lauffähiges Prototyping-Setup, nicht für Dauerbetrieb mit deutscher Nummer.

Ziel

Anrufer spricht mit dem Bot, der versteht das Anliegen, antwortet sinnvoll auf Deutsch, kann optional über Lambda+MCP-Bridge auf bestehende Tools zugreifen (Papierkram, Kalender, etc. — siehe _index).

Aktiver Use-Case (seit 2026-05-09): Demo-Telefonbot für Aylem Eat & Meet (Döner-Restaurant in Hamm, Hammerstr. 101, Online-Bestellung über aylem.orderstork.com). Der Bot nimmt Reservierungswünsche auf, gibt Adresse/Spezialitäten an, verweist für Bestellungen auf die Website. System Prompt + Greeting in index.py.

Andere POC-Kandidaten geparkt: AV-FAQ/Triage-Bot, Voit Voice Interface.

Architektur

flowchart LR
    C[Anrufer] --> N[Phone Number<br/>oder Browser Soft-Phone]
    N --> CC[Amazon Connect<br/>Contact Flow]
    CC --> LX[Lex V2 Bot<br/>FallbackIntent]
    LX --> LM[Lambda Hook]
    LM --> BR[Bedrock<br/>Claude Sonnet 4.5]
    LM --> DDB[(DynamoDB<br/>Session State)]
    BR --> LM
    LM --> PY[Polly Neural<br/>Vicki DE]
    PY --> CC
    CC --> C

Service-Begründung:

  • Amazon Connect statt Eigenbau (Chime SDK + selbst gestrickt) — die Voice-Pipeline, Telco-Integration und Contact-Flows sind out-of-the-box
  • Lex V2 als Voice-Gateway, ein einziger AMAZON.FallbackIntent der alles an Lambda weitergibt — wir wollen LLM-Antworten, kein klassisches Slot-Filling
  • Bedrock Claude Sonnet 4.5 statt Lex-Antworten — echtes Verstehen statt Keyword-Matching
  • Polly Neural Vicki für DE-Voice-Output (klingt am natürlichsten)
  • Lambda + DynamoDB für State und ggf. Tool-Calls

Account und Region

FeldWert
AWS-Account425924867359 (av-production)
CLI-Profilav-production (AssumeRole, IAM-User-Source) — av-prod SSO funktioniert auch
Regioneu-central-1 (Frankfurt)
Bedrock✅ Sonnet 4.5 EU getestet 2026-05-09 (Converse-Call funktioniert)
Polly DE NeuralVicki (weiblich) und Daniel (männlich) — Default-Empfehlung Vicki
Connect / Lex / Lambda / Transcribealle leer, frischer Start

Phasen

Phase 0 — Soft-Phone-POC ✅ erledigt 2026-05-09

Alle Ressourcen stehen, End-to-End-Smoke-Test gegen das live-Alias war grün (Lex Runtime → Lambda → Bedrock liefert deutsche, natürlich klingende Antwort zurück).

RessourceName / ID
Connect Instanceav-voice-poc · 13de806b-f7b1-4f1c-b791-49056ec24451 · https://av-voice-poc.my.connect.aws
Lambdaav-voice-bot-handler (python3.13, arm64, MODEL_ID env var)
Lambda Roleav-voice-bot-lambda-role (Bedrock invoke + CloudWatch logs)
Lex V2 Botav-voice-bot · botId YOOLVJ4JWB
Lex Localede_DE · Vicki neural · 0.4 confidence threshold
Lex IntentsFallbackIntent (FALLBCKINT) + Custom TalkToAssistant (BWYPO1NSCW), beide mit Lambda fulfillment
Lex Bot Version1
Lex Bot Aliaslive · S9ZL5VK1T7 (mit codeHookSpec auf Lambda)
Connect ↔ Lexassociated
Contact Flowav-voice-bot-inbound · 572a3616-b335-41a7-ae34-34df80f2e1e3

Smoke-Test (Lex Runtime API):

  • Input: “Hallo, ich rufe an wegen einem Beratungstermin fuer mein Restaurant”
  • Output: “Hallo! Sehr gerne helfe ich Ihnen weiter. Für welchen Bereich Ihres Restaurants interessieren Sie sich denn — geht es um Reservierungssysteme, Kundenservice oder etwas anderes?”
  • Confidence Intent TalkToAssistant: 0.81

Test ohne Phone Number — wo Marvin reingucken kann:

Aylem-Test-Outputs (gegen Lex Runtime Alias live, 2026-05-09):

AnfrageBot-Antwort
Tisch fuer 4 Personen am Samstag 19 Uhr reservieren”Gerne notiere ich Ihre Reservierung fuer 4 Personen am Samstag um 19 Uhr. Darf ich noch Ihren Namen und eine Telefonnummer haben, damit unser Team die Reservierung bestaetigen kann?”
Was sind eure Spezialitaeten und wo seid ihr?”Wir sind das Aylem Eat & Meet in der Hammerstrasse 101 in Hamm. Unsere Spezialitaet sind Doener-Teller fuer Feinschmecker — die Karte wechselt regelmaessig, alle Details finden Sie auf aylem.orderstork.com.”
Kann ich online bestellen?”Ja, Sie koennen ganz bequem online bestellen unter aylem.orderstork.com. Dort sehen Sie auch direkt unsere aktuelle Speisekarte und koennen alles selbst zusammenstellen.”

Bekannte Schwachstelle (zum Tunen): Bot hat in Test 2 “die Karte wechselt regelmaessig” gesagt — das war keine fixe Stammdaten-Aussage, sondern Inferenz aus dem System-Prompt. Bei einem echten Restaurant-Einsatz wuerde ich solche Aussagen rausnehmen oder durch verifizierte Fakten ersetzen.

Quirks die ich gelernt habe:

  • Lex V2 Build failed initial — die de_DE Locale verlangt mindestens einen Custom Intent mit Sample-Utterances. FallbackIntent allein reicht nicht. Daher TalkToAssistant als Catch-All-Intent mit 5 Sample-Utterances dazu.
  • UpdateContactTextToSpeechVoice Action im Connect-Flow hat keine GlobalVoice-Property (entgegen mancher Tutorials). Korrekte Parameter: TextToSpeechVoice (string) + TextToSpeechEngine (string). Plus jeder Action ausser DisconnectParticipant braucht eine Errors-Liste mit mindestens NoMatchingError.
  • Lambda-Code-Update via update-function-code braucht ~5 Sek bis LastUpdateStatus: Successful. Vorher kommt noch der alte Code zurueck.

Phase 0.5 — ElevenLabs-Pivot (parallel zu Phase 0, started 2026-05-09)

Stimmqualitaet von Polly Generative Vicki ist okay, aber ElevenLabs liefert deutlich natuerlicheres DACH-Customer-Care-Sprachgefuehl und bringt das Conversational-AI-Framework (Voice + ASR + LLM + Tool-Calls) in einem Paket. AWS-First-Default fuer Stimme bewusst overruled — Phase-0-Stack bleibt als A/B-Backup parallel laufen, kostet idle ~0.

Setup im Browser-Widget-Modus (komplett client-side, kein Backend):

RessourceWert
Agent-IDagent_4201kr530ct7es7rpm6k9ejtdbpc
Agent-NameAylem Voice Agent (POC)
Voice-IDcoPfQIqaxowKv5u2s2bV (Johanna · DACH Customer Care · Multilingual v2 capable)
Modelleleven_flash_v2_5 (Latenz-optimiert, 32 Sprachen)
LLMBedrock Claude Haiku 4.5 EU eu.anthropic.claude-haiku-4-5-20251001-v1:0 (eu-central-1), T 0.0, cache_system=True. (gehoben gpt-4o-mini→gpt-4o→Haiku 4.5 EU am 2026-05-09 — DSGVO-tauglich, schnell, beste Tool-Reliability)
Sprachede
Authenable_auth: false (public — fuer POC-Browser-Demo OK, fuer Produktion auf signed URL umstellen)
Tool 1book_reservation · tool_5301kr532508fqza3g2mhya6sqny · webhook (POST)
Tool 2take_order · tool_4301kr532mmteq7spr0m8y9tv2k7 · webhook (POST)
Tool 3end_call (System-Tool, ElevenLabs-Default)
Webhook-URL Toolshttps://placeholder.example.com/tools/<name> — TODO: ngrok lokal oder Lambda-Hosting
System-Promptuebernommen aus index.py, leicht angepasst (Tool-Hinweise statt freier Sprache)
Greeting”Hallo, hier ist Aylem Eat & Meet. Was kann ich für Sie tun?”

Voice-Auswahl-Prozess (2026-05-09):

  • Drei conversational-orientierte DE-Stimmen aus shared library evaluiert: Johanna (DACH customer care), Ela (junge customer support), Martin (maennlich phone support).
  • Default-Empfehlung: Johanna — explizit fuer DACH-Markt designed, mittlere Stimmlage, balance Herzlichkeit/Professionalitaet.
  • Stimm-Previews zum Vergleichen liegen in voice-samples:
    • 01-johanna-customer-care.mp3 · 02-ela-empathetic.mp3 · 03-martin-conversational.mp3
    • 04-aylem-text-default-hope.mp3 (ElevenLabs-Default-Voice, zeigt wie der Aylem-Text klingt)
  • afplay-Befehl fuer schnelles Vorhoeren: afplay intern/projekte/telefon-assistent-aws/voice-samples/01-johanna-customer-care.mp3

Integration in Demo-Webapp:

  • Neue Route /elevenlabs auf server.py — liefert elevenlabs.html mit Convai-Widget (<elevenlabs-convai agent-id="agent_4201kr530ct7es7rpm6k9ejtdbpc">).
  • Polly-Version (/) bleibt unveraendert, oben rechts gibt es einen Switch-Link zwischen den beiden Stacks → A/B im selben Browser ohne Reload-Tricks.
  • ElevenLabs-Pfad braucht keine AWS-Credentials, nur Internet — Widget verbindet per WebRTC direkt zur ElevenLabs-API.

Bekannte Limits / Open Loops:

  • ElevenLabs Free-Tier kann shared-library voices NICHT via TTS-API generieren (paid plan required) — Voice-Cloning oder Conversational-AI laufen aber, weil letzteres die Voice direkt im Agent-Render verwendet. Fuer langfristige Produktion ist Subscription noetig.
  • Tool-Webhooks zeigen auf Placeholder-URL — Agent simuliert Antworten bei Tool-Calls bis das echt gehostet ist. Naechster Schritt: Lambda-Endpunkt aylem-tools-handler mit book_reservation + take_order, vor API Gateway, in den Agent-Tools die URL ersetzen.
  • API-Key wurde im Chat geteilt — nach POC-Abschluss rotieren (ElevenLabs Dashboard → Profile → API Keys).
  • Cartesia API-Key (Phase 0.6) ebenfalls im Chat geteilt 2026-05-09 — bei POC-Abschluss zusammen mit dem ElevenLabs-Key rotieren (Cartesia Dashboard → API Keys).

Cross-Refs:

Phase 0.6 — Cartesia + LiveKit-Pivot (started 2026-05-09)

Drittes Voice-Stack-Variante neben Phase 0 (Polly) und Phase 0.5 (ElevenLabs ConvAI). Hier wird die ConvAI-Bundle-Idee aufgebrochen — statt einem Vendor fuer alles haben wir eine pluggable Pipeline ueber LiveKit Agents (Open Source). Vorteil: jede Pipeline-Stage (STT, LLM, TTS) ist tauschbar.

Die urspruenglich geplante dynamische Emotion-Steuerung ueber Cartesia-Controls ist am 2026-05-12 deaktiviert worden — der tts_node-Override hat ~1 s pro Antwort gekostet, und die Controls haben unter der aktiven api_version ohnehin nicht gegriffen. Der Slot ist offen, siehe README im livekit-agent-Ordner fuer den Re-Add-Pfad.

Pipeline (Stand 2026-05-11):

Browser /cartesia (LiveKit Web SDK)
  ↓ WebRTC + Token vom Flask-Backend (/api/cartesia-token)
LiveKit Cloud (managed, Region "Germany 2", Free-Tier 10k min/Mo)
  ↑↓ Audio
Python Worker (livekit-agent/agent.py)
  ├─ silero VAD
  ├─ Deepgram nova-3 (de) — STT
  ├─ Bedrock Claude Haiku 4.5 EU (eu-central-1, T 0.0, cache_system=True) — LLM
  │    ↳ System-Prompt zwingt jede Antwort mit [emotion:tag] zu starten
  ├─ tts_node-Override: parst Tag, mappt auf Cartesia controls
  └─ Cartesia Sonic 2 (de Voice "Viktoria - Phone Conversationalist") — TTS

Latenz-Tuning aktiv: preemptive_generation, min_endpointing_delay=0.2,
max_endpointing_delay=4.0, min_consecutive_speech_delay=0.1.

LLM wurde am 2026-05-09 von OpenAI gpt-4o-mini auf Bedrock Claude Haiku 4.5 EU umgestellt (DSGVO-Pfad fuer Audio+LLM ohne US-Hop, STT/TTS bleiben US bei Deepgram + Cartesia).

Code/Files:

DateiZweck
agent.pyWorker-Prozess mit Pipeline + Emotion-Override + Tools
requirements.txtlivekit-agents[deepgram,openai,cartesia,silero] + dotenv
.env.exampleLiveKit/Deepgram/OpenAI/Cartesia Keys-Vorlage
README.mdSetup + Run-Anleitung
cartesia.htmlFrontend mit LiveKit Web SDK + Audio-Visualizer
server.pyRoutes /cartesia + /api/cartesia-token (JWT-Issuer fuer Browser)

Emotion-Mapping (frueher in agent.pyEMOTION_MAP): am 2026-05-12 ausgebaut, siehe README im livekit-agent-Ordner fuer Re-Add-Pfad.

Stack-Voraussetzungen die Marvin selbst anlegen muss:

ServiceZweckFree-Tier-Bestand
LiveKit Cloud (https://cloud.livekit.io)WebRTC + Worker-Routing10k Min/Mo gratis
Deepgram (https://console.deepgram.com)STT (nova-3 DE)$200 Gratis-Credit
Cartesia (https://play.cartesia.ai)TTS Sonic 2 + Emotion-API~$5 Gratis-Credit
AWS Bedrock (eu-central-1)LLM Claude Haiku 4.5 EUPay-as-you-go in av-production

LiveKit + Deepgram + Cartesia Keys in livekit-agent/.env.local, AWS via AWS_PROFILE=av-production (shared credentials file). OpenAI-Key ist nicht mehr noetig seit LLM-Pivot auf Bedrock am 2026-05-09.

Cross-Vergleich der drei Stacks:

Phase 0 (/)Phase 0.5 (/elevenlabs)Phase 0.6 (/cartesia)
Voice-ProviderAWS Polly Vicki GenerativeElevenLabs Multilingual v2Cartesia Sonic 2
ASR/STTBrowser Web SpeechElevenLabs (in ConvAI)Deepgram nova-3
LLMBedrock Claude Sonnet 4.5Bedrock Claude Haiku 4.5 EUBedrock Claude Haiku 4.5 EU
OrchestratorLex V2 + Lambda + FlaskElevenLabs ConvAI BundleLiveKit Agents (Python)
Open Source-Anteil(kein)(kein)LiveKit Framework Open Source
EU-Hosting moeglichJa (komplett AWS EU)Nein (US, Enterprise-only)Bedingt (Worker EU, Cloud US)
Voice-Vielfalt1 Voice (Vicki)3000+ shared library~50 voices
Emotion-Steuerungneinglobal (style-Param)deaktiviert seit 2026-05-12 (Latenz + API-Mismatch), Re-Add-Pfad steht im livekit-agent README
Latenz E2E (gemessen)3–5 s1.5–2 serwartet 1–1.5 s (Cartesia first-byte 90 ms)
Tool-WebhooksLambda direkt im Pfadexterne Webhook-URL noetigPython-Funktion im Worker
Setup-Aufwandmittel (AWS-Stack)niedrig (eine API)mittel (4 Accounts + Worker)

A/B/C-Switch in den Webapps: Header oben rechts auf jeder Seite hat Schnellzugriff auf die anderen beiden Stacks.

Phase 0.7 — Tools auf MCP umgestellt (Brain+MCPs Modell, 2026-05-09)

Konsequenz aus ADR keine-eigene-plattform: Tools duerfen nicht mehr inline im Worker-Code leben (das waere wieder Voit-Pattern), sondern in einem MCP-Server der quer ueber Voice-Bot, Claude Code/Desktop, zukuenftige Web-Frontends nutzbar ist.

KomponentePfadStatus
MCP-Serverserver.pylive, stdio-MCP
Tools heutebook_reservation, take_order, get_servicesgenerisch fuer alle Service-Verticals
Storage (Phase A, ab 2026-05-12)orders.dbSQLite, zwei Tabellen reservations + orders, lokal + gitignored, Pfad/Tenant per ENV uebersteuerbar
Worker-Anbindungagent.pyMCPServerStdio als Subprocess, session = AgentSession(mcp_servers=[...])
Native @function_tool im WorkerentferntTools kommen ausschliesslich vom MCP

Was das bedeutet:

  • Wenn ich denselben MCP in Claude Code als .mcp.json-Eintrag registriere, kann ich aus Claude Code heraus auch „buch mir einen Tisch fuer 4 am Samstag um 19 Uhr” sagen — gleicher Tool-Layer wie der Voice-Bot
  • Wenn ein zweiter Kunde (Friseur) kommt: gleicher MCP, anderer Worker-Konfig, andere Persona, anderes Frontend (z.B. Whatsapp statt Voice)
  • Wenn der Voice-Vendor wechselt (z.B. ElevenLabs ConvAI statt LiveKit): MCP bleibt, nur Worker tauscht

Phase B Roadmap fuer den MCP (siehe README.md):

  • Cal.com-Integration in book_reservation (statt Mock)
  • Multi-Tenant (tenant_id als Argument oder Auth-Header)
  • Markdown-Knowledge-Base-Loader fuer get_services (pro Tenant)
  • Notification-Tool (Email/SMS an Team)
  • HTTP/SSE-Transport fuer hosted Production (av-production Fargate)

Stand 2026-05-10 — vollstaendige Open-Loop-Liste:

Open LoopStatus
Lokale SQLite-Persistenz fuer book_reservation + take_ordererledigt 2026-05-12 (Phase A — siehe server.py)
Reference-Case-Asset-Plan (12 Units in 3 Phasen: Push, Knowledge-RAG mit Tool-Splitting, Verfuegbarkeits-Check, Confirm-Loop, STT-Robustness, Eskalation, Logging, Lightweight-Eval, Prompt-Restruktur, Multi-Tenant, DSGVO-Pre-Flight, Demo-Pack)geplant + reviewed 2026-05-13 — siehe Plan-File. Echter Live-Pilot mit SIP-Nummer ist eigener Folge-Plan.
Unit 1 Telegram-Push + Unit 5 Eskalation aus Planerledigt 2026-05-13 — _telegram.py als stdlib-Wrapper, escalations-Tabelle, escalate_to_human-Tool, System-Prompt-Trigger. Echter Telegram-Smoke-Test mit Marvin-Bot-Token steht aus.
Live-Fix nach erstem Browser-Test: Multi-Lang (DE/TR/AR/KU/RU/PL/IT/FR Code-Switching) + end_call-Tool fuer saubere Verabschiedungerledigt 2026-05-13 — System-Prompt-Block MEHRSPRACHIGKEIT, lokales @function_tool end_call, Deepgram detect_language=True.
Substanz-Iter-Sub-Plan (Unit 2 + 3 + 4 aus Master in 6 Sub-Units zerlegt: Knowledge-Files, _knowledge.py-Loader, 4 KB-Tools, check_availability, Tool-Discipline + Confirm-Loop, E2E-Smoke)implementiert 2026-05-13 — Units 1-5 fertig, 33 Tests gruen, Worker neu gestartet. Unit 6 (E2E-Walkthrough) wartet auf Marvin’s Browser-Test. Siehe Sub-Plan 002.
Odoo SaaS-Backend mit Multi-Vertical-Pattern (Plan 004: Odoo Online statt Self-Host, _odoo.py Helper im tools-mcp, Pattern-Docs fuer Restaurant/Friseur/Werkstatt/Praxis/Hotel)geplant 2026-05-13 — 3 Units, 0–24 EUR/Mo, ~2.5 Werktage Aufwand. Siehe Plan 004.
WhatsApp-Channel fuer Restaurant-Bot (Plan 003 nach Re-Scoping: Phase A durch Plan 004 ersetzt; Plan 003 deckt jetzt nur noch WhatsApp-Worker via Meta Cloud API, shared System-Prompt, Aylem-Smoke-Test)geplant 2026-05-13 — depends on Plan 004 fertig. Siehe Plan 003.
Echte Bestell-System-Anbindung (GloriaFood / TastyIgniter / OrderStork-API)offen — Optionen-Vergleich am 2026-05-12, Default-Pfad GloriaFood sobald bezahlender Restaurant-Kunde
Cal.com- oder Resmio-Integration in book_reservation (statt SQLite-only)offen
Multi-Tenant-Layer im MCP (Header-basiert)offen — heute via ENV TOOLS_TENANT
Markdown-Knowledge-Base-Loader (S3) pro Tenantoffen
HTTP/SSE-Hosting des MCP auf av-production Fargateoffen
Phone-Anbindung (LiveKit SIP + Nummer)partial-live 2026-05-13: Telnyx-Setup vollautomatisch via API durchgefuehrt (FQDN-Connection aylem-livekit + LiveKit-Trunk ST_2ywxedMjK6Ja + Dispatch-Rule SDR_J4SzK8keVYQF + US-Nummer +18382068690 assigned, Worker registered Region “Germany 2”). Befund: sipgate basic-Tarif ist NICHT trunk-tauglich (REGISTER vs INVITE-Mismatch — Details in phone-sip-setup.md §Live-Erkenntnisse). Twilio-Account-Recovery offen (alte Handynummer ohne Recovery-Code). Test-Anruf offen: braucht entweder $5 Telnyx-Funding fuer DE-Nummer (saubere Loesung) ODER VoIP-App fuer US-Call. Credentials + Resource-IDs in .env.local.
Worker auf Frankfurt-Server (Mac in Hamm hat Network-Hop)offen
Restaurant-Ambient: zweites Loop-File (heute nur eins via Pixabay)offen
API-Keys (Cartesia, Deepgram, OpenAI, ElevenLabs, LiveKit, Telnyx) im Chat geteilt 2026-05-09 + 2026-05-13 — nach POC-Abschluss rotierenoffen
Tonalitaet-Pattern Voice-Bot in voice-bot-de-patternerledigt 2026-05-10
Aylem-Inhaber als public Reference-Case-Permission einholenoffen

Phase 1 — Mit echter Nummer (Tag 3+, ~5 EUR)

Erst wenn Phase 0 sauber läuft.

  • US-Nummer claimen (3/Monat) — Entscheidung abhängig vom Use-Case
  • Phone Number an Contact Flow binden
  • 30–50 Test-Anrufe als reale Demo

Phase 2 — Tool-Anbindung (außerhalb 10€-Budget)

  • MCP-Bridge: Lambda ruft lokal/remote MCPs (Papierkram, Calendar) — interessant wenn FAQ-Bot Tickets/Termine anfassen soll
  • Conversation-Logging in S3 für Eval

Kostenschätzung (Größenordnung)

Pro Test-Call (2 Min Sprechzeit, ~10 Turns):

KomponenteKosten
Connect Service Usage0.036
Telco-Minuten (nur mit Nummer)0.044
Lex Voice Requests~10 × 0.040
Bedrock Claude Sonnet 4.5~$0.05
Polly Neural~$0.025
Transcribe2 × 0.048
Lambda + DynamoDB~$0 (Free Tier)
Summe Soft-Phone~$0.20 / Call
Summe mit DE-Nummer~3/Monat fix

10 EUR ≈ $11 → ca 50 Calls Phase 0 Soft-Phone, oder ~30 Calls + DE-Nummer für 1 Monat.

Bei diesen Größen sind die Kosten dominiert von Lex/Bedrock/Polly, nicht von Connect selbst.

Sicherheit / Hygiene

  • Bedrock-Invocation-Logging aktivieren (analog av-becker)
  • Conversation-Logs (S3) ohne PII speichern oder gar nicht — Personenbezug raus
  • Cost-Alarm av-production-monthly-cost ist bereits scharf (110 USD/Monat) — POC sollte locker drunter bleiben
  • Kein Mitschnitt von Audio in Phase 0 — erst klären ob nötig (DSGVO §9 Audio = besondere Kategorie)

Offene Fragen

  1. Use-Case A oder B? (Default: A — FAQ/Triage für Agentic-Ventures)
  2. Soft-Phone-only oder gleich Nummer? (Empfehlung: erst Soft-Phone, Nummer in Phase 1)
  3. Audio-Mitschnitt? Connect kann Calls aufzeichnen — für Eval nützlich, DSGVO-konform aber nur mit klarer Ansage am Anfang. Default: aus.
  4. MCP-Tool-Anbindung im POC oder erst Phase 2? Empfehlung: erst Phase 2 — POC zeigt sonst zu wenig Voice-Kompetenz und zu viel Plumbing.

Nächste Schritte (konkret)

  1. Bestätigung Use-Case (A vorgeschlagen)
  2. aws sso login --profile av-prod und Bedrock-Modell-Access für Claude Sonnet 4.5 in eu-central-1 aktivieren (Console: Bedrock → Model access → Manage)
  3. Connect Instance via Console oder Terraform anlegen
  4. Lex V2 Bot mit FallbackIntent + DE-Locale
  5. Lambda (Python) Skeleton — empfange Lex-Event, baue Prompt, rufe Bedrock, return Text
  6. Contact Flow zusammenklicken, Soft-Phone-Test

Risiken

  • Lex DE-Locale Eigenheiten: deutsche Lex-Bots haben weniger Built-in Slot-Types als en-US — sollte für Fallback-only egal sein
  • Latenz: Bedrock-Call + Polly TTS kann 3–5s dauern, das ist im Telefon-Kontext spürbar. Streaming-Antwort über Bedrock + Polly Speech Marks könnte gegensteuern, ist aber Komplexität für Phase 2
  • eu-central-1 Bedrock-Verfügbarkeit: Claude Sonnet 4.5 ist dort verfügbar (über EU Cross-Region Inference Profile), aber checken bevor wir starten