大模型播客

最近更新时间:2025-11-05 17:35:05

我的收藏
说明:
此接口为 API 2.0 版本,在参数风格、错误码等方面有区别于 API 3.0 版本,请知悉。
本接口服务采用 WebSocket 协议,具备「文本>播客式音频」的跨模态生成能力。可以根据客户输入的文本指令/文件/网页链接生成相关的音频内容,模拟真人语气,表达深入浅出,有效实现高密度信息传递,助力内容创作者高效生产。

在使用该接口前,需要 开通语音合成服务,并进入 API 密钥管理页面 新建密钥,生成 AppID、SecretID 和 SecretKey,用于 API 调用时生成签名,签名将用来进行接口鉴权。

接口要求

集成AI播客语音合成 API 时,需按照以下要求。
内容
说明
输入种类
支持文本、网页、文件类型。详见接口 InputObject 参数描述
音频属性
采样率:24000Hz
采样精度:16bits
声道:单声道(mono)
音频格式
pcm
请求协议
wss 协议
请求地址
wss://tts.cloud.tencent.com/stream_ws_podcast?{请求参数}
接口鉴权
签名鉴权机制,详见 签名生成
响应格式
音频信息通过 binary 类型帧,返回原始二进制数据,可以边接收边播放;
文本信息通过 text 类型帧,返回 JSON 格式数据(如音频脚本、时间戳、服务器事件等)
并发限制
默认单账号限制并发连接数为 1 路

接口调用流程

接口调用流程分为三个阶段:签名握手阶段、合成阶段和结束阶段。三个阶段后台均会返回文本消息 text message(包括时间戳、服务器事件等),内容为 JSON 序列化字符串,以下是格式说明:
字段名
类型
描述
code
Integer
状态码,0代表正常,非0值表示发生错误
message
String
错误说明,发生错误时显示这个错误发生的具体原因,随着业务发展或体验优化,此文本可能会经常变更或更新
session_id
String
客户端生成的会话ID,由客户端在握手阶段生成并赋值在调用参数中
request_id
String
服务端生成的会话ID,由服务端自动生成,并随文本消息返回
message_id
String
本 message 唯一ID
result
Result
语音合成文本时间戳
ready
Integer
READY 事件:该字段返回1时表示服务端已初始化,客户端可以开始发送输入文本的请求
final
Integer
FINAL 事件:该字段返回1时表示播客音频合成结束,客户端收到后需主动关闭 WebSocket 连接
heartbeat
Integer
HEARTBEAT 事件:该字段返回1时表示心跳报文,客户端收到后可忽略
其中合成结果 Result 结构体格式为:
字段名
类型
描述
scripts
Script Array
播客音频的分段脚本信息,Script 结构体格式为:
Text: String 类型,该段的内容。
Speaker:String 类型,该段的说话人,如:主持人1、主持人2。
BeginTime: Integer 类型,该段在整个音频流中的起始时间(单位:ms)。
EndTime: Integer 类型,该段在整个音频流中的结束时间(单位:ms)。
Index: Integer 类型,该段序号,从0开始。
Result 示例:
{
"code": 0,
"message": "success",
"session_id": "71abed34-b587-11f0-bf46-52540037edd7",
"request_id": "d3776b5b-c454-4bab-8aaf-e9f09444c093",
"message_id": "d280b857-f87c-4a6c-a9fe-8f3a00f912bb",
"final": 0,
"ready": 0,
"heartbeat": 0,
"reset": 0,
"result": {
"scripts": [
{
"Text": "原来如此。所以,无论是像Harvey那样专注于某个垂直领域的AI Agent公司,还是像腾讯云这样提供平台和工具的厂商,大家都在用自己的方式,共同推动着这个产业的向前发展。好了,今天关于AI Agent的分享就到这里,感谢大家的收听。",
"BeginTime": 438740,
"EndTime": 460500,
"Index": 26,
"Speaker": "主持人1"
}
]
}
}

握手阶段

请求格式

