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.FallbackIntentder 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
| Feld | Wert |
|---|---|
| AWS-Account | 425924867359 (av-production) |
| CLI-Profil | av-production (AssumeRole, IAM-User-Source) — av-prod SSO funktioniert auch |
| Region | eu-central-1 (Frankfurt) |
| Bedrock | ✅ Sonnet 4.5 EU getestet 2026-05-09 (Converse-Call funktioniert) |
| Polly DE Neural | Vicki (weiblich) und Daniel (männlich) — Default-Empfehlung Vicki |
| Connect / Lex / Lambda / Transcribe | alle 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).
| Ressource | Name / ID |
|---|---|
| Connect Instance | av-voice-poc · 13de806b-f7b1-4f1c-b791-49056ec24451 · https://av-voice-poc.my.connect.aws |
| Lambda | av-voice-bot-handler (python3.13, arm64, MODEL_ID env var) |
| Lambda Role | av-voice-bot-lambda-role (Bedrock invoke + CloudWatch logs) |
| Lex V2 Bot | av-voice-bot · botId YOOLVJ4JWB |
| Lex Locale | de_DE · Vicki neural · 0.4 confidence threshold |
| Lex Intents | FallbackIntent (FALLBCKINT) + Custom TalkToAssistant (BWYPO1NSCW), beide mit Lambda fulfillment |
| Lex Bot Version | 1 |
| Lex Bot Alias | live · S9ZL5VK1T7 (mit codeHookSpec auf Lambda) |
| Connect ↔ Lex | associated |
| Contact Flow | av-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:
- Lex Console Test (Text + Mic): https://eu-central-1.console.aws.amazon.com/lexv2/home?region=eu-central-1#bots/YOOLVJ4JWB/draft/intents → “Test” Button rechts oben
- Connect Console: https://av-voice-poc.my.connect.aws — erstmal nur Admin (Marvin als ROOT-Admin), Soft-Phone-Test braucht zusätzlich einen Connect-User (kann via API nachgelegt werden)
Aylem-Test-Outputs (gegen Lex Runtime Alias live, 2026-05-09):
| Anfrage | Bot-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
TalkToAssistantals Catch-All-Intent mit 5 Sample-Utterances dazu. UpdateContactTextToSpeechVoiceAction im Connect-Flow hat keineGlobalVoice-Property (entgegen mancher Tutorials). Korrekte Parameter:TextToSpeechVoice(string) +TextToSpeechEngine(string). Plus jeder Action ausserDisconnectParticipantbraucht eineErrors-Liste mit mindestensNoMatchingError.- Lambda-Code-Update via
update-function-codebraucht ~5 Sek bisLastUpdateStatus: 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):
| Ressource | Wert |
|---|---|
| Agent-ID | agent_4201kr530ct7es7rpm6k9ejtdbpc |
| Agent-Name | Aylem Voice Agent (POC) |
| Voice-ID | coPfQIqaxowKv5u2s2bV (Johanna · DACH Customer Care · Multilingual v2 capable) |
| Modell | eleven_flash_v2_5 (Latenz-optimiert, 32 Sprachen) |
| LLM | Bedrock 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) |
| Sprache | de |
| Auth | enable_auth: false (public — fuer POC-Browser-Demo OK, fuer Produktion auf signed URL umstellen) |
| Tool 1 | book_reservation · tool_5301kr532508fqza3g2mhya6sqny · webhook (POST) |
| Tool 2 | take_order · tool_4301kr532mmteq7spr0m8y9tv2k7 · webhook (POST) |
| Tool 3 | end_call (System-Tool, ElevenLabs-Default) |
| Webhook-URL Tools | https://placeholder.example.com/tools/<name> — TODO: ngrok lokal oder Lambda-Hosting |
| System-Prompt | uebernommen 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.mp304-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
/elevenlabsauf 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-handlermitbook_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:
- MCP-Setup: elevenlabs
- Voice-Sample-Ordner: voice-samples
- A/B-Webapp: README.md
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:
| Datei | Zweck |
|---|---|
| agent.py | Worker-Prozess mit Pipeline + Emotion-Override + Tools |
| requirements.txt | livekit-agents[deepgram,openai,cartesia,silero] + dotenv |
| .env.example | LiveKit/Deepgram/OpenAI/Cartesia Keys-Vorlage |
| README.md | Setup + Run-Anleitung |
| cartesia.html | Frontend mit LiveKit Web SDK + Audio-Visualizer |
| server.py | Routes /cartesia + /api/cartesia-token (JWT-Issuer fuer Browser) |
Emotion-Mapping (frueher in agent.py → EMOTION_MAP):
am 2026-05-12 ausgebaut, siehe README im livekit-agent-Ordner fuer Re-Add-Pfad.
Stack-Voraussetzungen die Marvin selbst anlegen muss:
| Service | Zweck | Free-Tier-Bestand |
|---|---|---|
| LiveKit Cloud (https://cloud.livekit.io) | WebRTC + Worker-Routing | 10k 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 EU | Pay-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-Provider | AWS Polly Vicki Generative | ElevenLabs Multilingual v2 | Cartesia Sonic 2 |
| ASR/STT | Browser Web Speech | ElevenLabs (in ConvAI) | Deepgram nova-3 |
| LLM | Bedrock Claude Sonnet 4.5 | Bedrock Claude Haiku 4.5 EU | Bedrock Claude Haiku 4.5 EU |
| Orchestrator | Lex V2 + Lambda + Flask | ElevenLabs ConvAI Bundle | LiveKit Agents (Python) |
| Open Source-Anteil | (kein) | (kein) | LiveKit Framework Open Source |
| EU-Hosting moeglich | Ja (komplett AWS EU) | Nein (US, Enterprise-only) | Bedingt (Worker EU, Cloud US) |
| Voice-Vielfalt | 1 Voice (Vicki) | 3000+ shared library | ~50 voices |
| Emotion-Steuerung | nein | global (style-Param) | deaktiviert seit 2026-05-12 (Latenz + API-Mismatch), Re-Add-Pfad steht im livekit-agent README |
| Latenz E2E (gemessen) | 3–5 s | 1.5–2 s | erwartet 1–1.5 s (Cartesia first-byte 90 ms) |
| Tool-Webhooks | Lambda direkt im Pfad | externe Webhook-URL noetig | Python-Funktion im Worker |
| Setup-Aufwand | mittel (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.
| Komponente | Pfad | Status |
|---|---|---|
| MCP-Server | server.py | live, stdio-MCP |
| Tools heute | book_reservation, take_order, get_services | generisch fuer alle Service-Verticals |
| Storage (Phase A, ab 2026-05-12) | orders.db | SQLite, zwei Tabellen reservations + orders, lokal + gitignored, Pfad/Tenant per ENV uebersteuerbar |
| Worker-Anbindung | agent.py | MCPServerStdio als Subprocess, session = AgentSession(mcp_servers=[...]) |
| Native @function_tool im Worker | entfernt | Tools 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_idals 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 Loop | Status |
|---|---|
Lokale SQLite-Persistenz fuer book_reservation + take_order | erledigt 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 Plan | erledigt 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 Verabschiedung | erledigt 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 Tenant | offen |
| HTTP/SSE-Hosting des MCP auf av-production Fargate | offen |
| 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 rotieren | offen |
| Tonalitaet-Pattern Voice-Bot in voice-bot-de-pattern | erledigt 2026-05-10 |
| Aylem-Inhaber als public Reference-Case-Permission einholen | offen |
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):
| Komponente | Kosten |
|---|---|
| Connect Service Usage | 0.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 |
| Transcribe | 2 × 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-costist 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
- Use-Case A oder B? (Default: A — FAQ/Triage für Agentic-Ventures)
- Soft-Phone-only oder gleich Nummer? (Empfehlung: erst Soft-Phone, Nummer in Phase 1)
- Audio-Mitschnitt? Connect kann Calls aufzeichnen — für Eval nützlich, DSGVO-konform aber nur mit klarer Ansage am Anfang. Default: aus.
- 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)
- Bestätigung Use-Case (A vorgeschlagen)
aws sso login --profile av-prodund Bedrock-Modell-Access für Claude Sonnet 4.5 ineu-central-1aktivieren (Console: Bedrock → Model access → Manage)- Connect Instance via Console oder Terraform anlegen
- Lex V2 Bot mit FallbackIntent + DE-Locale
- Lambda (Python) Skeleton — empfange Lex-Event, baue Prompt, rufe Bedrock, return Text
- 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
Related
- AWS-Account: _index
- Bedrock-Erfahrung: av-becker
- Hosting-Strategie: aws-multi-account-strategie
- LLM-Hosting EU: llm-hosting-eu-optionen
- Konvergenz-Kandidat: roadmap—multi-channel — Brainstorm 2026-05-18 hat receptionist als Multi-Channel-Plattform entschieden. Bei Re-Eval 2026-07-01 die Frage klaeren: Telefon-Assistent in receptionist einschmelzen (Amazon Connect = VoiceTransport), bewusst zwei Voice-Stacks parallel, oder Telefon-Assistent decommissionieren. Brainstorm-Doc: 2026-05-18-multi-channel-receptionist-requirements.md.