Phone Assistant — Brainstorming CadencesLab
Sesión de ideación abierta para el módulo de recepcionista telefónico AI de Restaurant23 (y, por extensión, vertical reutilizable para otros storefronts: clínicas, viajes, salones, talleres, inmobiliarias…).
Equipo: CadencesLab.com. Documento hermano: PHONE_ASSISTANT.md — propuesta producto. Este documento: ideas, patrones reutilizables de Cadences.app y VOID, y exploración creativa.
0. Marco mental
Tenemos tres productos que ya resuelven, cada uno por su lado, piezas clave del problema. El asistente telefónico es la oportunidad de fusionarlos en una vertical comercial concreta:
| Producto | Lo que aporta al phone assistant |
|---|---|
| Cadences.app | Workflow Engine (20+ nodos), AI Gateway multi-proveedor, agentes de voz Twilio + ElevenLabs ya en producción, DATA_TABLE, WhatsApp híbrido, sistema de tiers/billing, multi-tenant |
| VOID Game | Sistema dual de IA (Phantom respuesta rápida + Analyzer background), memoria persistente, contexto narrativo, archivado de conversaciones, "personality engine", generación de imágenes contextuales, triggers por inactividad / eventos |
| Restaurant23 | Dominio vertical concreto: carta, menús, reservas, clientes, horarios, blog. Multi-tenant via storefrontConfig. Admin panel ya operativo. |
La tesis del brainstorm: si el patrón Phantom + Analyzer funciona para hacer sentir vivo a un copiloto de nave espacial, el mismo patrón aplicado a un recepcionista de restaurante lo convierte en algo cualitativamente distinto a los IVRs/bots actuales del mercado.
1. Lo que se "robaría" de VOID
VOID resolvió el problema de mantener una conversación coherente y persistente con un personaje IA (Phantom). El asistente telefónico es el mismo problema con otro skin.
1.1. Sistema dual de IA (clave del producto)
Patrón VOID (VOID_TECHNICAL_DEEP_DIVE.md):
Usuario habla
↓
┌────────────────┐ ┌─────────────────────┐
│ PHANTOM │ │ ANALYZER │
│ Gemini 2.5 │ ◄─ ctx ─│ Gemini 2.5 Pro │
│ Flash │ │ (background) │
│ < 2 seg │ │ cada 2-5 min │
│ 150 tokens │ │ TODO el historial │
└────────────────┘ └─────────────────────┘
↓ ↓
Respuesta TTS game_context_analysis
(story_summary,
phantom_observations,
suggested_dialogue,
danger_level...)
Aplicado al teléfono:
- VOZ = ElevenLabs Conversational AI (Phantom equivalent). Latencia < 1s, respuestas cortas, personality fija. Ya lo tenemos.
- ANALYZER = nuevo. Worker que cada N segundos durante la llamada (o entre
llamadas) analiza el transcript acumulado del cliente y produce:
customer_story— "este cliente lleva 3 reservas, 1 cancelada el último minuto, alérgico a frutos secos, prefiere terraza, viene siempre con su pareja, le gusta el rioja"mission_context— "ahora mismo está intentando hacer un pedido de catering para 30 personas, lleva 2 minutos dudando entre paella y arroz negro"phantom_observations— "está agitado, niño llorando de fondo, abreviar"suggested_dialogue— frases concretas que el asistente podría usardanger_level—low/medium/high/critical(clientes furiosos, intentos de fraude, urgencias médicas que llegaron al teléfono equivocado)next_action— recomendación: "transferir a humano", "ofrecer descuento", "cerrar venta ya"
Esto convierte una llamada IA "tonta" en una llamada con teoría de la mente del cliente.
1.2. Captain's Log → Customer Log
VOID guarda una bitácora narrativa de cada partida (VOID_CAPTAIN_LOG_*).
El equivalente para restauración:
- Cada llamada genera entradas narrativas en
customer_logpor cliente (no transcript bruto: resumen narrativo: "El cliente llamó preocupado por el menú infantil sin gluten para el cumpleaños del sábado. Reservamos mesa 12, confirmamos opción sin gluten con cocina"). - A la siguiente llamada del mismo número, el asistente arranca con esa memoria
cargada en
dynamic_variables.customer_summary. - El admin puede leer el "diario" del cliente como si fuera una conversación de CRM. No es un transcript, es una narrativa.
Esto es una experiencia que no tiene la competencia. Los CRMs muestran tickets; nosotros mostramos historia.
1.3. Triggers por inactividad y eventos
VOID ejecuta el Analyzer cuando:
- 2+ min sin actividad (
idle) - Nueva misión aceptada (
mission_start) - Cambio de sistema (
system_change) - Reconexión (
reconnect)
Aplicado:
| Trigger | Acción |
|---|---|
| Cliente hace 8 segundos de silencio | Phantom suaviza: "¿Sigues ahí? Tómate tu tiempo." |
| Cliente menciona alérgeno | Trigger sync: query inmediato a knowledge base, freno antes de afirmar |
| Pedido > 100 € | Background task: avisar al equipo por WhatsApp en paralelo a la llamada |
| Cliente abandona llamada sin cerrar | Background workflow: SMS "te llamo en 2 min" + cola de retry |
| Cliente reconecta tras corte | Phantom: "Disculpa, se cortó. Estábamos hablando de tu reserva del sábado, ¿continuamos?" |
1.4. Personality engine
VOID define a Phantom como TARS de Interstellar:
Respuestas CORTAS. Una oración es ideal.
Sin florituras poéticas. Datos, no drama.
"¿Es peligroso?" → "Sí."
Para restaurantes, cada local debería poder elegir personality preset:
| Preset | Tono | Ejemplo |
|---|---|---|
clasica |
Formal madrileño/catalán | "Buenas tardes, restaurante La Tagliatella, ¿en qué puedo ayudarle?" |
cercana |
Tuteo cálido | "¡Hola! Soy Lucía del 23, ¿qué te pongo?" |
gastrobar |
Joven, casual, con humor | "¿Mesa para esta noche? Va a estar movidito el viernes 😉" |
michelin |
Sobrio, preciso | "Encantada. ¿Para cuántos comensales y qué franja horaria?" |
delivery_express |
Eficiente, transaccional | "Pedido para llevar, dime tu CP." |
Es una variable en el prompt, no son agentes distintos. Cero coste extra.
1.5. Generación de imágenes contextuales
VOID usa FLUX para generar lo que el jugador ve. Nosotros no generamos imágenes durante la llamada (no aplica), pero podemos:
- OG image personalizada en SMS de confirmación: "Tu mesa para 4 el sábado 27" con render del comedor + nombre del cliente embebido.
- Carta visual: cuando el asistente recomienda un plato y el cliente pide "¿me lo enseñas?", manda WhatsApp con foto generada/cacheada del plato.
- Vista previa de catering: el cliente describe el evento, el asistente manda una propuesta visual generada con FLUX al WhatsApp.
1.6. Conversación archivada con metadata semántica
-- Adaptación del schema de VOID (game_conversation_archive)
CREATE TABLE phone_conversation_archive (
id TEXT PRIMARY KEY,
storefrontId TEXT NOT NULL,
callSid TEXT NOT NULL,
customerId TEXT,
callerNumber TEXT,
timestamp INTEGER NOT NULL,
speaker TEXT NOT NULL, -- 'caller' | 'assistant' | 'system'
message TEXT NOT NULL,
scenario_type TEXT, -- 'reservation' | 'order' | 'catering' | 'complaint' | 'info'
intent TEXT, -- intención detectada del turno
entities TEXT, -- JSON: { date, time, party_size, dish... }
sentiment REAL, -- -1 a 1
audio_url TEXT -- R2 key del clip de audio (opcional)
);
Esto habilita:
- Búsqueda semántica sobre todas las llamadas históricas (Vectorize).
- Replay con timeline: ver la llamada como un chat tipo Discord.
- Citas exactas en disputas: "el 14 de marzo a las 19:42 dijo literalmente X".
2. Lo que se "robaría" de Cadences.app
2.1. Workflow Engine como motor post-llamada
Esto es la mayor palanca de valor y lo más diferencial vs cualquier competidor (Smith.ai, Goodcall, Phonely, etc).
Hoy workflowExecutionEngine.js (7073 líneas) ya soporta:
- Webhook trigger
- AI Agent node
- WhatsApp Sender (oficial + agente local)
- HTTP Request
- Conditional / Loop / Delay
- Data Table Query/Write
- TTS Generator
- Voice Call
Cada llamada finalizada dispara un workflow voice_call_ended que el
restaurante puede personalizar visualmente:
voice_call_ended (trigger)
├─ AI Classifier (intent: reserva/pedido/queja/info/spam)
│
├─ if intent == "queja" && sentiment < -0.5
│ ├─ WhatsApp al gerente con resumen + audio
│ ├─ Crear tarea en CRM con prioridad alta
│ └─ Email al cliente: "el gerente te llama en 1h"
│
├─ if intent == "reserva"
│ ├─ SMS confirmación con código
│ ├─ Google Calendar invite
│ └─ Workflow recordatorio 24h antes
│
├─ if intent == "catering"
│ ├─ Crear lead en CRM
│ ├─ Notificar a comercial por WhatsApp
│ └─ Schedule follow-up en 2h si no hay respuesta
│
└─ Always
├─ Update customer_log (narrative summary)
├─ Reindex customer_facts (vectorize)
└─ Update analytics dashboard
Esto no lo tiene nadie en el mercado SMB de phone-AI. Es lo que justifica el
plan phone-pro (79 €/mes).
2.2. AI Gateway = optimización de coste obvia
AI Gateway ya hace:
- Routing multi-proveedor (Gemini, Claude, GPT-4o, DeepSeek, Groq, Workers AI…)
- Tracking de coste al céntimo por modelo
- Fallback automático a Workers AI cuando un proveedor falla
- Detección de patrones de error
Aplicado al phone assistant:
| Tarea | Modelo recomendado | Por qué |
|---|---|---|
| Respuesta voz en tiempo real | ElevenLabs Conv AI (su propio LLM) | Latencia < 800ms imprescindible |
| Analyzer background | Gemini 2.5 Flash | Rápido, barato, contexto largo |
| Resumen post-llamada | DeepSeek Chat | 0,07 €/M tokens vs 0,15 GPT-4o-mini |
| Clasificación intent | Workers AI Llama 3.1 8B | Gratis, suficiente para 5 categorías |
| Extracción entidades | Workers AI bge-m3 + reglas | Gratis |
| Embeddings cliente / búsqueda histórica | @cf/baai/bge-m3 |
Gratis, multilingüe |
| Generación carta visual / OG SMS | FLUX Schnell (Workers AI) | Gratis |
Dashboard de costes ya existe, solo hay que añadir filtros por
storefrontId y phone_assistant. Esto nos permite mostrar al cliente final
cuánto le ha ahorrado el asistente ("este mes te ahorró 47 horas de teléfono =
~600 €"). Argumento de venta directo.
2.3. Multi-tenant + tier system ya resuelto
organizations.storefrontConfig + tabla customers.tier + flujo de auth Google
ya operativo (acabamos de validarlo con metafaserio). Cero trabajo extra para
soportar multi-restaurante. Solo añadir el campo phoneAssistant al config (ver
PHONE_ASSISTANT.md §3.2).
2.4. WhatsApp híbrido como canal secundario
Cadences soporta dos modos de WhatsApp: API oficial Meta + Agente local (Electron). Para el phone assistant esto significa:
- Confirmación de reserva → WhatsApp oficial (templates aprobados)
- Link de pago Stripe → WhatsApp oficial (interactivo)
- Recordatorio 2h antes → WhatsApp oficial
- Conversación post-llamada ("oye, al final añade una silla bebé") → agente local (sin coste por mensaje, comportamiento humano)
- Encuesta CSAT al día siguiente → agente local
El cliente puede continuar la conversación que empezó por teléfono en
WhatsApp, y el asistente recuerda el contexto porque comparte
customer_log y customer_facts. Conversación omnicanal real.
2.5. IoT Hub (idea wild pero viable)
Cadences soporta MQTT, Serial, HTTP, RTSP. Aplicaciones inesperadas:
- Cámara IP en la entrada → cuando el asistente confirma una reserva, deja un evento "esperar cliente X a las 21:00, mesa 12". A las 21:00 la cámara con face recognition (Workers AI) avisa al maître: "Acaba de llegar el grupo de la mesa 12".
- Sensor de ocupación de mesas (BLE/MQTT) → el asistente sabe en tiempo real si hay mesas libres realmente, no solo según reservas.
- Termómetro IoT en cocina → si hay incidencia, pausa pedidos delivery hasta resolverlo.
Esto va para phone-enterprise, pero es una historia que vende.
3. Ideas nuevas (no copiadas de nada existente)
3.1. "Mood ring" en la UI del admin
En la lista de llamadas, cada una con un anillo de color basado en
sentiment + danger_level:
- 🟢 verde: cliente contento, llamada resuelta
- 🟡 ámbar: dudas, fricciones menores
- 🔴 rojo: queja, escalado, intento de fraude
- 🟣 morado: oportunidad detectada (catering, evento corporativo)
- ⚫ negro: spam, robocall
El gerente abre el panel por la mañana y escanea visualmente las llamadas de la noche en 5 segundos.
3.2. "Call Replay" tipo timeline de Slack/Discord
En vez de un reproductor MP3 monolítico:
[09:23:11] 🤖 Lucía: Buenas tardes, La Tagliatella.
[09:23:14] 👤 Cliente: Hola, quería reservar para el sábado.
[09:23:17] 🤖 Lucía: ¿Para cuántos y qué franja? [⚡ tool: check_availability]
[09:23:21] 👤 Cliente: Cuatro, hacia las 21:30.
[09:23:24] 🤖 Lucía: Perfecto, tengo a las 21:30 en terraza o 21:45 dentro.
[💾 dynamic_variables.party_size = 4]
[09:23:31] 👤 Cliente: Terraza mejor.
[09:23:34] 🤖 Lucía: ¿A nombre de quién?
[09:23:38] 👤 Cliente: Marcos.
[09:23:40] 🤖 Lucía: Marcos, sábado 27 a las 21:30 en terraza.
[✅ tool: create_reservation → RES-A4F2]
[09:23:48] 🤖 Lucía: Te mando confirmación al WhatsApp. Hasta el sábado.
[📤 workflow: reservationCreated]
Click en cualquier turno → reproduce el audio de ese turno aislado. Click en
una tool call → muestra request/response. Esto es debug + auditoría +
training data todo en uno.
3.3. "Coach mode" para entrenar el prompt
Después de una llamada, el gerente puede marcar turnos del transcript con:
- 👍 "así perfecto"
- 👎 "esto no me gustó, cambia X"
- ✏️ "esto debería haber dicho Y"
Esos feedbacks alimentan automáticamente un proceso semanal que ajusta el prompt del agente (DeepSeek genera diff del prompt, gerente aprueba con un click). Es fine-tuning sin fine-tuning: prompt-tuning gobernado por humanos.
3.4. "Ghost calls" de prueba
Botón en el admin: "Probar tu asistente". Llama al móvil del gerente desde el mismo número Twilio del restaurante con un escenario simulado:
- "Soy un cliente intentando hacer una reserva imposible (50 personas mañana)"
- "Soy un cliente furioso porque la última visita fue mala"
- "Soy un periodista pidiendo entrevista al chef"
- "Soy alguien que se ha equivocado de número"
El gerente vive la experiencia desde fuera y ajusta. Esto vende solo el producto en una demo.
3.5. "Voice cloning del propietario" (con consentimiento)
ElevenLabs IVC permite clonar una voz con 1-2 minutos de audio. Plan
phone-enterprise: el restaurante manda un audio del propietario o jefa de
sala, y el asistente atiende con su voz. El cliente cree que está hablando
con la persona real.
Implicaciones legales serias (deepfake, GDPR, derecho a la imagen). Aviso obligatorio en la primera llamada: "Soy la asistente virtual de Marina, puedo ayudarte con reservas y pedidos." → si el cliente dice "quiero hablar con Marina de verdad", transferencia inmediata.
3.6. "Listen mode" en vivo para el dueño
WebSocket dashboard donde el gerente ve transcripts en directo de las llamadas en curso. Si ve algo raro, botón "intervenir" → el asistente se calla y le pasa la llamada al móvil del gerente con whisper-prompt ("acaba de prometerle un descuento del 30%, no podemos asumirlo, valida tú").
Patrón inspirado en VOID donde Phantom siempre tiene a alguien (el jugador) detrás. El restaurador debería poder ser el "jugador" cuando quiera.
3.7. Memoria entre canales (omnichannel real)
customer_facts table con embeddings:
CREATE TABLE customer_facts (
id TEXT PRIMARY KEY,
storefrontId TEXT,
customerId TEXT,
fact TEXT, -- "alérgico a frutos secos"
source TEXT, -- 'phone' | 'whatsapp' | 'reservation_form' | 'manual'
callSid TEXT,
confidence REAL, -- 0-1
expiresAt INTEGER, -- algunos hechos caducan (estado emocional)
embedding BLOB, -- bge-m3
createdAt INTEGER,
verifiedBy TEXT -- staff ID si fue verificado manualmente
);
Cuando llama por teléfono, llega WhatsApp, rellena formulario web, o se sienta en mesa con NFC en QR → el asistente conoce los mismos hechos. Y los hechos nuevos detectados en cualquier canal se replican.
3.8. "Catering AI quoter" con HyDE
Para restauración online de catering, la cotización es el cuello de botella. Idea: usar HyDE (como ya hacemos en Codex) para enriquecer la solicitud del cliente:
- Cliente: "Necesito comida para 30 personas, oficina, evento de despedida, no muy caro pero que mole."
- Asistente repregunta lo justo (alérgenos, hora, dirección, presupuesto orientativo).
- Background: DeepSeek genera una propuesta hipotética detallada (3 menús diferentes con cantidades, precios, justificación) usando RAG sobre la carta del restaurante + histórico de catering similares.
- Asistente lee la propuesta resumida al teléfono y manda PDF al WhatsApp.
Tiempo: 2 minutos de llamada vs 24-48h del flujo manual actual. Conversion rate esperada x3.
3.9. "Mesa virtual" — el asistente como camarero a distancia
Idea wild: QR en la mesa del restaurante físico → llamada IA con el asistente desde el móvil del comensal. "Hola, soy Lucía, ¿qué te pongo?" Recibe el pedido, lo manda a cocina, avisa al camarero solo para llevar la comida y cobrar.
Resuelve: falta de personal, idiomas (turistas), accesibilidad (sordos pueden chatear en vez de hablar). Solo aplicable en locales con ese flujo.
3.10. Scoring del lead durante la llamada
El Analyzer puede emitir un lead_score 0-100 mientras la llamada sigue:
- Pregunta por menús de grupo → +20
- Menciona presupuesto > 1000€ → +30
- Menciona empresa con web verificable → +15
- Menciona urgencia "para mañana" → +10
- Sentimiento positivo sostenido → +10
Si supera umbral durante la llamada → trigger sync que avisa por WhatsApp al comercial mientras el cliente sigue al teléfono. El comercial puede entrar a escuchar e incluso pedir al asistente "pásamelo, lo cojo yo".
Esto es lead routing en tiempo real, no post-call. Inspirado en el
sistema de detección danger_level de VOID.
4. Patrón "Phantom Operator" (síntesis)
Si juntamos lo mejor de los tres mundos, el producto técnico es:
┌──────────────────────────────┐
│ PHANTOM OPERATOR │
│ (nombre interno) │
└──────────────────────────────┘
│
┌────────────────────────┼────────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ VOICE │ │ ANALYZER │ │ AUTOMATION │
│ (real-time)│ │ (background) │ │ (post-call) │
├──────────────┤ ├──────────────────────┤ ├──────────────────┤
│ Twilio + │ │ Gemini Flash worker │ │ Cadences │
│ ElevenLabs │ │ corre cada 5-10s │ │ Workflow Engine │
│ Conv AI │ │ durante llamada y │ │ con 20+ nodos │
│ │ │ tras finalizar │ │ │
│ < 1s latency │ │ │ │ Customizable por │
│ Personality │ │ Genera: │ │ tenant via UI │
│ presets │ │ - customer_log │ │ visual │
│ Tools agente:│ │ - customer_facts │ │ │
│ - reservas │ │ - phantom_obs │ │ Triggers: │
│ - pedidos │ │ - lead_score │ │ - call_ended │
│ - catering │ │ - danger_level │ │ - intent_X │
│ - knowledge │ │ - next_action │ │ - sentiment_low │
│ - payment │ │ │ │ │
│ - escalate │ │ Persiste en D1 + │ │ Acciones: │
│ │ │ Vectorize │ │ - WhatsApp │
│ │ │ │ │ - SMS │
│ │ │ │ │ - Email │
│ │ │ │ │ - CRM │
│ │ │ │ │ - IoT │
│ │ │ │ │ - Calendar │
└──────┬───────┘ └──────────┬───────────┘ └────────┬─────────┘
│ │ │
└───────────────────────┴─────────────────────────┘
│
┌────────────▼────────────┐
│ D1 + Vectorize + R2 │
│ - phone_calls │
│ - phone_conv_archive │
│ - customer_log │
│ - customer_facts │
│ - call_audio (R2) │
└─────────────────────────┘
Naming candidates:
- Phantom Operator — guiño a VOID, suena premium, internacional
- Cadences Voice — corporativo, alineado con marca CadencesLab
- Recepcionista 23 — nombre comercial cercano para mercado ES
- Lucía / Marina / Carla — nombres de la persona AI por defecto (cada cliente puede customizar)
Mi voto: producto = "Cadences Voice", persona por defecto = "Lucía", módulo dentro de Restaurant23 = "Recepcionista AI".
5. Roadmap revisado (con las ideas del brainstorm)
Sprint 0 — Cimientos (1-2 semanas)
- Migración 0090 normaliza
voice_calls(ver PHONE_ASSISTANT.md §4.1) - Tablas nuevas:
phone_conversation_archive,customer_log,customer_facts(con embeddings bge-m3) - Campo
phoneAssistantenStorefrontConfig - UI mínima de configuración en admin Restaurant23
Sprint 1 — Voice básico (2 semanas)
- Configurar primer número Twilio para piloto
- Context builder con personality presets (5 presets iniciales)
- Tools:
check_availability,create_reservation,cancel_reservation,search_knowledge,escalate_to_human - Endpoint
/api/storefront/[id]/knowledge/searchcon RAG hybrid (reutilizando patrón Memora) - Vista de llamadas en admin con audio + transcript
- Ghost calls (botón "probar asistente")
Sprint 2 — Analyzer (2 semanas)
- Worker background que corre cada 10s durante llamada
- Generación de
customer_log,phantom_observations,lead_score,danger_level - Inyección de observaciones en
dynamic_variablesdel agente activo - Mood ring en lista de llamadas
- Call Replay timeline tipo Slack
Sprint 3 — Workflow post-call (1-2 semanas)
- Trigger
voice_call_endedya soportado por Workflow Engine - 5 plantillas de workflow listas:
reserva-feliz,queja-grave,lead-catering,pedido-delivery,cliente-vip-detectado - UI para clonar y editar workflows desde admin del restaurante
Sprint 4 — Pedidos online + catering (2-3 semanas)
- Proyectos
online_orders,delivery_zones,catering_requests - Tools
start_order,quote_delivery,request_payment_link,create_catering_request - Catering AI quoter con HyDE
- Stripe Payment Links + SMS Twilio
- Encuesta CSAT post-llamada por SMS
Sprint 5 — Omnicanal + extras (3-4 semanas)
- Continuidad WhatsApp ↔ teléfono via
customer_facts - Coach mode (👍/👎 sobre transcripts → prompt diff semanal)
- Listen mode (WebSocket en vivo para gerente)
- Multi-idioma (ca, eu, gl, en, fr, de)
- Outbound: confirmación, recovery, encuestas
- Voice cloning del propietario (
phone-enterprise)
Sprint 6+ — Wild ideas
- Mesa virtual (QR + IA como camarero) — solo para locales que lo pidan
- IoT integration (cámara entrada, sensores ocupación)
- Multi-local con routing inteligente
6. Métricas que definirán éxito comercial
Para CadencesLab (B2B)
| KPI | Target trimestre 1 | Target año 1 |
|---|---|---|
| Restaurantes pagando | 5 | 100 |
| MRR del módulo | 250 € | 8.000 € |
| Churn mensual | < 10 % | < 5 % |
| NPS clientes | > 40 | > 60 |
| Tiempo onboarding | < 1 h | < 15 min (auto) |
Para el restaurante (lo que enseñamos en su dashboard)
- Llamadas atendidas (vs perdidas en periodo equivalente sin asistente)
- Tiempo del staff liberado =
calls_resolved_by_ai * avg_call_duration - Revenue atribuido =
online_orders.total WHERE channel='phone' - Reservas creadas via teléfono vs reservas web
- Containment rate = % resueltas sin escalar
- CSAT phone (1 pregunta SMS post-llamada)
- Top intents fallidos → cola de mejora
Para el sistema (interno CadencesLab)
- Coste medio por llamada (debe < 0,40 € para márgenes sanos en
phone-pro) - p95 latencia respuesta voz (target < 1.2s)
- Tasa de transferencia a humano (target < 15 % en restaurantes "estándar")
- Tasa de alucinación detectada en alérgenos (target 0 % — política tolerancia cero)
7. Riesgos descubiertos en el brainstorming
Adicionales a los ya listados en PHONE_ASSISTANT.md §7:
| Riesgo | Mitigación |
|---|---|
| Voice cloning sin consentimiento | Procedimiento KYC firmado por dueño + watermark audible en primera frase + abogado revisa contrato |
| Cliente cree hablar con humano y se siente engañado | Disclaimer obligatorio configurable: "Soy la asistente virtual de…", incluso con voz clonada |
| Datos sensibles en transcript (DNI, tarjetas) | Filtro PII antes de persistir; nunca guardar números de tarjeta (cobro siempre via link Stripe externo) |
| Análisis de sentimiento con sesgos culturales | Probar el Analyzer con muestras de español andaluz, catalán, latinoamericano antes de prod |
| Coach mode → drift del prompt | Versionado de prompts + A/B test 5% de tráfico antes de promover cambios |
| Listen mode → privacidad del cliente | Disclaimer en cookies del admin + log de quién escuchó qué llamada y cuándo |
| Mesa virtual fallando en hora punta | Rate-limit por mesa + fallback a "ahora viene un camarero" si > X turnos sin resolver |
8. Decisiones a cerrar antes del Sprint 0
- Naming oficial del producto:
Cadences VoicevsPhantom Operatorvs otro. - Modelo del Analyzer: Gemini 2.5 Flash (rápido) vs DeepSeek (barato) vs híbrido por carga.
- Frecuencia del Analyzer durante llamada: cada 5s, 10s, o solo en cambios de turno.
- Política de retención de audio: 30 / 90 / 365 días según tier.
- Quién es el responsable RGPD frente al cliente final: CadencesLab como processor + restaurante como controller, o CadencesLab como controller (más responsabilidad pero más simple para el cliente).
- Modelo de número Twilio: pool nuestro (revenue share) vs BYO (cliente trae el suyo).
- ¿El módulo se vende también a no-restaurantes desde día 1? (clínicas, talleres, peluquerías) o esperamos a validar en restauración antes.
9. Acciones inmediatas (esta semana)
- Reunión 1h con CadencesLab para validar este doc y cerrar puntos del §8
- Decidir piloto: ¿Restaurant23 demo interno o cliente real?
- Comprar / aprovisionar primer número Twilio español
- Crear card en GitHub Project "Phone Assistant — Sprint 0"
- Spike técnico: validar end-to-end Twilio → DO → ElevenLabs Conv AI con
dynamic_variables+ tool calling (lo que ya tenemos vs lo que falta) - Mockear UI del admin de llamadas (Figma o directamente Astro)
10. Referencias cruzadas
- Propuesta producto comercial: PHONE_ASSISTANT.md
- Cadences portfolio: doc/portfolio/01-CADENCES.md
- Workflow Engine: doc/portfolio/13-WORKFLOW-ENGINE.md
- AI Gateway: doc/portfolio/14-AI-GATEWAY.md
- VOID portfolio: doc/portfolio/09-VOID-GAME.md
- VOID Technical Deep Dive: storefronts/void-game/doc/VOID_TECHNICAL_DEEP_DIVE.md
- VOID Architecture V2: storefronts/void-game/doc/VOID_ARCHITECTURE_V2.md
- Restaurant23 specs: RESTAURANT23_SPECS.md
- Twilio webhook: functions/api/webhooks/twilio-call.js
- ElevenLabs DO: src/durable-objects/ElevenLabsMediaStream.js
- Memora retrieval (referencia RAG): storefronts/memora/src/lib/retrieval/
11. TL;DR para CadencesLab
- El producto es vendible ya — la infraestructura está al 90 %, solo falta empaquetarlo como vertical comercial.
- El ingrediente secreto es el patrón dual de IA de VOID aplicado a teléfono (Phantom voz + Analyzer background con memoria persistente). Eso es lo que nos diferencia de Smith.ai/Goodcall.
- El otro ingrediente secreto es el Workflow Engine de Cadences automatizando el post-llamada de forma totalmente customizable por cada restaurante. Tampoco lo tiene la competencia.
- Empezamos por reservas (Sprint 1-2), seguimos por **pedidos online
- catering** (Sprint 4) que es donde está el mayor revenue per call.
- Multi-vertical desde el código día 1 (
phoneAssistant.mode), aunque comercialmente hablemos solo de restauración hasta validar. - Naming propuesto: producto =
Cadences Voice, módulo de Restaurant23 =Recepcionista AI, persona por defecto =Lucía. - Riesgo crítico que no negociamos: tolerancia cero a alucinaciones en alérgenos. Tool obligatoria, política firmada con cliente.