[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-\u002Fes\u002Fblog\u002Fvoix-temps-reel-vs-batch":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"author":10,"date":11,"tags":12,"body":16,"_type":521,"_id":522,"_source":523,"_file":524,"_stem":525,"_extension":526},"\u002Fes\u002Fblog\u002Fvoix-temps-reel-vs-batch","blog",false,"","Agente de IA telefónico: voz en tiempo real o batch","Por qué un asistente de voz exige una arquitectura muy distinta a la de un chatbot de texto, y qué implica para la latencia, el barge-in y el modelo.","Équipe betool","2026-04-28",[13,14,15],"voice","architecture","latency",{"type":17,"children":18,"toc":512},"root",[19,40,45,52,71,84,89,95,105,124,129,200,205,210,244,250,262,274,285,308,313,319,324,329,382,388,393,441,446,452,457,500],{"type":20,"tag":21,"props":22,"children":23},"element","p",{},[24,27,33,35],{"type":25,"value":26},"text","Cuando un proveedor te presenta un ",{"type":20,"tag":28,"props":29,"children":30},"em",{},[31],{"type":25,"value":32},"«agente de IA telefónico»",{"type":25,"value":34},", hazle una pregunta: ",{"type":20,"tag":28,"props":36,"children":37},{},[38],{"type":25,"value":39},"«¿Cuál es tu latencia de extremo a extremo entre el final del habla del usuario y el inicio de la respuesta?»",{"type":20,"tag":21,"props":41,"children":42},{},[43],{"type":25,"value":44},"Si la respuesta supera los 1,5 segundos, no es un agente telefónico. Es un chatbot con un módulo de ASR \u002F TTS pegado al frente.",{"type":20,"tag":46,"props":47,"children":49},"h2",{"id":48},"la-regla-de-los-800-ms",[50],{"type":25,"value":51},"La regla de los 800 ms",{"type":20,"tag":21,"props":53,"children":54},{},[55,57,62,64,69],{"type":25,"value":56},"Una persona al teléfono tolera el silencio tras su pregunta. Pero ese silencio tiene un umbral: más allá de 800 ms, el otro extremo se siente ",{"type":20,"tag":28,"props":58,"children":59},{},[60],{"type":25,"value":61},"«congelado»",{"type":25,"value":63},". A 1500 ms, quien llama dice ",{"type":20,"tag":28,"props":65,"children":66},{},[67],{"type":25,"value":68},"«¿oiga?»",{"type":25,"value":70},". A 3000 ms, cuelga suponiendo un problema de línea.",{"type":20,"tag":21,"props":72,"children":73},{},[74,76,82],{"type":25,"value":75},"El objetivo para un agente de voz serio es por tanto: ",{"type":20,"tag":77,"props":78,"children":79},"strong",{},[80],{"type":25,"value":81},"por debajo de 800 ms",{"type":25,"value":83}," entre el final del habla y el primer byte audible de la respuesta.",{"type":20,"tag":21,"props":85,"children":86},{},[87],{"type":25,"value":88},"Desglosémoslo.",{"type":20,"tag":46,"props":90,"children":92},{"id":91},"el-presupuesto-de-tiempo-en-detalle",[93],{"type":25,"value":94},"El presupuesto de tiempo en detalle",{"type":20,"tag":96,"props":97,"children":99},"pre",{"code":98},"[user speech]──▶[ASR streaming]──▶[LLM]──▶[TTS streaming]──▶[audio out]\n      ~150ms          ~80ms        ~?       ~250ms             ~50ms\n",[100],{"type":20,"tag":101,"props":102,"children":103},"code",{"__ignoreMap":7},[104],{"type":25,"value":98},{"type":20,"tag":21,"props":106,"children":107},{},[108,110,115,117,122],{"type":25,"value":109},"De los ~800 ms disponibles, ",{"type":20,"tag":77,"props":111,"children":112},{},[113],{"type":25,"value":114},"aproximadamente 270 ms los consumen ASR + TTS + transporte",{"type":25,"value":116},". Eso deja ",{"type":20,"tag":77,"props":118,"children":119},{},[120],{"type":25,"value":121},"530 ms para el LLM",{"type":25,"value":123}," — incluyendo el tiempo de prefill, el razonamiento y la generación del primer token.",{"type":20,"tag":21,"props":125,"children":126},{},[127],{"type":25,"value":128},"Implicaciones:",{"type":20,"tag":130,"props":131,"children":132},"ul",{},[133,151,167,183],{"type":20,"tag":134,"props":135,"children":136},"li",{},[137,142,144,149],{"type":20,"tag":77,"props":138,"children":139},{},[140],{"type":25,"value":141},"Un gran modelo de razonamiento, sin streaming",{"type":25,"value":143},": varios segundos antes de la primera palabra audible. ",{"type":20,"tag":77,"props":145,"children":146},{},[147],{"type":25,"value":148},"Descartado",{"type":25,"value":150},".",{"type":20,"tag":134,"props":152,"children":153},{},[154,159,161,166],{"type":20,"tag":77,"props":155,"children":156},{},[157],{"type":25,"value":158},"Un modelo de gama alta en streaming",{"type":25,"value":160},": primer token rápido en los días buenos, mucho menos en los malos. ",{"type":20,"tag":77,"props":162,"children":163},{},[164],{"type":25,"value":165},"Aceptable pero justo",{"type":25,"value":150},{"type":20,"tag":134,"props":168,"children":169},{},[170,175,177,182],{"type":20,"tag":77,"props":171,"children":172},{},[173],{"type":25,"value":174},"Un modelo rápido en streaming",{"type":25,"value":176}," (gamas «ligeras» de Claude, GPT y Gemini): ",{"type":20,"tag":77,"props":178,"children":179},{},[180],{"type":25,"value":181},"Cómodo",{"type":25,"value":150},{"type":20,"tag":134,"props":184,"children":185},{},[186,191,193,198],{"type":20,"tag":77,"props":187,"children":188},{},[189],{"type":25,"value":190},"Un modelo open-weight pequeño servido en tu GPU (vLLM)",{"type":25,"value":192},": ",{"type":20,"tag":77,"props":194,"children":195},{},[196],{"type":25,"value":197},"Excelente",{"type":25,"value":199}," (y privado).",{"type":20,"tag":21,"props":201,"children":202},{},[203],{"type":25,"value":204},"Mide el TTFT con tu propio tráfico: varía según el proveedor, la región y la hora.",{"type":20,"tag":21,"props":206,"children":207},{},[208],{"type":25,"value":209},"Una arquitectura de voz seria requiere por tanto:",{"type":20,"tag":211,"props":212,"children":213},"ol",{},[214,224,234],{"type":20,"tag":134,"props":215,"children":216},{},[217,222],{"type":20,"tag":77,"props":218,"children":219},{},[220],{"type":25,"value":221},"Todo es streaming",{"type":25,"value":223}," — ASR, LLM, TTS. Ni un solo eslabón en modo batch.",{"type":20,"tag":134,"props":225,"children":226},{},[227,232],{"type":20,"tag":77,"props":228,"children":229},{},[230],{"type":25,"value":231},"El modelo de LLM se selecciona por TTFT",{"type":25,"value":233}," (time to first token), no por su puntuación en MMLU.",{"type":20,"tag":134,"props":235,"children":236},{},[237,242],{"type":20,"tag":77,"props":238,"children":239},{},[240],{"type":25,"value":241},"El TTS empieza a hablar con el primer token recibido",{"type":25,"value":243},", no tras completarse la respuesta entera.",{"type":20,"tag":46,"props":245,"children":247},{"id":246},"barge-in",[248],{"type":25,"value":249},"Barge-in",{"type":20,"tag":21,"props":251,"children":252},{},[253,255,260],{"type":25,"value":254},"En un canal de texto, el usuario espera a que el bot termine. Por teléfono, ",{"type":20,"tag":77,"props":256,"children":257},{},[258],{"type":25,"value":259},"interrumpe",{"type":25,"value":261},". Tres de cada cinco veces, en conversaciones naturales.",{"type":20,"tag":21,"props":263,"children":264},{},[265,267,272],{"type":25,"value":266},"Un agente de voz que no sabe gestionar que lo corten se siente ",{"type":20,"tag":28,"props":268,"children":269},{},[270],{"type":25,"value":271},"«robótico»",{"type":25,"value":273}," — sigue hablando mientras el usuario intenta interrumpir. Es intolerable, y delata de inmediato un bot mal construido.",{"type":20,"tag":21,"props":275,"children":276},{},[277,279,283],{"type":25,"value":278},"El ",{"type":20,"tag":77,"props":280,"children":281},{},[282],{"type":25,"value":246},{"type":25,"value":284}," técnico requiere:",{"type":20,"tag":130,"props":286,"children":287},{},[288,293,298,303],{"type":20,"tag":134,"props":289,"children":290},{},[291],{"type":25,"value":292},"El TTS se detiene de inmediato cuando el ASR detecta señal vocal saliente del usuario.",{"type":20,"tag":134,"props":294,"children":295},{},[296],{"type":25,"value":297},"El LLM descarta la respuesta en curso (sin protestar).",{"type":20,"tag":134,"props":299,"children":300},{},[301],{"type":25,"value":302},"El buffer de audio saliente se vacía al instante (de lo contrario se oye una media sílaba residual).",{"type":20,"tag":134,"props":304,"children":305},{},[306],{"type":25,"value":307},"El historial de conversación anota que la respuesta no se oyó por completo — para evitar repetirla sin querer.",{"type":20,"tag":21,"props":309,"children":310},{},[311],{"type":25,"value":312},"Es un detalle técnico que lo cambia todo en cómo se siente la interacción.",{"type":20,"tag":46,"props":314,"children":316},{"id":315},"gestionar-la-incertidumbre",[317],{"type":25,"value":318},"Gestionar la incertidumbre",{"type":20,"tag":21,"props":320,"children":321},{},[322],{"type":25,"value":323},"Por teléfono, el ASR se equivoca con regularidad. Donde un chatbot de texto siempre recibe el texto exacto tecleado por el usuario, el agente de voz recibe una transcripción a menudo imperfecta.",{"type":20,"tag":21,"props":325,"children":326},{},[327],{"type":25,"value":328},"Estrategias que funcionan:",{"type":20,"tag":130,"props":330,"children":331},{},[332,342,366],{"type":20,"tag":134,"props":333,"children":334},{},[335,340],{"type":20,"tag":77,"props":336,"children":337},{},[338],{"type":25,"value":339},"Pedir confirmación",{"type":25,"value":341}," en los elementos de alta consecuencia (número de expediente, importe, apellido inusual). No de forma sistemática — eso se vuelve insoportable.",{"type":20,"tag":134,"props":343,"children":344},{},[345,350,352,357,359,364],{"type":20,"tag":77,"props":346,"children":347},{},[348],{"type":25,"value":349},"No confiar a ciegas en el LLM",{"type":25,"value":351}," cuando el ASR es ambiguo. Si la frase recibida es ",{"type":20,"tag":28,"props":353,"children":354},{},[355],{"type":25,"value":356},"«quiero cancelar mi contrato»",{"type":25,"value":358}," con una puntuación de confianza baja, es mejor preguntar ",{"type":20,"tag":28,"props":360,"children":361},{},[362],{"type":25,"value":363},"«¿Quiso decir cancelar su contrato?»",{"type":25,"value":365}," que activar el procedimiento de cancelación.",{"type":20,"tag":134,"props":367,"children":368},{},[369,374,376,381],{"type":20,"tag":77,"props":370,"children":371},{},[372],{"type":25,"value":373},"Cortar las divagaciones",{"type":25,"value":375}," — un agente que se desvía del guion debe ser reconducido por un nodo de condición \u002F operador, no por un prompt que ",{"type":20,"tag":28,"props":377,"children":378},{},[379],{"type":25,"value":380},"«debería bastar»",{"type":25,"value":150},{"type":20,"tag":46,"props":383,"children":385},{"id":384},"el-teléfono-también-es-una-pila-tecnológica",[386],{"type":25,"value":387},"El teléfono también es una pila tecnológica",{"type":20,"tag":21,"props":389,"children":390},{},[391],{"type":25,"value":392},"Más allá de la IA, un agente telefónico requiere:",{"type":20,"tag":130,"props":394,"children":395},{},[396,408,419,430],{"type":20,"tag":134,"props":397,"children":398},{},[399,401,406],{"type":25,"value":400},"Un ",{"type":20,"tag":77,"props":402,"children":403},{},[404],{"type":25,"value":405},"SIP trunk",{"type":25,"value":407}," de un operador (Twilio, Voxbone, OVH, Sewan…).",{"type":20,"tag":134,"props":409,"children":410},{},[411,412,417],{"type":25,"value":400},{"type":20,"tag":77,"props":413,"children":414},{},[415],{"type":25,"value":416},"media gateway",{"type":25,"value":418}," (LiveKit-SIP, FreeSWITCH, Asterisk) que hable SIP del lado del operador y WebRTC del lado de la plataforma.",{"type":20,"tag":134,"props":420,"children":421},{},[422,423,428],{"type":25,"value":400},{"type":20,"tag":77,"props":424,"children":425},{},[426],{"type":25,"value":427},"transcriptor",{"type":25,"value":429}," robusto frente al ruido, los acentos y las voces superpuestas.",{"type":20,"tag":134,"props":431,"children":432},{},[433,434,439],{"type":25,"value":400},{"type":20,"tag":77,"props":435,"children":436},{},[437],{"type":25,"value":438},"sintetizador",{"type":25,"value":440}," que pronuncie correctamente nombres propios, números y fechas.",{"type":20,"tag":21,"props":442,"children":443},{},[444],{"type":25,"value":445},"Ninguno de estos elementos es trivial. Todos interactúan entre sí.",{"type":20,"tag":46,"props":447,"children":449},{"id":448},"lo-que-betool-gestiona",[450],{"type":25,"value":451},"Lo que betool gestiona",{"type":20,"tag":21,"props":453,"children":454},{},[455],{"type":25,"value":456},"La arquitectura de voz de betool — LiveKit + LiveKit-SIP + worker dedicado + LLM en streaming hacia la síntesis de voz — cubre los requisitos anteriores de fábrica. Tú mantienes el control de:",{"type":20,"tag":130,"props":458,"children":459},{},[460,470,489],{"type":20,"tag":134,"props":461,"children":462},{},[463,464,468],{"type":25,"value":278},{"type":20,"tag":77,"props":465,"children":466},{},[467],{"type":25,"value":405},{"type":25,"value":469}," (tu operador, tus números).",{"type":20,"tag":134,"props":471,"children":472},{},[473,475,480,482,487],{"type":25,"value":474},"Los ",{"type":20,"tag":77,"props":476,"children":477},{},[478],{"type":25,"value":479},"modelos",{"type":25,"value":481}," (modelos gestionados, BYOK o modelos privados) y las ",{"type":20,"tag":77,"props":483,"children":484},{},[485],{"type":25,"value":486},"voces",{"type":25,"value":488}," (transcripción Deepgram o faster-whisper; síntesis ElevenLabs, Cartesia, OpenAI o Deepgram Aura).",{"type":20,"tag":134,"props":490,"children":491},{},[492,493,498],{"type":25,"value":474},{"type":20,"tag":77,"props":494,"children":495},{},[496],{"type":25,"value":497},"parámetros",{"type":25,"value":499}," (sensibilidad del barge-in, detección de fin de turno, frases de espera, transferencia a un humano).",{"type":20,"tag":21,"props":501,"children":502},{},[503,505,510],{"type":25,"value":504},"Tú no configuras la fontanería en tiempo real — ese es el trabajo de la plataforma. Tú diseñas la ",{"type":20,"tag":77,"props":506,"children":507},{},[508],{"type":25,"value":509},"conversación",{"type":25,"value":511},", que es el verdadero reto de negocio.",{"title":7,"searchDepth":513,"depth":513,"links":514},2,[515,516,517,518,519,520],{"id":48,"depth":513,"text":51},{"id":91,"depth":513,"text":94},{"id":246,"depth":513,"text":249},{"id":315,"depth":513,"text":318},{"id":384,"depth":513,"text":387},{"id":448,"depth":513,"text":451},"markdown","content:es:blog:2.voix-temps-reel-vs-batch.md","content","es\u002Fblog\u002F2.voix-temps-reel-vs-batch.md","es\u002Fblog\u002F2.voix-temps-reel-vs-batch","md"]