You need to enable JavaScript to run this app.
文档中心
复制全文
下载 pdf
接入必读
语音播客
复制全文
下载 pdf
语音播客
阅读本文前,请确保已在控制台开通语音播客服务。​
功能简介​
豆包语音播客大模型支持根据文本、网页或话题生成播客,也支持将已有对话文本合成为音频。本文介绍 HTTP SSE 接口的接入方式:客户端发送一次请求后,通过 SSE 持续接收文本、音频分片及生成状态。​
生成方式​
通过请求参数 action 指定生成方式。​
​
生成方式​
参数​
输入要求​
基于材料生成播客​
action=0​
通过 input_text 提供文本,或通过 input_info.input_url 提供网页链接或可下载的 PDF、DOC、TXT 文件链接。服务端总结输入材料并生成播客。两者均非空时,优先使用 input_text。​
基于对话合成音频​
action=3​
通过 nlp_texts 提供对话列表,每项包含文本及对应的发音人。​
基于话题联网生成播客​
action=4​
通过 prompt_text 提供话题,例如“火山引擎”或“如何平衡工作与生活”。该字段仅用于指定话题,不支持指令控制。​
​
  • 仅需生成播客文本时,可设置 input_info.only_nlp_text=true,不输出音频。​
  • 需要下载完整音频时,可设置 input_info.return_audio_url=true。下载链接通过事件 363(PodcastEnd)的 meta_info.audio_url 返回,有效期为 24 小时。​
​
输入限制​
播客内容按轮次返回,每个轮次通过 round_id 标识。同一轮次的音频可分多次返回,每次返回的音频数据称为“音频分片”。​
​
项目​
限制说明​
基于对话合成音频(action=3)​
​
nlp_texts.text 每轮不超过 300 字符,所有轮次的文本总长度不超过 10000 字符。​
基于材料生成播客(action=0)​
input_info.input_text_max_length 指定模型处理的最大字符数,默认为 20000,超出部分将被截断。为保证稳定性,建议设置为不超过 12000。可通过事件 363 的 input_metrics 查看截断信息。​
每轮文本长度​
input_info.max_char_length_per_round 默认为 300。服务端优先在句号等句末标点处断句,再判断是否超过字符上限,不会在达到上限时直接截断句子。​
发音人配置​
speaker_info.speakers 须指定 2 位发音人,默认使用 dayi/mizai 系列,建议选择同系列音色配对。​
发音人顺序​
speaker_info.random_order 默认为 true,表示随机选择首先发言的发音人。​
​
音色配置​
  • 建议选择同系列音色配对,以获得更好的效果。“黑猫侦探社咪仔”和“刘飞和潇磊”为播客专属音色系列。​
  • 默认音色系列:黑猫侦探社咪仔。​
​
系列​
音色 ID 或参考链接​
黑猫侦探社咪仔​
zh_female_mizaitongxue_v2_saturn_bigtts​
​
zh_male_dayixiansheng_v2_saturn_bigtts​
刘飞和潇磊​
zh_male_liufei_v2_saturn_bigtts​
​
zh_male_xiaolei_v2_saturn_bigtts​
TTS 音色列表​
https://docs.volcengine.com/docs/DoubaoVoice/Tonelist-1?lang=zh​
https://console.volcengine.com/speech/new/voices?projectName=default​
​
​
交互流程​
​​​
​
接入步骤​
  1. 发送请求:向 /api/v3/podcast/sse 提交 JSON 请求,携带鉴权信息、生成方式、输入内容及音频配置。无需额外发送会话开始或结束消息。​
  1. 确认连接:检查 HTTP 状态码及响应类型 text/event-stream。收到 HTTP 200 后持续读取响应;HTTP 200 仅表示连接已建立,不表示音频生成成功。​
  1. 保存会话标识:收到事件 150(SessionStarted)后,保存 session_id,用于问题排查及连接中断后的断点续传。​
  1. 接收轮次数据:事件 360 表示轮次开始,记录轮次编号、文本及音色;事件 361 返回音频分片;事件 362 表示轮次结束。多轮播客按此流程依次返回。​
  1. 处理用量及播客结束信息:收到事件 154 时记录用量;收到可选事件 363 时记录播客结束信息。收到上述事件后,仍须继续读取响应。​
  1. 确认请求结果:收到事件 152 且 code=20000000 时,确认生成成功并完成音频保存。事件 151 表示会话取消,事件 153 表示会话失败。若在收到上述结束事件前连接中断或超时,则结果不完整。​
