- Verschifft
- 24. April 2026 um 22:39 UTC
- Autor
- Kamo
- Ausschuss
- 3bc4f64
Per-Instanz-Ressource CRUD (Erweiterungen / Benutzer / Geräte / Voicemail): - VoipExtensionsController bei ************ - VoipUsersController bei /api/voip/instances/ - VoipDevicesController bei **************** - VoipVoicemailController bei ************ - Jedes GET akzeptiert ?refresh=true, um vom Anbieter Kraft zu holen und den Cache aufzufrischen; anderweitig aus dem lokalen Cache für bissige Benutzeroberfläche. - Jeder Schreibpfad ruft Anbieter UND upserts lokalen Cache, so dass die aggregierte Die Ansichten bleiben konsistent, ohne auf den nächsten geplanten Synchronisation zu warten. - Voicemail GET /{vmId'/audio streamt das Roh-Audio vom Provider über StreamingResponseBody, so dass die Benutzeroberfläche <audio src=...] direkt. Org-Aggregat (VoipOrgAggregateController bei /api/voip/org): - /extensions, /users, /devices, /voicemails Rückgabereihen in jeder Instanz mit {instanceId, instanceName] Pillen. UI macht diese in die aggregierte tabs in /settings/features/phone. - /health läuft checkHealth() auf jeder aktiven Instanz parallel pro Instanz (via InstanceSyncService's cached counts), liefert InstanceHealthDto[]. - POST /sync läuft InstanceSyncService gegen jede aktive Instanz der aktuelle Org. Macht die Pächter-Level-Taste "Sync this org now"-Taste in der Benutzeroberfläche. Interne Synchronisation (VoipInternalSyncController): - POST /internal/voip/sync-global loops alle aktiven Instanzen plattformweit. Genannt von DaemonServices geplantem Quarz-Job. Geschützt durch die bestehenden InternalAuthFilter in VOIPService. Baut grün.