开放平台改词翻唱 v2 API

改词翻唱是把一首原唱音源与一份改写后的歌词组合,生成新的演唱音频。先了解下面的业务步骤,再按后文接口示例接入;也可以把文末的完整任务说明复制给 AI 编码代理。

改词翻唱的业务流程

  1. 选择原唱音源

    从音乐库选歌、上传企业自己的音频,或解析抖音 / 哔哩哔哩 / 快手分享内容。

  2. 按需准备原唱歌词

    手工改词时可跳过。需要 AI 写新歌词时,可从歌词库获取、粘贴或异步提取。

  3. 提供新歌词并提交

    可粘贴新歌词,也可用 AI 根据原唱歌曲名称或原唱歌词及主题同步生成。提交翻唱时新歌词必填。

AI 写词需有原唱歌曲名称或原唱歌词,既可在请求中提供 musicName/correctLyric,也可复用草稿订单已保存的对应资料;两者都不是翻唱音频生成的必填项。真正提交翻唱时必填的是调整后的 modifiedLyricText。AI 生成歌词是同步接口,歌词提取是异步任务。

接入约定

企业 Token 可在开放平台的“开放平台”模块 → “我的团队”菜单中查看和复制。

第一步:选择原唱

方式一:从音乐库选歌

先搜索歌曲,搜索结果的 data.list 每项包含可直接传给解析接口的歌曲对象。page 和 limit 表示请求分页,total 是本页实际返回的候选歌曲数,不是音乐库全量匹配数;继续翻页直到 list 为空。

POST /a/open/karaoke/v2/search
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "keyword": "歌曲名或歌手",
  "page": 1,
  "limit": 20
}
{
  "code": 200,
  "msg": "成功",
  "data": {
    "page": 1,
    "limit": 20,
    "total": 1,
    "list": [{
      "mediaId": "搜索结果歌曲标识",
      "name": "歌曲名",
      "singer": "歌手",
      "albumName": "专辑名",
      "interval": "歌曲时长",
      "lyric": "歌曲歌词",
      "qualitys": ["标准音质"]
    }]
  }
}

song 至少需要包含搜索结果中的 mediaId;建议将 data.list 中的完整歌曲对象原样传入,避免自行重组时丢失候选信息。设置 purpose=audio 获取音源;响应的 data.url 可作为改词翻唱接口的 sourceUrl。企业接口直接使用 url,不返回代理地址。下例只展示识别歌曲所需的最小字段。

POST /a/open/karaoke/v2/resolve
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "song": { "mediaId": "搜索结果歌曲标识", "name": "歌曲名", "singer": "歌手" },
  "purpose": "audio"
}
{
  "code": 200,
  "msg": "成功",
  "data": {
    "url": "https://media.example.com/source.mp3",
    "downloadUrl": "https://media.example.com/source.mp3",
    "quality": "标准音质",
    "candidateName": "歌曲名",
    "candidateSinger": "歌手",
    "correctLyric": "歌曲歌词"
  }
}

方式二:使用本地歌曲

先将本地音频上传到企业自己的 OSS 或对象存储,再把任务期间可访问的 HTTP/HTTPS 地址传给平台。开放平台不接收本地文件路径或 multipart 文件。

方式三:解析短视频

支持抖音、哔哩哔哩和快手分享链接或分享文本。解析成功后,将 extractUrl 传给改词翻唱接口。

POST /a/open/download/v2/extract
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "source": "短视频分享链接或分享文本"
}
{
  "code": 200,
  "msg": "成功",
  "data": {
    "extractUrl": "https://media.example.com/source.mp4",
    "mediaType": "video",
    "title": "视频标题"
  }
}

三种音源最终都通过 create(直接提交)或 importRemoteMedia(先建草稿)传入,字段对应关系如下:

选择方式sourceTypesourceUrl补充字段
本地上传到企业 OSSoss企业 OSS 音源地址musicName 可选歌曲名称
音乐库选歌karaokeresolve 返回的 data.url无需额外字段
短视频解析shortVideoextract 返回的 data.extractUrl建议传 mediaTypeHint: video

第二步:按需准备原唱歌词

这一步可跳过,原唱歌词不是翻唱必填项。AI 写词时,原唱歌曲名称和原唱歌词至少提供一项;只有歌曲名称时,模型须能依据已有知识可靠识别旋律模板,否则返回无法生成。模型不会在此接口中联网搜索乐谱或歌曲。

方式一:从音乐库获取歌词

将音乐库搜索结果对象放入 song 调用歌词接口,至少提供 mediaId,读取 data.correctLyric。

POST /a/open/karaoke/v2/lyric
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "song": { "mediaId": "搜索结果歌曲标识", "name": "歌曲名", "singer": "歌手" }
}
{
  "code": 200,
  "msg": "成功",
  "data": {
    "correctLyric": "原唱第一句歌词\n原唱第二句歌词",
    "candidateName": "歌曲名",
    "candidateSinger": "歌手"
  }
}

方式二:粘贴已有歌词

分步处理时调用 saveDraft 保存;字段 sourceLyricText 可省略,手工新歌词不依赖它。

POST /a/open/coverLyric/v2/saveDraft
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "orderUuid": "平台订单UUID",
  "sourceLyricText": "可选的原唱歌词"
}

方式三:异步提取歌词

先导入音源,再启动提取。该任务需要时间;在“开放平台”模块 → “改词翻唱V2 API”菜单 → “设置”界面配置企业回调地址后,提取完成或失败时平台会发送明文 JSON 通知。未配置回调或未收到通知时,可调用订单详情查询当前状态。

若企业已准备原唱歌词,可在 importRemoteMedia 中传入可选字段 correctLyric;该歌词保存在订单中,供后续 AI 生成新歌词使用,不是翻唱 worker 的必填输入。

POST /a/open/coverLyric/v2/importRemoteMedia
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "sourceType": "oss",
  "sourceUrl": "https://storage.example.com/audio/source.mp3",
  "musicName": "歌曲名称"
}
{
  "code": 200,
  "msg": "原唱素材已导入,请输入新歌词;使用AI写词时再准备原唱歌词",
  "data": {
    "order": {
      "orderUuid": "平台订单UUID",
      "taskStage": "extract",
      "status": "待分配",
      "preparationStatus": "waiting_modified_lyrics",
      "sourceLyricText": "",
      "modifiedLyricText": ""
    }
  }
}

分步导入草稿时,importRemoteMedia 不按 clientRequestId 去重,不要发送空字符串并期待获得幂等保护。若请求超时且没有收到 orderUuid,先在企业订单列表中核对是否已创建订单;确认结果前不要自动重复导入。

POST /a/open/coverLyric/v2/startExtract
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{ "orderUuid": "平台订单UUID" }

提取阶段回调示例:

{
  "orderUuid": "平台订单UUID",
  "musicName": "歌曲名称",
  "taskStage": "extract",
  "status": "提取歌词完成",
  "sourceLyricText": "识别出的原唱歌词",
  "modifiedLyricText": "",
  "outputUrl": "",
  "cost": "0",
  "billingStatus": "PENDING",
  "state": "企业透传值"
}

回调不加密、不签名;平台发送 Content-Type: application/json。企业处理成功请返回 HTTP 2xx。平台可能因回调投递失败再次发送通知,企业应按 orderUuid 和 taskStage 幂等处理。请使用 HTTPS 接收回调;由于回调没有签名,不要仅凭回调内容授权交付或记账,执行相关操作前应使用企业 Token 调用 detail 核验订单。歌词提取失败后没有开放平台重提接口;请通过 detail 查看订单状态。

第三步:输入或生成新歌词

方式一:自己粘贴新歌词

