recording_path) { abort(404, 'Belum ada rekaman untuk sesi ini'); } $path = $call->recording_path; // Amankan: hanya basename, cari di kandidat folder (relatif project + /opt). $candidates = [ $path, storage_path('app/intercom/' . basename($path)), '/opt/intercom-relay/storage/' . basename($path), ]; $real = null; foreach ($candidates as $c) { if ($c && is_file($c)) { $real = $c; break; } } if (!$real) { abort(404, 'File rekaman tidak ditemukan di server: ' . basename($path)); } // File dari Go relay berupa raw PCM 16kHz mono 16-bit. // Disajikan sebagai octet-stream biar bisa di-download / ffplay. // Nanti kalau relay sudah tulis header WAV, ganti ke audio/wav. return response()->file($real, [ 'Content-Type' => 'application/octet-stream', 'Content-Disposition' => 'attachment; filename="' . basename($real) . '"', ]); } }