握手阶段,客户端主动发起 WebSocket 连接请求,请求 URL 格式为:
wss://tts.cloud.tencent.com/stream_ws_podcast?{请求参数}
其中{appid}需替换为腾讯云注册账号的 AppID,可通过 API 密钥管理页面 获取,{请求参数}格式为:
key1=value2&key2=value2...
参数说明:
参数名称
必填
类型
描述
Action
String
调用接口名,取值为:TextToPodcastStreamAudioWS(注意大小写)
AppId
Integer
账号 AppId(请确保该字段数据类型为整型 int)
SecretId
String
腾讯云注册账号的密钥 SecretId,可通过 API 密钥管理页面 获取
Timestamp
Integer
当前 UNIX 时间戳,可记录发起 API 请求的时间。例如1529223702,如果与当前时间相差过大,会引起签名过期错误
Expired
Integer
签名的有效期,是一个符合 UNIX Epoch 时间戳规范的数值,单位为秒;Expired 必须大于 Timestamp 且 Expired-Timestamp 小于90天
SessionId
String
语音合成全局唯一标识,一个 WebSocket 连接对应一个,用户自己生成(推荐使用 uuid),最长128位。
SampleRate
Integer
音频采样率:
24000:24k
Codec
String
返回音频格式:
pcm: 返回二进制 pcm 音频
Signature
String
接口签名参数

一、签名阶段

Signature 签名生成
示例采用如下虚拟的腾讯云账号密钥演示:
AppId=1300466766
SecretId=AKIDPseudoSecretId1234567890abcdefgH
SecretKey=PseudoSecretKey1234567890abcdefG
1. 对除 Signature 之外的所有参数按字典序进行排序,拼接后得到请求参数为
Action=TextToPodcastStreamAudioWS&AppId=1300466766&Codec=pcm&Expired=1761903064&SampleRate=24000&SecretId=AKIDPseudoSecretId1234567890abcdefgH&SessionId=27d0a902-b573-11f0-b377-52540037edd7&Timestamp=1761816664
再拼接请求方法、域名地址,得到签名原文(注意大小写)。签名原文格式为
请求方法(GET) + 域名地址(tts.cloud.tencent.com/stream_ws_podcast) + 请求参数(?Action=TextToPodcastStreamAudioWS&其他参数...)
最终,得到的签名原文为:
GETtts.cloud.tencent.com/stream_ws_podcast?Action=TextToPodcastStreamAudioWS&AppId=1300466766&Codec=pcm&Expired=1761903064&SampleRate=24000&SecretId=AKIDPseudoSecretId1234567890abcdefgH&SessionId=27d0a902-b573-11f0-b377-52540037edd7&Timestamp=1761816664
2. 对签名原文使用 SecretKey 进行 HMAC-SHA1 加密,之后再进行 base64 编码。
对步骤一的签名原文,使用 HMAC-SHA1 算法进行加密并做 base64 编码处理:
Base64Encode(HmacSha1("GETtts.cloud.tencent.com/stream_ws_podcast?Action=TextToPodcastStreamAudioWS&AppId=1300466766&Codec=pcm&Expired=1761903064&SampleRate=24000&SecretId=AKIDPseudoSecretId1234567890abcdefgH&SessionId=27d0a902-b573-11f0-b377-52540037edd7&Timestamp=1761816664", "PseudoSecretKey1234567890abcdefG"))
得到原始签名值为:
3Ivu6TM5GFMNhUhdvMVkMMcdiX4=
将原始签名值进行 urlencode编码(必须进行 URL 编码,否则将导致鉴权失败),得到 Signature 值
3Ivu6TM5GFMNhUhdvMVkMMcdiX4%3D
3. 将 Signature 值后拼接到最后,得到 URL 为:
wss://tts.cloud.tencent.com/stream_ws_podcast?Action=TextToPodcastStreamAudioWS&AppId=1300466766&Codec=pcm&Expired=1761903064&SampleRate=24000&SecretId=AKIDPseudoSecretId1234567890abcdefgH&SessionId=27d0a902-b573-11f0-b377-52540037edd7&Timestamp=1761816664&Signature=3Ivu6TM5GFMNhUhdvMVkMMcdiX4%3D

请求响应

客户端发起连接请求后,后台建立连接并进行签名校验,校验成功则返回 code 值为 0 的确认消息表示握手成功;如果校验失败,后台返回 code 为非 0 值的消息并断开连接。
{"code":0,"message":"success","session_id":"6bb07502-b574-11f0-81a2-52540037edd7","request_id":"696752e3-100f-4b78-ba55-b3fa7953a766","message_id":"296e88d9-fecc-48fc-9c03-6486db728c68","final":0,"ready":0,"heartbeat":0,"reset":0,"result":{"scripts":null}}

