tingwu_new
All checks were successful
Deploy to Server / deploy (push) Successful in 17s

This commit is contained in:
jeremygan2021
2026-03-11 15:07:33 +08:00
parent ea1a5e8c59
commit 290b345404
2 changed files with 36 additions and 23 deletions

View File

@@ -89,32 +89,34 @@ class AliyunTingwuService:
# 根据官方文档,离线任务的 type 通常就是 'offline' # 根据官方文档,离线任务的 type 通常就是 'offline'
request.add_query_param('type', 'offline') request.add_query_param('type', 'offline')
# AppKey # 构造请求体 (Body)
request.add_query_param('AppKey', self.tingwu_app_key) # 根据听悟 API 文档AppKey, Input, Parameters 应位于 JSON Body 中
# 而不是 Query Parameter
# 配置 Input body = {
input_param = { "AppKey": self.tingwu_app_key,
"Input": {
"FileUrl": file_url, "FileUrl": file_url,
"SourceLanguage": language, "SourceLanguage": language,
"TaskKey": str(uuid.uuid4()) "TaskKey": str(uuid.uuid4())
} },
request.add_query_param('Input', json.dumps(input_param)) "Parameters": {
# 配置 Parameters (开启自动章节和摘要)
parameters = {
"Transcoding": { "Transcoding": {
"TargetAudioFormat": "mp3" "TargetAudioFormat": "mp3"
}, },
"AutoChaptersEnabled": True, "AutoChaptersEnabled": True,
"SummarizationEnabled": True "SummarizationEnabled": True
} }
request.add_query_param('Parameters', json.dumps(parameters)) }
# 设置 Body 内容
request.set_content(json.dumps(body))
request.add_header('Content-Type', 'application/json')
# 强制设置 Endpoint避免 SDK.EndpointResolvingError # 强制设置 Endpoint避免 SDK.EndpointResolvingError
# 听悟目前主要服务点在北京 # 听悟目前主要服务点在北京
request.set_endpoint("tingwu.cn-beijing.aliyuncs.com") request.set_endpoint("tingwu.cn-beijing.aliyuncs.com")
# 显式设置 Method 为 POST因为 SDK 默认可能是 PUT (针对 CreateTask) # 显式设置 Method 为 PUT
request.set_method('PUT') request.set_method('PUT')
try: try:

View File

@@ -102,6 +102,11 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
# 3. 调用听悟接口创建任务 # 3. 调用听悟接口创建任务
try: try:
tingwu_response = service.create_transcription_task(oss_url) tingwu_response = service.create_transcription_task(oss_url)
# 兼容处理响应结构,通常为 {"Data": {"TaskId": "...", ...}}
if 'Data' in tingwu_response and isinstance(tingwu_response['Data'], dict):
task_id = tingwu_response['Data'].get('TaskId')
else:
task_id = tingwu_response.get('TaskId') task_id = tingwu_response.get('TaskId')
if task_id: if task_id:
@@ -152,13 +157,19 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
service = AliyunTingwuService() service = AliyunTingwuService()
try: try:
result = service.get_task_info(task.task_id) result = service.get_task_info(task.task_id)
task_status = result.get('TaskStatus')
# 兼容处理响应结构 {"Data": {"TaskStatus": "...", "Result": ...}}
data_obj = result.get('Data', result)
if not isinstance(data_obj, dict):
data_obj = result
task_status = data_obj.get('TaskStatus')
if task_status == 'COMPLETE': if task_status == 'COMPLETE':
task.status = TranscriptionTask.Status.SUCCEEDED task.status = TranscriptionTask.Status.SUCCEEDED
# 解析结果 # 解析结果
task_result = result.get('Result', {}) task_result = data_obj.get('Result', {})
# 提取逐字稿 # 提取逐字稿
sentences = task_result.get('Transcription', {}).get('Sentences', []) sentences = task_result.get('Transcription', {}).get('Sentences', [])
@@ -190,7 +201,7 @@ class TranscriptionTaskViewSet(viewsets.ModelViewSet):
elif task_status == 'FAILED': elif task_status == 'FAILED':
task.status = TranscriptionTask.Status.FAILED task.status = TranscriptionTask.Status.FAILED
task.error_message = result.get('TaskStatusText', 'Unknown error') task.error_message = data_obj.get('TaskStatusText', result.get('Message', 'Unknown error'))
task.save() task.save()
# 其他状态 (PENDING, RUNNING) 不做更改 # 其他状态 (PENDING, RUNNING) 不做更改