From 860253bf40bd87b18efb1e6eda2efeb876347a0f Mon Sep 17 00:00:00 2001 From: jeremygan2021 Date: Wed, 11 Mar 2026 14:36:06 +0800 Subject: [PATCH] tingwu --- backend/ai_services/urls.py | 3 ++- backend/ai_services/views.py | 45 ++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/backend/ai_services/urls.py b/backend/ai_services/urls.py index ccfe7db..ee9a672 100644 --- a/backend/ai_services/urls.py +++ b/backend/ai_services/urls.py @@ -1,10 +1,11 @@ from django.urls import path, include from rest_framework.routers import DefaultRouter -from .views import TranscriptionTaskViewSet +from .views import TranscriptionTaskViewSet, tingwu_callback router = DefaultRouter() router.register(r'transcriptions', TranscriptionTaskViewSet) urlpatterns = [ + path('callback/', tingwu_callback, name='tingwu-callback'), path('', include(router.urls)), ] diff --git a/backend/ai_services/views.py b/backend/ai_services/views.py index 5e5a2bd..9ac6620 100644 --- a/backend/ai_services/views.py +++ b/backend/ai_services/views.py @@ -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