二、合成阶段

2.1 接收 READY 事件

握手成功之后,等待服务端发送 READY 事件(ready=1),即可进入合成阶段。客户端根据需要发送输入文本。
{"code":0,"message":"success","session_id":"6bb07502-b574-11f0-81a2-52540037edd7","request_id":"696752e3-100f-4b78-ba55-b3fa7953a766","message_id":"6c413e23-ec0e-415c-980c-32d4e47e2c2d","final":0,"ready":1,"heartbeat":0,"reset":0,"result":{"scripts":null}}

2.2 发送合成指令与合成文本

客户端使用合成指令(ACTION_SYNTHESIS),发送 InputObject(如文本、URL 等)列表到服务端。
输入对象列表:
对象类型支持文本类型、网址类型、文件类型
列表元素不超过 10 个
列表元素需为同一类型,暂不支持混合类型
文本类型,输入列表总字数不超过 1 万字
列表项需逐个发送,间隔最长不超过 10 分钟
InputObject 参数说明:
参数名称
必填
类型
描述
ObjectType
String
输入类型:
TYPE_TEXT:文本类型
TYPE_URL:网址类型
TYPE_FILE:文件类型
注:当类型为文件时,需满足以下条件
文件格式:pdf, .txt, .docx, .md
文件大小:30M
Text
String
文本内容(仅当 ObjectType 设置 TYPE_TEXT 时生效)
Url
String
网址内容(仅当 ObjectType 设置 TYPE_URL、TYPE_FILE 时生效)
TYPE_URL时,为网页地址
TYPE_FILE时,为文件地址
FileFormat
String
文件格式(仅当 ObjectType 设置 TYPE_FILE 时生效)
格式取值:pdf, .txt, .docx, .md
发送示例:
{"session_id": "ef7c0db2-b586-11f0-9e19-52540037edd7", "message_id": "efaa42fe-b586-11f0-9e19-52540037edd7", "action": "ACTION_SYNTHESIS", "data": "{\"ObjectType\": \"TYPE_TEXT\", \"Text\": \"\\u751f\\u6210\\u4e00\\u4e2a\\u5173\\u4e8e AI Agent \\u4ea7\\u4e1a\\u73b0\\u72b6\\u7684\\u64ad\\u5ba2\", \"Url\": \"\", \"FileFormat\": \"\", \"FileData\": \"\"}"}

{"session_id": "ef7c0db2-b586-11f0-9e19-52540037edd7", "message_id": "efaa5064-b586-11f0-9e19-52540037edd7", "action": "ACTION_SYNTHESIS", "data": "{\"ObjectType\": \"TYPE_TEXT\", \"Text\": \"\\u4ecb\\u7ecd\\u817e\\u8baf\\u4e91 ADP \\u7684\\u53d1\\u5c55\", \"Url\": \"\", \"FileFormat\": \"\", \"FileData\": \"\"}"}

2.3 发送结束指令

全部 InputObject 发送完后,发送 结束指令(ACTION_COMPLETE),通知服务器所有输入已发送完成,开始合成播客音频。
{"session_id": "ef7c0db2-b586-11f0-9e19-52540037edd7", "message_id": "efaa58f2-b586-11f0-9e19-52540037edd7", "action": "ACTION_COMPLETE", "data": ""}

2.4 接收合成结果

