You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的ask_smapi_sdk上传音乐技能目录报错求助

问题分析与解决方法

明显错误点

  1. API版本不匹配:你调用generate_catalog_upload_url_v1(v1版本)生成上传URL,但完成上传时用的是complete_catalog_upload_v0(v0版本),版本不一致会直接导致服务端无法处理请求。
  2. CompleteUploadRequest未配置分片信息:v1版本的完成上传请求必须包含上传分片的ETag和分片编号,你当前代码没有给请求传入这些关键参数,服务端无法验证上传内容的完整性。
  3. PUT请求缺少正确的Content-Type:使用requests.put上传JSON数据时,未指定Content-Type: application/json,服务端可能无法正确解析你上传的内容。

修正后的代码示例

import json
import requests
from ask_smapi_sdk import StandardSmapiClient
from ask_smapi_model.v1.catalog.create_content_upload_url_request import CreateContentUploadUrlRequest
from ask_smapi_model.v1.catalog.complete_upload_request import CompleteUploadRequest, UploadPart

# 初始化SMAPI客户端(需确保已配置正确的认证信息)
client = StandardSmapiClient(...)

# 1. 生成v1版本的分片上传URL
upload_request = CreateContentUploadUrlRequest()
upload_url_res = client.generate_catalog_upload_url_v1(catalog_id=catalog_id, create_content_upload_url_request=upload_request)

# 2. 上传分片,指定正确的Content-Type
target_part = upload_url_res.presigned_upload_parts[0]
upload_response = requests.put(
    target_part.url,
    data=json.dumps(cat),
    headers={"Content-Type": "application/json"}
)
upload_response.raise_for_status()  # 提前捕获上传失败的情况

# 3. 构建v1版本的完成上传请求,传入分片验证信息
completed_part = UploadPart(
    e_tag=upload_response.headers['ETag'],
    part_number=target_part.part_number
)
complete_upload_req = CompleteUploadRequest(parts=[completed_part])

# 4. 调用v1版本的完成上传接口
final_res = client.complete_catalog_upload_v1(
    catalog_id=catalog_id,
    complete_upload_request=complete_upload_req,
    full_response=True
)

额外排查建议

  • 确认cat变量是符合Alexa音乐目录规范的合法JSON结构,比如必须包含items数组,每个条目需有id、title、artist等必填字段。
  • 检查catalog_id是否正确,确保该目录已在Alexa开发者控制台创建且状态正常。
  • 查看详细错误信息:通过full_response=True返回的响应体(如final_res.body)可以获取服务端返回的具体错误描述,进一步定位问题。

内容的提问来源于stack exchange,提问作者Neal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:05:33