Tiempo real, sin recargas
Hablar con un asistente es como mantener un hilo. Si cada frase empezara de cero, la conversación perdería su memoria inmediata y su ritmo. Por eso hemos elegido un canal siempre abierto.
Una conversación no es una secuencia de solicitudes
La arquitectura web clásica se basa en solicitudes aisladas: se pide, se recibe, se cuelga. Esto es perfecto para cargar una página, pero inadecuado para un intercambio vivo. Una conversación tiene una continuidad: lo que acabas de decir tiñe la siguiente respuesta, el asistente puede hablar en varias etapas, el audio llega por fragmentos. Tratar cada frase como un formulario independiente habría roto esta naturalidad.
Un canal que permanece abierto
Por lo tanto, hemos construido el intercambio sobre un WebSocket: una conexión única, abierta durante la sesión, en la que los mensajes circulan en ambas direcciones. El cliente envía el audio, el servidor devuelve el texto y la voz, sin restablecer la conexión en cada turno. La autenticación se realiza al abrir, mediante un token transmitido desde el apretón de manos; luego, el túnel se establece y todo pasa por él.
El audio como un flujo
Este canal permite tratar la voz como un flujo en lugar de como un archivo. La respuesta puede empezar a reproducirse mientras aún se está generando, y el servidor sabe adaptarse: si el usuario ha silenciado el sonido, simplemente no envía la síntesis de voz, ahorrando un cálculo innecesario. La misma tubería sirve para todo; esto es lo que hace que el intercambio sea fluido en lugar de entrecortado.
Mantenerse vivo a pesar de la red
Un canal abierto tiene una fragilidad: la red puede cortarlo. Un corte de túnel no hace desaparecer la memoria ni la conversación en curso; al reconectarse, el hilo se reanuda donde se interrumpió. En el móvil, donde se pasa de Wi-Fi a 4G mientras se camina, esta resiliencia no es un detalle: es la condición para que un asistente de voz siga siendo un compañero en todo momento.