合成结果:客户端需要同步接收后台返回的二进制音频数据与文本数据。文本数据示例如下:
{"code":0,"message":"success","session_id":"71abed34-b587-11f0-bf46-52540037edd7","request_id":"d3776b5b-c454-4bab-8aaf-e9f09444c093","message_id":"0ada4571-6888-4fa5-83c0-203567ad1fb4","final":0,"ready":0,"heartbeat":0,"reset":0,"result":{"scripts":[{"Text":"最近AI圈子里最火的词儿,除了大模型本身,恐怕就是“AI Agent”了。感觉一夜之间,各行各业都在聊这个。今天我们就来聊聊这个AI Agent到底是什么,它现在的发展到了什么程度。","BeginTime":0,"EndTime":20040,"Index":0,"Speaker":"主持人1"}]}}
返回错误:合成过程中如果出现错误,后台返回 code 为非 0 值的消息并断开连接。
{"code":10001,"message":"参数不合法(Please check your parameter Text)","session_id":"b6b10dc0-101a-11ee-9e72-6c92bf65e6fe","request_id":"a2edbe4f-c12f-48e6-8810-fda7a0992f79","message_id":"da63be2f-d44e-4f3b-a2d7-0b19a3748d23","final":0,"result":{"scripts":null}}
心跳消息:合成过程中,服务端会定时发送 HEARTBEAT 事件(heartbeat=1),用于保持长连接,客户端收到后不用处理。
{"code":0,"message":"success","session_id":"da916680-31f8-11ef-997c-52540037edd7","request_id":"1bc1bab3-170d-4443-8685-238ce6bb6420","message_id":"a985e1d5-a742-4f65-8a11-af1f07574237","final":0,"ready":0,"heartbeat":1,"result":{"scripts":null}}

三、结束阶段

3.1 接收 FINAL 事件

服务器:播客音频合成完成后,最终返回 FINAL 事件(final=1)
客户端:收到合成完成消息后,需主动关闭 WebSocket 连接
合成完成消息示例:
{"code":0,"message":"success","session_id":"dbb8417e-101a-11ee-840e-6c92bf65e6fe","request_id":"99207183-3bda-42de-a1f4-6d8838122ad3","message_id":"d56a3fed-0dd6-4dc6-b434-416ae1b69f0f","final":1,"ready":0,"heartbeat":0,"result":{"scripts":null}}

3.2 关闭 WebSocket 连接

客户端收到 FINAL 事件后,关闭 WebSocket 连接,播客音频合成结束。

四、调用流程示意图




五、指令、事件与格式

5.1 客户端指令

客户端根据场景需要,发送指令到服务端。
指令类型
指令
名称
data
描述
ACTION_SYNTHESIS
发送 InputObject 指令
InputObject(文本、URL等)
客户端收到 READY 事件后,可多次调用该指令发送 InputObject。
两次指令发送间隔不超过 10 分钟
若发送超时,服务端将返回超时报错(错误码 10009,仅作通知,可忽略),并使用已发送文本正常合成播客音频后,通知客户端关闭连接。
ACTION_COMPLETE
发送完成指令
空字符串
客户端发送完所有 InputObject 后,发送该指令通知服务端文本发送完成。
指令格式
{
"session_id": "dbb8417e-101a-11ee-840e-6c92bf65e6fe", // 会话唯一id,客户端建立连接时传入
"message_id": "3b46df26-31f6-11ef-894a-52540037edd7", // 本次消息唯一id
"action": "ACTION_SYNTHESIS", // 指令类型
"data": "" // 指令数据
}

5.2 服务端事件

服务端将音频脚本(如时间戳)、错误消息、服务器事件,通过文本消息方式返回客户端。
事件类型
final, ready, heartbeat 等,详情参见上面返回参数列表(该字段未来可能会扩展更多类型)
事件格式
{
"code": 0, // 错误码
"message": "success", // 错误信息
"session_id": "dbb8417e-101a-11ee-840e-6c92bf65e6fe", // 会话唯一id,客户端建立连接时传入
"request_id": "99207183-3bda-42de-a1f4-6d8838122ad3", // 会话唯一id,服务器生成,随消息返回
"message_id": "d56a3fed-0dd6-4dc6-b434-416ae1b69f0f", // 本次消息唯一id
"final": 1, // 事件类型
"ready": 0,
"heartbeat": 0,
"result": { // 服务器事件,该字段可忽略
"scripts": null
}
}

开发者资源

SDK

错误码

客户端错误

数值
说明
10001
参数不合法,具体详情参考 message 字段
10002
账号当前调用并发超限
10003
鉴权失败
10004
客户端数据上传超时
10005
客户端连接断开
10008
输入通道已关闭
10009
输入文本超时未发送,服务端合成完毕后将正常关闭连接

服务端错误

数值
说明
20000
后台错误
20001
后台服务处理失败
20002
后台引擎合成失败
20003
后台引擎合成超时