事件说明​
SSE 消息通过 event: 指定事件类型,通过 data: 承载事件内容(JSON)。例如,event: 361 表示音频分片事件。事件编号与 HTTP 状态码相互独立。​
​
事件编号与名称​
含义​
处理建议​
150:SessionStarted​
会话开始。​
保存 session_id,继续接收后续结果。​
360:PodcastRoundStart​
播客轮次开始。​
读取 payload 中的 round_id、speaker 和 text,记录当前轮次的编号、音色及文本。​
361:PodcastRoundResponse​
返回当前轮次的内容,通常包含音频分片。​
对 JSON data 字段中的 Base64 字符串解码,按接收顺序保存音频字节或提交至播放器。​
362:PodcastRoundEnd​
当前轮次结束。​
完成当前轮次的处理并继续接收后续事件。仅在收到该事件且 is_error 未标记错误时,才将该轮次记录为完整接收。​
363:PodcastEnd​
播客内容结束;该事件可能不返回。​
记录播客结束信息;如已请求完整音频链接,则读取返回的链接。继续等待事件 151、152 或 153,不应据此判定请求成功。​
154:UsageResponse​
返回用量信息。​
读取 payload.usage。该事件可能多次返回,返回顺序不固定。​
152:SessionFinished​
会话结束;须检查业务响应码。​
确认 code=20000000 后,完成音频保存并结束读取。不得仅根据事件编号判定成功。​
151:SessionCanceled​
会话取消。​
结束读取,保留已接收的数据,并将请求标记为取消。​
153:SessionFailed​
会话失败。​
结束读取,记录 code、message 及请求 ID,用于问题排查。​
​
​
响应解析​
  1. 解析完整消息:SSE 消息以空行分隔。通过 event: 识别事件类型,按 SSE 规则合并同一消息中的一个或多个 data: 行,再解析 JSON。​
  1. 解析事件数据:SSE 的 data: 行承载 JSON;JSON 中的 data 字段承载 Base64 编码的音频分片,须解码后使用。文本、音色及用量等信息通过 payload 返回。​
  1. 按序处理音频:事件 361 可连续返回多次。解码后的音频字节须按接收顺序追加至文件或播放器,避免并行处理导致顺序错乱。​
  1. 处理保活消息:服务端空闲时约每 15 秒发送一次 :keep-alive。该消息为维持连接的注释行,不包含播客内容。应跳过所有以冒号开头的注释行。​
  1. 等待会话结束:轮次数、音频分片数及用量事件次数均不固定,不应在收到固定数量的消息后结束读取。​
​
断点续传​
生成过程中连接中断时,可保留已完整接收的轮次,通过新请求接收剩余内容。本接口以完整轮次为单位进行断点续传;未完整接收的轮次需丢弃已接收的音频分片,并重新接收该轮次的全部内容。​
续传参数​
​
保存信息​
获取方式​
续传请求填写规则​
原始任务 ID​
首次请求的事件 150 返回的 session_id。​
填入 retry_info.retry_task_id。续传请求会返回新的 session_id,但同一任务的后续续传始终使用首次请求的 session_id。​
最后完整接收的轮次编号​
收到事件 362 且 is_error 未标记错误后,保存该轮次的 round_id。​
填入 retry_info.last_finished_round_id。仅收到轮次开始事件或部分音频的轮次,不得计为已完成。​
​
续传步骤​
  1. 保留已完整接收的轮次音频,丢弃中断时未完成轮次的音频分片。​
  1. 保留原请求中的文本、音色、音频配置等参数,添加 retry_info 后重新发送 HTTP POST 请求。​
  1. 接收后续轮次,并按顺序将完整音频追加至已保留的音频。收到事件 152 且 code=20000000 后,确认生成成功。​
  • 示例​
  • 轮次 0~8 已完整接收,轮次 9 仅接收部分音频时连接中断。保留轮次 0~8 的音频,丢弃轮次 9 的音频分片,并将 last_finished_round_id 设为 8。续传时从轮次 9 开始接收,再与已保留的音频拼接。​
  • 续传请求未填写 retry_info 时,可能从头生成。本接口不支持通过 SSE 的 Last-Event-ID 自动重放历史事件。​
  • 构建完整播客时间轴时,须结合已保留音频的时长计算续传结果中的 start_time 和 end_time,不能直接将其作为完整播客的全局时间。​
业务响应码​
​
响应码​
响应信息​
说明​
20000000​
ok​
音频合成成功结束。​
45000000​
quota exceeded for types: concurrency​
并发限流,通常由请求并发数超过配额引起。​
40000010​
PodcastTTS invalid param​
请求参数错误,请根据 msg 信息检查请求参数。​
40000022​
IllegalPayload:TextRiskAuditFailed​
开启严格风控后,输入文本触发风控,导致合成失败。请检查输入文本。​
55000000​
服务端错误​
服务端通用错误。​
50302102​
action = 0 的报错:​
NLP RespError(50000001/FangzhouPodcastNLPFailed:content filter)​
action = 4 的报错:​
NLP RespError(50000001/server error: GetOutlineFailed:Failed to generate the podcast. The cause of the error is: content filter)​
或者​
NLP RespError(50000001/server error: GetOutlineFailed:Failed to generate the podcast. The cause of the error is: get outline base model return empty)​
内容触发安全审核过滤。​
50302102​
NLP RespError(50000001/FangzhouPodcastNLPFailed:content length)​
文本上下文长度超过限制。​
​
最近更新时间:2026.10.14 16:33:12
这个页面对您有帮助吗?
有用
有用
无用
无用