This commit is contained in:
@@ -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)),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user