This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import logging
|
||||
import uuid
|
||||
from rest_framework import viewsets, status
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.decorators import action, api_view, permission_classes, parser_classes
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.parsers import MultiPartParser, FormParser
|
||||
from rest_framework.parsers import MultiPartParser, FormParser, JSONParser
|
||||
from rest_framework.permissions import AllowAny
|
||||
from django.conf import settings
|
||||
from .models import TranscriptionTask
|
||||
from .serializers import TranscriptionTaskSerializer
|
||||
@@ -11,6 +12,46 @@ from .services import AliyunTingwuService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@api_view(['POST'])
|
||||
@permission_classes([AllowAny])
|
||||
def tingwu_callback(request):
|
||||
"""
|
||||
处理阿里云听悟的回调消息
|
||||
"""
|
||||
data = request.data
|
||||
logger.info(f"收到听悟回调: {data}")
|
||||
|
||||
# 1. 处理连通性测试消息
|
||||
# 格式: {"Code": "0", "Data": {"Test": "..."}, "Message": "success", "RequestId": "..."}
|
||||
if isinstance(data, dict) and 'Data' in data and 'Test' in data['Data']:
|
||||
logger.info("收到听悟连通性测试请求")
|
||||
return Response({'message': 'success'}, status=status.HTTP_200_OK)
|
||||
|
||||
# 2. 处理任务完成消息 (根据实际文档或后续调试完善)
|
||||
# 通常会包含 TaskId 和 Status
|
||||
# 注意:阿里云听悟回调的结构可能在 Header 或 Body 中不同,需根据实际情况调整
|
||||
# 这里是一个通用的处理逻辑
|
||||
task_id = data.get('TaskId')
|
||||
task_status = data.get('Status')
|
||||
|
||||
if task_id:
|
||||
try:
|
||||
task = TranscriptionTask.objects.filter(task_id=task_id).first()
|
||||
if task:
|
||||
if task_status == 'COMPLETE':
|
||||
logger.info(f"任务 {task_id} 完成,等待下一次查询刷新")
|
||||
# 可以在这里直接调用 get_task_info 刷新数据,但要注意超时
|
||||
elif task_status == 'FAILED':
|
||||
task.status = TranscriptionTask.Status.FAILED
|
||||
task.error_message = data.get('StatusText', 'Callback reported failure')
|
||||
task.save()
|
||||
else:
|
||||
logger.warning(f"回调收到未知任务ID: {task_id}")
|
||||
except Exception as e:
|
||||
logger.error(f"处理回调异常: {e}")
|
||||
|
||||
return Response({'message': 'success'}, status=status.HTTP_200_OK)
|
||||
|
||||
class TranscriptionTaskViewSet(viewsets.ModelViewSet):
|
||||
queryset = TranscriptionTask.objects.all()
|
||||
serializer_class = TranscriptionTaskSerializer
|
||||
|
||||
Reference in New Issue
Block a user