最短路径是直接调用 create,无需先创建草稿。modifiedLyricText 必填;此接口不需要原唱歌词。

POST /a/open/coverLyric/v2/create
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "clientRequestId": "customer-order-0001",
  "sourceType": "oss",
  "sourceUrl": "https://storage.example.com/audio/source.mp3",
  "musicName": "歌曲名称",
  "modifiedLyricText": "改写第一句歌词\n改写第二句歌词",
  "state": "customer-order-0001"
}

sourceType 支持 oss、karaoke、shortVideo。音源地址必须是平台可访问的公网 HTTP/HTTPS URL。歌词最多 8000 字符,改写歌词不能为空。

clientRequestId 为企业侧唯一请求号,最长 128 个字符。同一请求号和相同请求内容可用于识别重复的 create 请求;同一请求号不可用于不同内容。请求超时后先按请求号调用 searchOrder,不要换号重建;每个新的用户提交使用新的请求号。

{
  "code": 200,
  "msg": "已提交改词翻唱",
  "data": {
    "order": {
      "orderUuid": "平台订单UUID",
      "sourceType": "oss",
      "musicName": "歌曲名称",
      "fileName": "source.mp3",
      "taskStage": "cover",
      "status": "待分配",
      "preparationStatus": "cover_queued",
      "sourceLyricText": "",
      "modifiedLyricText": "改写第一句歌词\n改写第二句歌词",
      "outputUrl": "",
      "state": "customer-order-0001",
      "billingStatus": "PENDING"
    }
  }
}

code=200 表示已受理,不代表成品已生成。订单成功后查询或回调中的 outputUrl 获取成品。

翻唱完成回调示例:

{
  "orderUuid": "平台订单UUID",
  "musicName": "歌曲名称",
  "status": "已完成",
  "templateUuid": "模板UUID",
  "taskStage": "cover",
  "sourceLyricText": "原唱歌词;未提供时为空字符串",
  "modifiedLyricText": "提交的改写歌词",
  "outputUrl": "https://media.example.com/result.mp3",
  "cost": "1",
  "billingStatus": "SUCCESS",
  "state": "企业透传值"
}

方式二:让 AI 根据歌曲名称或原唱歌词生成

AI 歌词接口为同步接口:请求返回时即包含生成歌词,不需要任务状态查询或回调。必须提供主题;请求中的 musicName、correctLyric 与草稿订单中已保存的歌曲名称、原唱歌词合计至少提供一项。歌曲名称可覆盖订单中的名称;传入尚未提交翻唱的订单号时,模型生成结果和歌曲名称都会保存到该订单。

POST /a/open/coverLyric/v2/generateLyric
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "clientRequestId": "ai-lyric-customer-order-0001",
  "orderUuid": "已有草稿订单UUID,可选",
  "musicName": "原唱歌曲名称;未填写时使用订单歌曲名称",
  "correctLyric": "原唱第一句歌词\n原唱第二句歌词",
  "theme": "希望表达的主题",
  "targetLanguage": "Mandarin"
}

clientRequestId 是企业侧唯一请求号,最长 128 个字符。AI 生成可能耗时较长,客户端读取超时建议设为至少 300 秒。建议对已有草稿订单传入 orderUuid,这样即使请求超时也能通过 detail 查看已保存的生成结果;重试同一业务请求时应复用原请求号和完全相同的参数,不要并发重发。不同参数不可复用同一请求号,否则返回 720012;同一请求仍在处理时返回 720017。targetLanguage 可选:Mandarin、English、Russian、Japanese、Korean、Spanish,默认中文。AI 写词固定开启深度思考,无需传入开关。成功返回:

{
  "code": 200,
  "msg": "AI歌词已生成",
  "data": {
    "clientRequestId": "ai-lyric-customer-order-0001",
    "orderUuid": "平台订单UUID",
    "sourceLyricText": "原唱第一句歌词\n原唱第二句歌词",
    "modifiedLyricText": "AI生成的改写歌词",
    "musicName": "原唱歌曲名称",
    "theme": "希望表达的主题",
    "targetLanguage": "Mandarin"
  }
}

