这是基于 Cloudflare Workers、Durable Objects、D1、R2 和火山语音 API 的播客生成后端。用户提交文本后,系统会生成播客脚本、拆分节目段落、合成音频,并可发布到个人 RSS。
Authorization: Bearer <JWT_TOKEN> 请求头可访问全部受保护接口。session_token,可通过查询参数访问该节目状态与音频。功能:创建播客节目生成任务。
请求体示例:
{
"title": "AI 产品周报",
"source_text": "粘贴需要生成播客的原始文本……",
"language": "zh-CN",
"style": "conversation",
"long_text_mode": "compact",
"group_id": "grp_existing",
"speakers": [
{
"id": "host",
"name": "主持人",
"voice": "zh_female_shuangkuaisisi_uranus_bigtts"
},
{
"id": "guest",
"name": "嘉宾",
"voice": "zh_male_m191_uranus_bigtts"
}
],
"is_public": false
}
如只传 voice,系统会按单人播客处理;传入 speakers 时会按角色分段并使用对应音色合成。
分组:登录用户可传 group_id 加入已有分组,或传 new_group_name 创建/复用同名分组;匿名用户分组由客户端本地保存。
长文本:source_text 最多 200,000 字符;超过 50,000 字符时,后台会按语义单元切成连续 chunk,带上邻接原文上下文辅助衔接,再按原文顺序拼接。long_text_mode 支持 compact 和 expanded,默认 compact;前者强压缩,后者保留更多细节。expanded 模式下,中等长度文本会提前拆成连续 section,以降低单次大模型请求超时风险。
响应示例:
{
"episode_id": "ep_123456",
"status": "queued",
"session_token": "8f9e..."
}
响应头会包含 X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset 以便前端获知配额。
功能:查询节目生成状态、脚本和音频入口。
匿名访问:在请求 URL 中携带 ?session_token=<token>。
响应示例:
{
"episode": {
"id": "ep_123456",
"title": "AI 产品周报",
"status": "synthesizing",
"script_text": "欢迎收听……",
"audio_url": null,
"is_public": false,
"created_at": "2026-04-30T00:00:00Z"
}
}
功能:将失败的节目重新扣减额度并重新加入生成队列。仅节目拥有者或携带匹配 session_token 的请求可操作。
功能:播放或下载生成完成的 MP3 音频,支持 Range 请求头。
功能:获取当前登录用户的节目库。
查询参数:
page - 页码,默认 1。limit - 每页数量,默认 30,最大 100。status - 状态过滤(queued / scripting / synthesizing / composing / done / failed)。group_id - 分组过滤;传 none 查看未分组节目。功能:列出当前登录用户的节目分组和每组节目数。
功能:创建分组;同名会返回已有分组。
功能:重命名分组。
功能:删除分组并将组内节目移为未分组,不删除节目。
功能:移动节目到已有分组、新建分组,或传 {"group_id": null} 移出分组。
功能:删除指定节目、节目段落和 R2 音频,仅限登录用户操作自己的节目。
功能:生成公开节目的 Podcast RSS。登录用户默认使用自己的 user_id 作为 feedId。
功能:返回火山语音可用音色配置;/api/speakers 仍返回同一份数据,便于本地调试。
功能:查看当前身份(登录用户或 IP)的剩余生成额度与重置时间。
功能:检查 Worker 运行状态,返回时间戳与版本号。
功能:发起 OAuth 登录,必须提供 redirect_uri。
回调地址 /api/auth/oauth/{provider}/callback 会验证授权并重定向到原始回调地址,同时附带 JWT。
节目状态枚举值:draft、queued、scripting、synthesizing、composing、done、failed。