cartwright
AI & ProvidersVoice Shop (Gemini Live)

Voice Shop — Gemini Live

Voice + vision shopping bygget ind i din webshop. Same security model som text-chatten, ny modalitet.

Cartwright's storefront-templates har en floating mic-knap. Kunder klikker, taler til shoppen, og kan holde kameraet op for at vise hvad de leder efter. Stemmen kommer fra Google's Gemini Live API — den eneste generally available stack der i dag kan håndtere voice + vision + function calling i én WebSocket-session.

Hvad det betyder konkret

  • First-mover surface — pr. januar 2026 er der ingen open-source webshop-template med pakket Gemini Live voice-shopping. Du shipper det dag 1.
  • Same security model, different modality — voice-calls arver det fulde scope-system, confirmation-gates og audit-log fra Cartwright's text-chat. Voice-rows er stamps med modality="voice" så GDPR/DPO kan filtrere dem ud.
  • Bring-your-own-key — kunden konfigurerer deres egen Google Gemini API-nøgle i /admin/integrations. Du betaler ingen voice-cost; det er forholdet mellem shop-ejer og Google.
  • Cost-rails som default — per-session-cap (default 5 min), daglig per-shop-cap (default 60 min), per-IP rate-limit + BotID. Andre voice-implementeringer mangler dette og brænder $1000/dag på første abuse-incident.
  • Vision = differentiator — kunden kan toggle kamera til/fra. 1 fps frames til Gemini. "Find produkter i denne farve" mens de holder telefon mod en væg fungerer fra dag 1.

Voice ≠ tekst-backend. Voice kører altid på Google Gemini Live (cloud); det er den eneste stack der pr. 2026 understøtter real-time voice + vision + function calling. Din tekst-chat (admin-copilot, AI-stylist) kan derimod køre på lokal Gemma 4 via Ollama eller cloud Claude. De to systemer er uafhængige.

Arkitektur

[browser] ──WSS──> [Google Gemini Live API]
   │                       │
   │                       ↓ tool-call
   │                       │
   └──POST──> [your-shop /api/live/tool-dispatch]

              invokeTool(name, args, ctx, CUSTOMER_CHAT_SCOPES)

              [Prisma DB · audit-log · confirmation-gate]

Browseren snakker WS direkte med Google (server-relay ville koste 2× bandwidth og kan ikke køre på Vercel Fluid Compute). Men hver gang Gemini vil kalde en tool, POSTer browseren det til din server — som kører den samme invokeTool()-dispatcher som text-chatten, med samme scope-guards, samme confirmation-tokens, samme audit-log.

Token-mintingen er pre-committet: når serveren udsteder den ephemeral token Gemini skal bruge, låser den tools, systemInstruction og responseModalities via lockAdditionalFields. Browseren kan ikke udvide tool-allowlisten efter token er udstedt — selv hvis nogen stjæler tokenen og åbner deres egen WS-forbindelse, vil sessionen være bundet til præcis de constraints serveren bestemte.

Audit-spor

Hver voice-tool-call skrives til AuditLog-tabellen med:

actor          storefront-voice:<sessionId>
tool           "products.search" (registry dot-format)
provider       "google"
model          "gemini-2.5-flash-live"
modality       "voice"
sessionMinutes <minutter-brugt-indtil-nu>

GDPR-buyers og DPO'er kan filtrere /admin/auditmodality="voice" og se nøjagtig hvilken Gemini-version, hvilken voice, og hvilke tool-kald hver session lavede. Det er ægte compliance-værdi — voice-shopping er normalt en sort boks.

Næste skridt

On this page