diff --git a/backend/ai_services/views.py b/backend/ai_services/views.py index d88c6ed..63b0c70 100644 --- a/backend/ai_services/views.py +++ b/backend/ai_services/views.py @@ -159,13 +159,31 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet): result = service.get_task_info(task.task_id) # 兼容处理响应结构 {"Data": {"TaskStatus": "...", "Result": ...}} + # 有些情况下 SDK 返回的是 JSON 字符串,需要二次解析 + if isinstance(result, str): + import json + try: + result = json.loads(result) + except: + pass + data_obj = result.get('Data', result) if not isinstance(data_obj, dict): + # 如果 Data 不是字典,可能它本身就是字符串,或者 result 结构更平铺 data_obj = result + # 防御性编程:确保 data_obj 是字典 + if not isinstance(data_obj, dict): + logger.error(f"Unexpected response format: {type(data_obj)} - {data_obj}") + return Response({'error': f"Unexpected response format: {type(data_obj)}"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + task_status = data_obj.get('TaskStatus') - if task_status == 'COMPLETE' or task_status == 'COMPLETED': + # 兼容其他状态字段名 + if not task_status: + task_status = data_obj.get('Status') + + if task_status == 'COMPLETE' or task_status == 'COMPLETED' or task_status == 'SUCCEEDED': task.status = TranscriptionTask.Status.SUCCEEDED # 解析结果