请求字段使用 correctLyric,响应字段 sourceLyricText 是本次采用的原唱歌词,可能为空。歌曲名称和原唱歌词都可用于推断旋律模板:只有歌曲名称时,模型须能依据已有知识可靠识别旋律,否则返回 720018;只有原唱歌词时,按提供歌词的片段行结构和音节创作;两者都有时,原唱歌词用于校准歌曲版本和片段位置。AI 生成结果完全由模型决定,接口不校验生成歌词的音节,也不因匹配质量重新生成;模型请求或响应故障最多自动重试一次。返回 720018 后重复相同 clientRequestId 不会再次调用模型;修改输入后须使用新的请求号。有 orderUuid 时,成功生成的新歌词和歌曲名称会保存为订单草稿;之后调用 submitCover 时可省略歌词字段。没有订单号时,请保存响应中的 modifiedLyricText,创建或提交订单时传入。AI 接口失败会返回非 200 code 和 msg,没有异步任务需要查询。

端到端示例:点歌台 + AI 写词 + 翻唱

先按第一步搜索歌曲,并分别解析音源和歌词:音源调用 /a/open/karaoke/v2/resolve(purpose=audio)取得 data.url;歌词调用 /a/open/karaoke/v2/lyric 取得 data.correctLyric。将这两个结果用于以下分步流程。

  1. 导入音源和原唱歌词,保存响应中的 orderUuid:
POST /a/open/coverLyric/v2/importRemoteMedia
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "sourceType": "karaoke",
  "sourceUrl": "点歌台 resolve 返回的 data.url",
  "musicName": "歌曲名",
  "correctLyric": "点歌台 lyric 返回的 data.correctLyric"
}
  1. 关联草稿生成中文歌词。成功响应中的 modifiedLyricText 已保存到该订单:
POST /a/open/coverLyric/v2/generateLyric
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{
  "clientRequestId": "ai-lyric-customer-order-0001",
  "orderUuid": "上一步返回的订单UUID",
  "theme": "希望表达的主题",
  "targetLanguage": "Mandarin"
}
  1. AI 歌词确认后提交翻唱;若用户修改了歌词,先用 saveDraft 保存新歌词:
POST /a/open/coverLyric/v2/submitCover
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{ "orderUuid": "上一步返回的订单UUID" }

submitCover 返回 code=200 只代表已受理。保存 orderUuid,通过 detail 轮询或接收回调;直到 preparationStatus=finished 且订单 status=已完成 后,读取 outputUrl。处理中不要重复提交。

POST /a/open/coverLyric/v2/detail
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{ "orderUuid": "上一步返回的订单UUID" }
{
  "code": 200,
  "msg": "成功",
  "data": {
    "order": {
      "orderUuid": "平台订单UUID",
      "status": "已完成",
      "taskStage": "cover",
      "preparationStatus": "finished",
      "outputUrl": "https://media.example.com/result.mp3",
      "billingStatus": "SUCCESS"
    }
  }
}

订单查询和响应字段

查询单笔订单:

POST /a/open/coverLyric/v2/detail
token: YOUR_ENTERPRISE_TOKEN
Content-Type: application/json

{ "orderUuid": "平台订单UUID" }

订单主体位于 data.order。完整响应会包含下列状态和素材字段:

