new CURLFile($test_file, 'audio/wav', 'test_sample.wav')]); $res = json_decode(curl_exec($ch), true); curl_close($ch); $job_id = $res['job_id'] ?? null; if (!$job_id) die("❌ Upload fehlgeschlagen.\n"); echo "βœ… Job-ID erhalten: $job_id\n\n2. Polling gestartet...\n"; while (true) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, API_URL . '?action=api_status&job_id=' . urlencode($job_id)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $status = json_decode(curl_exec($ch), true); curl_close($ch); $current = $status['status'] ?? 'unknown'; echo "[" . date('H:i:s') . "] Status: $current\n"; if ($current === 'completed') break; if ($current === 'failed') die("❌ Fehler: " . ($status['error_message'] ?? 'Unknown')); sleep(5); } echo "\n3. Hole Ergebnisse...\n"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, API_URL . '?action=api_result&job_id=' . urlencode($job_id)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); echo curl_exec($ch); curl_close($ch); echo "\n4. Hole Embeddings ab...\n"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, API_URL . '?action=api_embeddings&job_id=' . urlencode($job_id)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $zip_data = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($http_code === 200) { file_put_contents(__DIR__ . '/test_embeddings.zip', $zip_data); echo "βœ… Embeddings als test_embeddings.zip gespeichert.\n"; } else { echo "❌ Fehler beim Abruf der Embeddings.\n"; } if (file_exists($test_file)) unlink($test_file);