diff --git a/apps/web/src/pages/ai-avatar/components/PanelVoiceSelector.tsx b/apps/web/src/pages/ai-avatar/components/PanelVoiceSelector.tsx index ce7dffdfd..c0b975d82 100644 --- a/apps/web/src/pages/ai-avatar/components/PanelVoiceSelector.tsx +++ b/apps/web/src/pages/ai-avatar/components/PanelVoiceSelector.tsx @@ -134,6 +134,14 @@ export function PanelVoiceSelector({ return } const targetId = voice.voice_clone_profile_id || voice.id + // DEBUG: 打印请求参数,帮助定位 /tts/preview 失败原因 + console.log("[AI数字人-克隆试听] previewTts 请求:", { + voice_id: targetId, + voice_name: voice.name, + voice_type: voice.type, + voice_clone_profile_id: voice.voice_clone_profile_id, + voice_id_field: voice.voice_id, + }) setPreviewingId(voice.id) try { const res = await previewTts({ @@ -141,6 +149,10 @@ export function PanelVoiceSelector({ voice_id: targetId, speed: 1.0, }) + console.log("[AI数字人-克隆试听] previewTts 响应:", { + audio_url: res.audio_url?.substring(0, 80), + duration: res.duration, + }) if (!res.audio_url) { setPreviewingId(null) message.error("合成试听失败:未返回音频") @@ -148,8 +160,14 @@ export function PanelVoiceSelector({ } previewCacheRef.current.set(targetId, res.audio_url) playAudioUrl(voice.id, res.audio_url) - } catch { + } catch (err) { setPreviewingId(null) + // DEBUG: 打印详细错误信息 + console.error("[AI数字人-克隆试听] previewTts 失败:", { + status: (err as { response?: { status?: number } })?.response?.status, + data: (err as { response?: { data?: unknown } })?.response?.data, + message: err instanceof Error ? err.message : String(err), + }) // apiClient 拦截器已统一 toast } return