YOffice AI usa LiveKit para sesiones de vídeo, audio y asistente de voz en tiempo real. Puedes ejecutar LiveKit localmente con Docker (recomendado para desarrollo) o conectarte a LiveKit Cloud para una configuración totalmente gestionada.
El conjunto completo de funciones de YOffice — incluyendo el asistente de voz, las videollamadas y la compartición de pantalla — funciona con una instancia local de LiveKit en Docker. LiveKit Cloud es una comodidad opcional, no un requisito.
| Opción | Ideal para | Coste | Tiempo de configuración |
|---|---|---|---|
| Docker local | Desarrollo, producción autoalojada, entornos aislados | Gratuito (tú lo alojas) | ~5 minutos |
| LiveKit Cloud | Equipos que quieren infraestructura gestionada y enrutamiento de medios global sin gestionar sus propios servidores | Pago por uso (nivel gratuito disponible) | ~10 minutos |
Desde command_center_tenant_server, ejecuta: docker compose up -d livekit. Esto usa livekit/livekit-server:latest con la configuración en livekit.yaml. Puertos por defecto: 7880 (WebSocket), 7881 (TCP), más UDP para RTC. Clave por defecto: devkey / devkey-secret-32-chars-minimum!!
En command_center_tenant_server/config/passwords.yaml (sección development), establece: livekitUrl: ws://localhost:7880, livekitKey: devkey, livekitSecret: devkey-secret-32-chars-minimum!! Si el servidor tenant se ejecuta dentro de Docker en el mismo compose, usa ws://livekit:7880.
Ejecuta Postgres, Redis y ambos servidores Auth y Tenant como se describe en la guía de Inicio rápido. La app Flutter recibe la URL de LiveKit automáticamente desde el servidor tenant cuando solicita un token de sala — no es necesario configurar ninguna URL de LiveKit en la propia app Flutter.
El servidor tenant necesita tres valores en :config/passwords.yaml:
| Clave | Descripción | Valor por defecto (local) |
|---|---|---|
livekitUrl | URL de WebSocket que usan los clientes para conectarse a LiveKit | ws://localhost:7880 |
livekitKey | Clave API (debe coincidir con livekit.yaml) | devkey |
livekitSecret | Secreto API (debe coincidir con livekit.yaml) | devkey-secret-32-chars-minimum!! |
Si tanto el servidor tenant como LiveKit se ejecutan dentro de la misma red de Docker Compose, usa ws://livekit:7880 (nombre del servicio) en lugar de ws://localhost:7880. La app Flutter recibe la URL del servidor tenant en el momento de emitir el token, por lo que los clientes fuera de Docker siguen obteniendo la URL pública correcta.
Ve a cloud.livekit.io y regístrate o inicia sesión. LiveKit Cloud ofrece un nivel gratuito generoso, adecuado para desarrollo y cargas de producción pequeñas.
En el panel de LiveKit Cloud, crea un nuevo proyecto. Anota tres valores: URL de WebSocket (p. ej. wss://your-project.livekit.cloud), Clave API y Secreto API (se muestra una vez — cópialo inmediatamente y guárdalo de forma segura).
En config/passwords.yaml (o variables de entorno para producción), establece: livekitUrl, livekitKey y livekitSecret con los valores del paso 2.
Abre Ajustes de la organización → Servidor LiveKit. Activa "Usar LiveKit Cloud", pega la URL de WebSocket, la clave API y el secreto API, y pulsa Guardar. Esto almacena las credenciales en Postgres y es el enfoque recomendado para configuraciones por organización en despliegues multitenant.
Con LiveKit Cloud configurado, no necesitas ejecutar un contenedor de LiveKit local. Inicia los servidores Auth y Tenant y la app Flutter como de costumbre. El servidor tenant emitirá tokens apuntando a LiveKit Cloud.
Los administradores de la organización pueden configurar las credenciales de LiveKit Cloud directamente desde la pantalla de ajustes de YOffice sin modificar los archivos de configuración del servidor. Este es el enfoque recomendado para configuraciones por organización en despliegues multitenant.
Ve a Ajustes → Organización → sección Servidor LiveKit.
Activa "Usar LiveKit Cloud". Aparecerán tres campos de entrada: URL de WebSocket, Clave API y Secreto API.
Introduce la URL de WebSocket (wss://…), la Clave API y el Secreto API de tu proyecto de LiveKit Cloud. Las claves y secretos API se almacenan cifrados — nunca se devuelven en texto plano tras el guardado inicial.
Pulsa Guardar. Todos los miembros de esta organización usarán el proyecto LiveKit configurado para videollamadas y sesiones de voz.
Al ejecutar varias réplicas del servidor tenant detrás de un balanceador de carga, LiveKit Cloud no requiere ninguna configuración especial. Los JWT se firman con credenciales almacenadas en Postgres — todas las réplicas leen desde la misma fuente, por lo que cualquier pod puede emitir un token para cualquier usuario.
El agente de personalización (worker de voz/avatar) se conecta a LiveKit Cloud y llama de vuelta a tu servidor tenant mediante TENANT_BASE_URL. Apunta esto a tu balanceador de carga; cualquier réplica puede gestionar las devoluciones de llamada.
Las sesiones persistentes no son necesarias para la voz. LiveKit Cloud conecta a los clientes directamente con su propio plano de medios tras la emisión del JWT. Consulta la guía de Despliegue multiinstancia para la lista de verificación completa.
| Síntoma | Causa probable | Solución |
|---|---|---|
| La videollamada conecta pero no hay audio | Puertos UDP bloqueados por el cortafuegos | Abre UDP 50000–60000 (local) o comprueba las reglas del cortafuegos de la región de LiveKit Cloud |
| La solicitud de token devuelve 401 | Clave API o secreto no coinciden | Verifica que livekitKey / livekitSecret en passwords.yaml coinciden con el proyecto de LiveKit |
| El asistente de voz se conecta pero nunca habla | El worker no puede acceder al servidor tenant | Establece TENANT_BASE_URL a la URL pública del balanceador de carga, no a una IP de pod |
| La app Flutter no puede acceder a LiveKit (local) | livekitUrl apunta a un nombre de host interno de Docker | Usa un nombre de host accesible desde el dispositivo Flutter (p. ej., la IP LAN de tu máquina) |