跳转到主要内容

音乐 Webhook 回调

除了轮询查询音乐详情接口,你还可以在提交音乐生成任务时提供 callback_url,在生成完成时自动接收通知。

工作原理

  1. 提交时附带回调 URL:在音乐生成请求中加入 callback_url 参数
  2. 任务处理:PoYo AI 处理你的音乐生成任务
  3. 接收通知:当任务状态变为 finished 或 failed 时,PoYo AI 会向你的回调 URL 发送 POST 请求
  4. 处理结果:你的服务器会收到完整的任务数据,包括生成的文件

回调请求

任务完成时,PoYo AI 会向你的回调 URL 发送 POST 请求:

请求头

请求体结构

Webhook 请求体使用与音乐详情响应体相同的 task_id、status、files、created_time 和 error_message 字段,但不包含外层的 code 和 data 包装。Webhook 目前不包含仅在详情接口中返回的 credits_amount 和 progress 字段。files 数组的内容因模型而异。

签名验证

PoYo 使用 HMAC-SHA256 对每个音乐 Webhook 请求签名。现有接收端可以忽略这些请求头,但生产系统应当验证签名。 获取你的 Webhook HMAC 密钥:
轮换你的 Webhook HMAC 密钥:
签名规则:
其中:
  • task_id 是回调请求体中顶层的 task_id
  • timestamp 是 X-Webhook-Timestamp 的值
  • webhook_hmac_key 由 GET /api/api-keys/webhook-secret 返回

Python 验证

files 数据响应字段

files 数组的内容取决于创建任务的模型。

JSON 字段详情

separate-vocals

separate_vocals 字段:
  • vocal_url - 提取出的人声音轨 URL
  • instrumental_url - 伴奏音轨 URL

upload-and-separate-vocals

vocal_removal 字段:
  • bass - 贝斯音轨 URL
  • drums - 鼓音轨 URL
  • piano - 钢琴音轨 URL
  • guitar - 吉他音轨 URL
  • vocals - 人声音轨 URL
  • other - 其他音频元素 URL

stem-split

stem_split 字段:
  • backing_vocals_url - 和声 URL
  • bass_url - 贝斯音轨 URL
  • brass_url - 铜管乐器 URL
  • drums_url - 鼓音轨 URL
  • fx_url - 音效 URL
  • guitar_url - 吉他音轨 URL
  • keyboard_url - 键盘音轨 URL
  • percussion_url - 打击乐音轨 URL
  • strings_url - 弦乐音轨 URL
  • synth_url - 合成器音轨 URL
  • vocal_url - 主唱人声 URL
  • woodwinds_url - 木管乐器音轨 URL
  • piano_url - 钢琴音轨 URL

generate-music-cover

generate_cover 是包含封面图对象的 JSON 数组:
  • file_url - 生成的封面图 URL
  • file_type - 文件类型(例如 image)

回调示例

音乐生成(generate-music、extend-music 等)

Suno Voice Generate

Suno Voice Validate 或 Regenerate

Suno Voice Check

MiniMax Music 2.6

带时间戳的歌词(get-timestamped-lyrics)

生成的歌词(generate-lyrics)

音乐风格增强(boost-music-style)

WAV 转换(convert-to-wav)

人声分离(separate-vocals)

上传并分离人声(upload-and-separate-vocals)

音轨分离(stem-split)

音乐封面图(generate-music-cover)

生成的 Persona(generate-persona)

音乐视频(create-music-video)

失败任务

要求

你的回调接口必须满足以下要求:
  • 仅支持 HTTPS:必须使用 HTTPS 协议(不支持 HTTP)
  • URL 最大长度:2048 个字符
  • 响应超时:必须在 30 秒内响应
  • 成功响应:应返回 HTTP 200-299 状态码
  • 禁止内网 IP:不能使用私有/内网 IP 地址(例如 192.168.x.x 和 10.x.x.x)
  • 公网可访问:必须能从互联网公开访问

重试策略

如果你的回调接口未响应或返回错误:
  • 重试次数:最多自动重试 5 次
  • 重试间隔:指数退避,从约 60 秒开始,最长 10 分钟
  • 最终失败:所有重试均失败后,不再继续重试
如果所有重试均失败,你仍可以通过轮询查询音乐详情接口获取结果。

安全最佳实践

验证请求:处理回调前先校验 X-Webhook-Timestamp 和 X-Webhook-Signature。
幂等性:将 Webhook 处理程序设计为幂等,以应对重复投递
异步处理:异步处理回调并尽快返回 200,避免超时
日志记录:记录所有 Webhook 请求,便于调试和监控