异步语音合成接口通过「提交任务、获取结果」的方式完成长文本合成:提交后立即返回任务 ID,服务端在后台排队合成,客户端可主动查询任务状态或通过回调接收完成通知,并在合成完成后下载完整音频,适用于有声书制作、批量配音、音频素材预生成、超长文稿转语音等长文本场景。本文介绍通过 HTTP 请求访问 Voice Studio 异步语音合成服务的任务流程、接口地址和请求头。
线上地址
https://convai-platform.aliyuncs.com
1. 鉴权与请求头
1.1 必填请求头
Header | 必填 | 说明 |
| 是 |
|
| 是(POST 请求) |
|
1.2 功能开关请求头
Header | 必填 | 取值 | 说明 |
| 否 |
| 开启文本归一化。取值必须精确等于 |
| 否 |
| 仅 SSE 流式合成使用,开启流式响应。不传或传其他值则走同步合成 |
2. 请求体
input object 必选
2.1 核心参数(均位于 input)
参数 | 位置 | 类型 | 必填 | 默认值 | 说明 |
|
| string | 是 | - | 合成文本。同步/SSE ≤ 2000 字符,异步任务 ≤ 100,000 字符 |
|
| string | 是 | - | 音色 ID。系统音色或本账号可见的复刻音色 |
2.2 音频参数(均位于 input)
参数 | 类型 | 必填 | 默认值 | 取值范围 | 说明 |
| string | 否 |
|
| 音频编码格式。异步任务目前仅支持 mp3 / wav |
| int | 否 |
|
| 采样率(Hz) |
| int | 否 |
|
| 音量 |
| float | 否 |
|
| 语速倍率 |
| float | 否 |
|
| 音调倍率 |
| bool | 否 |
| - | 开启 SSML 标记解析 |
| int | 否 |
|
| 随机种子,相同 seed + 相同文本可复现合成结果 |
| bool | 否 |
| - | 字级时间戳(仅 SSE 流式合成生效) |
2.3 功能参数(均位于 input)
参数 | 类型 | 必填 | 默认值 | 取值 / 约束 | 说明 |
| Boolean | 否 |
| - | 开启 SSML 标记解析。 |
| Boolean | 否 |
| - | 字级时间戳(仅 SSE 流式合成返回) |
| Array[String] | 否 | - | 如 | 目标语言提示;当前引擎仅处理数组首元素,建议只传一个值 |
| Integer | 否 | - |
| 随机种子。相同 seed + 相同文本可复现合成结果 |
| String | 否 | - | ≤ 2000 字符 | 指令控制(方言 / 情感 / 角色)。部分模型不支持 |
| Object | 否 | - |
| 文本热修复(自定义发音 / 文本替换)。部分模型不支持 |
| Boolean | 否 |
| - | 合成前过滤 Markdown 标记。部分模型不支持 |
| Boolean | 否 |
| - | 在音频中嵌入 AIGC 隐性标识,配合 |
| String | 否 | - | - | AIGC 标识传播方 |
| String | 否 | - | - | AIGC 标识传播 ID |
3. 异步任务
适用于长文本或批量生产场景。提交任务后立即返回任务 ID,通过轮询或回调获取合成结果。
3.1 提交任务
请求
POST /v1/tts/tasks
Authorization: Bearer <api_key>
Content-Type: application/json请求体
参数 | 位置 | 类型 | 必填 | 默认值 | 说明 |
| 顶层 | string | 是 | - | 合成模型 |
|
| - | 同上 | - | 合成参数(见第 4 节); |
| 顶层 | string | 否 | - | HTTPS 回调地址;任务完成时服务端主动通知(详见 7.4) |
{
"model": "cosyvoice-v2",
"input": {
"text": "(长文本,最大 100,000 字符...)",
"voice": "longxiaochun_v2",
"format": "mp3",
"sample_rate": 22050,
"volume": 50,
"rate": 1.0,
"pitch": 1.0
},
"callback_url": "https://your-server.com/webhooks/tts"
}响应(202 Accepted)
{
"request_id": "req_x",
"task_id": "task_9f2c8a1d-4b3e-4f5a-9c2d-1e6f8a7b3c4d",
"status": "PENDING"
}字段 | 类型 | 说明 |
| string | 全链路请求 ID |
| string | 任务 ID,后续查询 / 取消的凭据 |
| string | 初始固定 |
限制
单用户排队中(
PENDING)任务 ≤ 10,超出返回429 RateLimitExceededinput.text≤ 100,000 字符
3.2 查询任务
请求
GET /v1/tts/tasks/{task_id}
Authorization: Bearer <api_key>仅任务归属用户可查询,否则返回 404(不区分"不存在"与"无权限",防探测)。
路径参数
参数 | 类型 | 说明 |
| string | 提交任务时返回的任务 ID |
响应(200)
进行中(PENDING / RUNNING)
{
"request_id": "req_y",
"task_id": "task_9f2c8a1d-4b3e-4f5a-9c2d-1e6f8a7b3c4d",
"status": "RUNNING",
"created_at": "2026-08-12T10:00:00Z"
}成功(SUCCEEDED)
{
"request_id": "req_y",
"task_id": "task_9f2c8a1d-4b3e-4f5a-9c2d-1e6f8a7b3c4d",
"status": "SUCCEEDED",
"output": {
"audio": {
"url": "https://oss-cn-hangzhou.aliyuncs.com/voice/tts/ws_xxx/task.mp3?Expires=1772698611&...",
"expires_at": 1772698611
}
},
"usage": {
"characters": 98213
},
"created_at": "2026-08-12T10:00:00Z",
"finished_at": "2026-08-12T10:03:12Z"
}失败(FAILED)
{
"request_id": "req_y",
"task_id": "task_9f2c8a1d-4b3e-4f5a-9c2d-1e6f8a7b3c4d",
"status": "FAILED",
"error": {
"code": "EngineUnavailable",
"message": "Engine unavailable: upstream timeout",
"type": "server_error"
},
"created_at": "2026-08-12T10:00:00Z",
"finished_at": "2026-08-12T10:02:30Z"
}响应字段
字段 | 类型 | 出现条件 | 说明 |
| string | 恒有 | 全链路请求 ID |
| string | 恒有 | 任务 ID |
| string | 恒有 |
|
| string | SUCCEEDED | 24h 签名 URL;过期后再次查询将自动重签 |
| int | SUCCEEDED | URL 过期时间 |
| int | SUCCEEDED | 计费字符数 |
| string | FAILED | 失败错误码 |
| string | FAILED | 失败描述 |
| string | FAILED |
|
| string(ISO8601) | 恒有 | 任务创建时间 |
| string(ISO8601) | 终态 | 任务完成时间 |
3.3 取消任务
请求
GET /v1/tts/tasks/cancel/{task_id}
POST /v1/tts/tasks/cancel/{task_id}
Authorization: Bearer <api_key>同时支持 GET 和 POST 方法。仅支持取消 PENDING 状态的任务(尚未开始执行)。
响应
取消成功(200)
{
"request_id": "req_z",
"task_id": "task_9f2c8a1d-4b3e-4f5a-9c2d-1e6f8a7b3c4d",
"status": "CANCELED"
}错误响应
HTTP 状态码 | error.code | 说明 |
401 |
| 凭证无效 / 缺失 |
404 |
| 任务不存在或非本人 |
409 |
| 任务已开始执行或已到达终态,无法取消 |
3.4 终态回调
提交任务时传入 callback_url,任务到达终态(SUCCEEDED / FAILED)时,服务端向该地址发起 GET 通知:
GET {callback_url}?taskId=task_9f2c...&status=SUCCEEDED×tamp=1772698612000&taskType=tts_synthesis&success=true&signature=xxxQuery 参数 | 类型 | 说明 |
| string | 任务 ID |
| string |
|
| int | 回调时间戳(毫秒) |
| string | 固定 |
| bool |
|
| string | 签名: |
回调规则:
回调端返回 2xx 视为成功
其余状态码 / 网络错误触发重试,最多 3 次(延迟 1min / 5min / 30min,指数退避)
callback_url必须为 HTTPS 地址
3.5 完整请求示例
# 提交异步任务
curl -X POST https://convai-platform.aliyuncs.com/v1/tts/tasks \
-H "Authorization: Bearer sk-9f2ac...d41b" \
-H "Content-Type: application/json" \
-H "X-TTS-TN: enable" \
-d '{
"model": "cosyvoice-v2",
"input": {
"text": "这是一段很长的文本...",
"voice": "longxiaochun_v2",
"format": "mp3"
},
"callback_url": "https://your-server.com/webhooks/tts"
}'
# 查询任务状态
curl https://convai-platform.aliyuncs.com/v1/tts/tasks/task_9f2c8a1d-4b3e-4f5a-9c2d-1e6f8a7b3c4d \
-H "Authorization: Bearer sk-9f2ac...d41b"
# 取消任务(仅 PENDING,支持 GET / POST)
curl https://convai-platform.aliyuncs.com/v1/tts/tasks/cancel/task_9f2c8a1d-4b3e-4f5a-9c2d-1e6f8a7b3c4d \
-H "Authorization: Bearer sk-9f2ac...d41b"4. 错误码参考
4.1 错误码总表
error.code | HTTP 状态 | error.type | 说明 |
| 400 | client_error | 参数校验失败(含 voice 不存在、model 与音色不匹配、非法参数值) |
| 401 | client_error | 凭证无效 / 缺失 / 过期 |
| 403 | client_error | 音色 / 模型越权;音色审核未通过 |
| 404 | client_error | 资源不存在或非本人(不区分,防探测) |
| 413 | client_error | 同步/SSE: > 2000 字符;异步任务: > 100,000 字符 |
| 429 | client_error | QPM 限流 / 排队任务数已满 |
| 409 | client_error | 取消非 PENDING 状态任务 |
| 500 | server_error | 服务内部错误 |
| 503 | server_error | 上游合成引擎不可用 / 超时 |