字段含义
orderUuid平台订单号,后续接口使用。
id平台内部订单记录 ID;企业侧优先保存并使用 orderUuid。
sourceType、musicName、fileName、mediaType原唱来源、歌曲名称和音源信息;fileName 是导入后的素材文件名。
uploadUrl、fileExt、fileSize、duration已导入的音源地址及文件属性;无法识别时 duration 为 null。
sourceLyricText、modifiedLyricText、theme原唱歌词、新歌词和主题;原唱歌词可为空。
taskStage、status、preparationStatus当前阶段和处理状态。
outputUrl、failureRemark成功成品地址或失败原因。
mediaReady、sourceLyricReady、modifiedLyricReady、coverReady音源、原唱歌词、新歌词及提交翻唱所需素材是否就绪。原唱歌词可选;lyricsReady 为兼容字段,等同于 modifiedLyricReady。
canEditLyrics、canReplaceMedia、canExtractSourceLyric、canDelete订单当前允许的操作;提取原唱歌词仅在 AI 写词需要时使用。
billingStatus、costMoneycostMoney 是创建订单时锁定的单笔翻唱价格,不代表已扣款;只有 billingStatus=SUCCESS 才表示扣款成功,NOT_CHARGED 表示未扣款。回调字段 cost 是本次实际扣款金额,失败或歌词提取阶段为 0。
state企业提交的透传字段。

准备好音源和新歌词后订单即为 ready_to_submit;缺少新歌词时为 waiting_modified_lyrics。也可按企业请求号查询订单列表:GET /a/open/coverLyric/v2/searchOrder?page=1&limit=20&clientRequestId=customer-order-0001。响应的 data 包含 total 和 list。

分步接口速查

接口用途关键请求字段成功响应
POST /a/open/coverLyric/v2/importRemoteMedia创建草稿并导入原唱音源。sourceType、sourceUrl;可选 musicName、correctLyric(供 AI 写词)、state。data.order.orderUuid、订单状态和歌曲名称。
POST /a/open/coverLyric/v2/startExtract异步提取原唱歌词。orderUuiddata.orderUuid、taskStage、status。
POST /a/open/coverLyric/v2/saveDraft保存歌词或主题。orderUuid;可选 sourceLyricText、modifiedLyricText、theme。data.order。
POST /a/open/coverLyric/v2/generateLyric同步 AI 生成改写歌词。必填 clientRequestId、theme;musicName/correctLyric 与草稿中已有资料合计至少一项;可选 orderUuid、targetLanguage。data.modifiedLyricText、data.musicName。
POST /a/open/coverLyric/v2/submitCover提交分步订单开始翻唱。orderUuid;可选 modifiedLyricText、sourceLyricText、theme。data.order。
POST /a/open/coverLyric/v2/detail查询单笔订单。orderUuiddata.order。

状态和计费

taskStage=extract 表示原唱歌词提取阶段,taskStage=cover 表示翻唱阶段。只有生成有效翻唱成品后计费;歌词搜索、歌词提取、AI 写词以及失败任务不计费。costMoney 是创建订单时确定的单笔翻唱价格快照,失败订单仍可能显示该价格;实际扣款以 billingStatus=SUCCESS 为准。

preparationStatus=cover_queued 或 covering 表示翻唱处理中;finished 且 status=已完成 表示成品生成完成,读取 outputUrl。生成状态与结算状态彼此独立:billingStatus=PENDING 表示尚未确认,SUCCESS 表示扣款成功,NOT_CHARGED 表示未扣款,FAILED 表示结算未成功确认。

若订单已完成且有 outputUrl,但 billingStatus=FAILED,不要重新创建或提交翻唱,也不要仅凭 costMoney 判断实际扣款。保存 orderUuid,通过 detail 核对最新状态,并联系平台处理结算核对;是否向终端用户交付成品按双方业务约定执行。

请求号、超时和重试

接口请求号规则超时后的处理
create必填 clientRequestId;同一请求号仅用于相同请求内容。用同一请求号调用 searchOrder 查找订单;不要换请求号重复建单。
草稿 importRemoteMedia当前草稿导入不按 clientRequestId 去重。若没有收到 orderUuid,先核对企业订单列表;确认是否建单前不要自动重试。
generateLyric必填 clientRequestId;相同业务请求复用请求号和参数。已关联草稿时用 orderUuid 调用 detail 查看已保存结果;720017 表示请求仍在处理。
submitCover使用已有 orderUuid,不依赖请求号防重。用 detail 确认是否已进入队列或完成;不要自动重复提交。

