- Se descapó
- 24 de abril de 2026 a las 22:39 UTC
- Autor
- Kamo
- Compromit
- 3bc4f64
Recurso de instancia CRUD (extensiones / usuarios / dispositivos / buzón de voz): - VoipExtensionController en ************* - VoipUsersController at /api/voip/instances/.id/users - VoipDevicesController en **************** - VoipVoicemailController en **************** - Cada GET acepta ?refresh=true para forzar latch de proveedor y refrescar la caché; de lo contrario sirve desde caché local para la interfaz de usuario. - Cada ruta de escritura llama al proveedor Y alza caché local para que el agregado Las vistas se mantienen consistentes sin esperar a la siguiente sincronización programada. - Voicemail GET /-vmId-/audio transmite el audio crudo del proveedor a través de StreamingResponseBody para que la interfaz de usuario pueda "audio src=..." directamente. Org-aggregate (VoipOrgAggregateController at /api/voip/org): - /extensiones, /usuarios, /dispositivos, /voicemails devuelve filas a través de cada instancia con píldoras de instanceName. La interfaz de usuario las convierte en el agregado pestañas en /settings/caractericidad/phone. - /health runs checkHealth() en cada instancia activa en paralelo por-instancia (a través de los recuentos en caché de InstanceSyncService), devuelve InstanceHealthDto[]. - POST /sync runs InstanceSyncService contra cada instancia activa de la actual org. Aporta el botón de nivel de inquilino "Sync this org now" en la interfaz de usuario. Sincronización interna (VoipInternalSyncController): - POST /internal/voip/sync-global bucles todas instancias activas plataforma en toda la plataforma. Llamado por el trabajo programado de Quartz de DaemonService. Protegido por la InternaAuthFilter en VOIPService. Construye verde.