tingwu
All checks were successful
Deploy to Server / deploy (push) Successful in 58s

This commit is contained in:
jeremygan2021
2026-03-11 14:36:06 +08:00
parent 1a30da74cf
commit 860253bf40
2 changed files with 45 additions and 3 deletions

View File

@@ -1,10 +1,11 @@
from django.urls import path, include from django.urls import path, include
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from .views import TranscriptionTaskViewSet from .views import TranscriptionTaskViewSet, tingwu_callback
router = DefaultRouter() router = DefaultRouter()
router.register(r'transcriptions', TranscriptionTaskViewSet) router.register(r'transcriptions', TranscriptionTaskViewSet)
urlpatterns = [ urlpatterns = [
path('callback/', tingwu_callback, name='tingwu-callback'),
path('', include(router.urls)), path('', include(router.urls)),
] ]

View File

@@ -1,9 +1,10 @@
import logging import logging
import uuid import uuid
from rest_framework import viewsets, status 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.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 django.conf import settings
from .models import TranscriptionTask from .models import TranscriptionTask
from .serializers import TranscriptionTaskSerializer from .serializers import TranscriptionTaskSerializer
@@ -11,6 +12,46 @@ from .services import AliyunTingwuService
logger = logging.getLogger(__name__) 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): class TranscriptionTaskViewSet(viewsets.ModelViewSet):
queryset = TranscriptionTask.objects.all() queryset = TranscriptionTask.objects.all()
serializer_class = TranscriptionTaskSerializer serializer_class = TranscriptionTaskSerializer