可选字段无值时应省略,不要传空字符串;每个新的用户操作使用新的 clientRequestId。同一逻辑请求重试时才复用原请求号和完全相同的请求内容。

常见错误

复制给 AI 编码代理

将下面代码框中的任务说明完整复制到企业自己的 AI 编码代理。说明包含业务流程、接口地址、关键字段和安全要求,可让代理先检查现有项目,再完成实际接入。

请在当前项目中实际接入“深度音频开放平台改词翻唱 v2”,先检查项目现有的前后端结构、配置管理、文件上传和任务状态展示方式,再按现有技术栈实现,不要只生成方案或独立 Demo。

接入文档:https://www.deepvoicefix.com/docs/open-cover-lyric-v2-ai-integration.html

【连接与鉴权】
- API_BASE=https://www.wechatscan.com/a
- 所有接口使用 JSON;请求头为 Content-Type: application/json 和 token: 企业Token。
- 企业 Token 在深度音频开放平台的“开放平台”模块 / “我的团队”菜单中查看。
- Token 必须保存在本项目服务端环境变量或密钥配置中,所有平台 API 从服务端调用;不要放进浏览器代码、日志或错误提示。
- 平台响应结构为 code、msg、data;只有 code=200 才算请求成功。失败时向用户显示可理解的错误,不要把成功受理误报为成品完成。

【用户业务流程】
1. 选择原唱音源,三选一:音乐库选歌、用户上传到企业自己的 OSS/对象存储、解析抖音/哔哩哔哩/快手分享内容。平台需要可访问的公网 HTTP/HTTPS 音源 URL。
2. 原唱歌词是可选资料。用户手工输入新歌词时可跳过;如果用户选择 AI 生成新歌词,歌曲名称和原唱歌词至少提供一项。原唱歌词可以是所选歌曲的片段;只有歌曲名称时,模型必须能可靠识别旋律模板,否则生成失败。
3. 用户输入或确认新歌词后提交翻唱。提交翻唱时改写后的歌词 modifiedLyricText 必填;原唱歌词 correctLyric 只用于 AI 生成歌词,不是翻唱音频任务的必填参数。

【选歌与歌词接口】
- POST /open/karaoke/v2/search,请求 {"keyword":"歌曲名或歌手","page":1,"limit":20}。候选歌曲在 data.list;保留选中的完整歌曲对象,并将该对象原样传给 resolve 和 lyric,不要自行构造精简对象。
- POST /open/karaoke/v2/resolve,请求 {"song":歌曲对象,"purpose":"audio"}。将响应 data.url 作为后续 sourceUrl。
- POST /open/karaoke/v2/lyric,请求 {"song":歌曲对象}。如有歌词,读取 data.correctLyric。
- POST /open/download/v2/extract,请求 {"source":"短视频分享链接或分享文本"}。将响应 data.extractUrl 作为 sourceUrl,并按视频来源传 mediaTypeHint="video"。
- 用户上传本地音频时,由当前项目上传至企业自己的对象存储,再把可访问的音频 URL 传给平台;不要向平台传本机文件路径或 multipart 文件。

【AI 生成新歌词】
- POST /open/coverLyric/v2/generateLyric 是同步接口:等待响应,直接读取 data.modifiedLyricText;不要为 AI 生成接口实现回调或异步任务轮询。
- 请求必填 clientRequestId(企业侧唯一请求号)、theme;musicName/correctLyric 与草稿订单中已保存的对应资料合计至少一项。传入的 musicName 会覆盖并保存为订单歌曲名称;未传时使用草稿订单中已保存的名称。correctLyric 可为歌曲片段。可选 targetLanguage(Mandarin、English、Russian、Japanese、Korean、Spanish,默认 Mandarin);AI 写词固定开启深度思考。
- 生成成功时直接读取 data.modifiedLyricText;生成完全依赖大模型,API 不校验音节匹配,也不因匹配问题重新生成。有效的 unavailable 结果不重试;模型请求或响应故障最多自动重试一次。当请求带有效 orderUuid 时,歌词和歌曲名称保存到草稿;没有草稿时,使用返回的 modifiedLyricText 创建翻唱订单。

