- Shipped
- October 5, 2026 at 3:48 AM UTC
- Author
- Kamo
- Commit
- 58eae9a
The recording and voicemail audio endpoints are declared ResponseEntity<?>, because they also answer JSON, and returned a StreamingResponseBody lambda. Spring picks its StreamingResponseBody handler from the declared type, so the lambda went to the message converters, none of which writes one: every play answered 500 **************** No converter for RecordingAudioStreamer$$Lambda with preset Content-Type audio/...). It hid behind the MinIO 503 until VOIPService could reach MinIO (SP98 Task 15's ship on the KamoCRM FreePBX). The bytes now go out as an InputStreamResource, which the resource converter writes as is for any content type, with the Content-Length and Content-Range already set (Spring applies no range handling to an InputStreamResource), and whose close releases the MinIO response. The same for another provider's voicemail (JustCall, RingCentral) in Settings. VoicemailAudioOverHttpTest plays through the dispatcher, which the direct-call tests could not.