【提交翻唱和查询结果】
- 最短路径:POST /open/coverLyric/v2/create,请求包含 clientRequestId、sourceType、sourceUrl、modifiedLyricText;sourceType 为 oss、karaoke 或 shortVideo。musicName、mediaTypeHint、state 可按来源和项目需要提供。musicName 会保存在订单中,并在查询和回调中返回;响应中的 fileName 表示实际素材文件名。
- 回调地址在深度音频开放平台“开放平台”模块 / “改词翻唱V2 API”菜单 / “设置”界面配置。分步路径:POST /open/coverLyric/v2/importRemoteMedia 创建草稿并导入音源;需要歌词提取时再 POST /open/coverLyric/v2/startExtract,body 为 {"orderUuid":"订单UUID"}。每个草稿只能启动一次歌词提取。提取是异步任务,可接收明文 JSON 回调,也可 POST /open/coverLyric/v2/detail 查询。回调无需加密或签名,企业回调成功返回 HTTP 2xx;平台可能重复投递通知,企业按 orderUuid 和 taskStage 幂等消费。歌词提取失败没有开放平台重提接口,查询订单状态即可。
- 分步订单可用 POST /open/coverLyric/v2/saveDraft 保存歌词;AI 生成结果已保存到草稿时,用 POST /open/coverLyric/v2/submitCover 提交翻唱,body 至少包含 orderUuid。具体字段以本文对应接口示例为准。
- create 或 submitCover 返回 code=200 只代表已受理。通过 POST /open/coverLyric/v2/detail 查询订单,成品生成后读取 data.order.outputUrl。也可按本文说明调用 searchOrder 按 clientRequestId 查订单。
- 回调包含 orderUuid、taskStage、status、outputUrl、cost、billingStatus、state 等字段。taskStage=extract 是歌词提取,taskStage=cover 是翻唱。

【实现要求】
- 在现有产品中提供完整的选择音源、歌词准备、AI 写词/手工改词、提交、状态查看和成品播放或下载流程;避免要求用户填写可由前一步自动获得的字段。
- create 和 generateLyric 使用 clientRequestId;同一逻辑请求重试时复用请求号和原参数。草稿 importRemoteMedia 不按 clientRequestId 去重,超时且未取得 orderUuid 时先核对企业订单列表,不要自动重复导入。submitCover 超时后先通过 detail 查询,不要自动重复提交。
- AI 写词应尽量关联草稿订单,以便通过 detail 获取已保存结果。可选字段无值时省略,不要发送空字符串。
- costMoney 是创建订单时确定的单笔翻唱价格,不等同于已扣款;只有 billingStatus=SUCCESS 表示扣款成功。finished 与 billingStatus=FAILED 可以同时出现;此时不要重提任务,需核对订单和结算。回调里的 cost 是实际扣款金额。
- 回调未签名;使用 HTTPS 接收,按 orderUuid 和 taskStage 幂等处理。交付或记账前使用 detail 核验订单,不要仅凭回调内容做决定。
- duration 无法获取时按 null 处理。不要把 null 显示成 0 秒。
- 为平台请求添加服务端日志时屏蔽 token、音源签名参数和歌词正文。遵循项目现有的鉴权、错误处理和测试约定,并验证主要成功与失败路径。

请先阅读接入文档中对应接口的完整请求/响应示例,再完成实现;如果当前项目结构与某项要求冲突,优先沿用项目现有架构,并说明具体差异。