DEV Community

Cover image for Suno SDK シリーズ 02:ポーリングとダウンロードの落とし穴、404/502 から audio_url 成功まで
Jenny Met
Jenny Met

Posted on • Originally published at crazyrouter.com

Suno SDK シリーズ 02:ポーリングとダウンロードの落とし穴、404/502 から audio_url 成功まで

Suno SDK シリーズ 02:ポーリングとダウンロードの落とし穴、404/502 から audio_url 成功まで

Suno API result validation

Suno のような音楽生成 API では、タスクが succeeded になっても、最終ファイルがすぐに取得できるとは限りません。今回の実測では、公開 /content URL は 404/502 になりましたが、上流の audio_url は正常にダウンロードできました。

実測結果

対象タスク:

task_ac90b23619334516
Enter fullscreen mode Exit fullscreen mode

ポーリング結果:

{
  "status": "succeeded",
  "format": "mp4",
  "url": "https://crazyrouter.com/v1/videos/task_ac90b23619334516/content"
}
Enter fullscreen mode Exit fullscreen mode

公開 content URL の検証:

HEAD crazyrouter.com content URL: HTTP 404
HEAD api.crazyrouter.com content URL + Authorization: HTTP 404
GET api.crazyrouter.com content URL + Authorization: HTTP 502
Enter fullscreen mode Exit fullscreen mode

この時点だけを見ると、「生成結果のダウンロードは使えない」と判断しがちです。しかし、管理側のタスク詳細には上流の実メディア URL が含まれていました。

data.data.resultJson.data[0].audio_url
data.data.resultJson.data[0].image_url
Enter fullscreen mode Exit fullscreen mode

audio_url の検証結果:

HEAD audio_url: HTTP 200, Content-Type: audio/mp3
GET audio_url: HTTP 200, Content-Type: audio/mp3, 412326 bytes
Enter fullscreen mode Exit fullscreen mode

何が失敗し、何が成功したのか

項目 結果
タスク送信 成功
タスクポーリング 成功、succeeded
公開 /v1/videos/{task_id}/content 失敗、404/502
上流 resultJson.data[0].audio_url 成功、MP3 を取得
実用可否 生成結果は可用。ただし公開プロキシは修正または補完が必要

この違いをログに残さないと、原因を誤って「Suno の生成失敗」と分類してしまいます。正しくは「生成は成功、公開 content プロキシが上流 audio_url を解決できていない」です。

実装で必要なチェック

ダウンロード処理では、少なくとも次を確認します。

HTTP status: 200 または許容する 206
Content-Type: audio/* などのメディア型
Content-Length または実ダウンロードサイズ: エラーページより十分大きい
必要なら ffprobe などで再検証
Enter fullscreen mode Exit fullscreen mode

エラーページを .mp3.mp4 として保存してしまう実装は避けるべきです。

推奨リトライ戦略

1回目: succeeded 直後にダウンロード
2回目: 10 秒後
3回目: 30 秒後
4回目: 60 秒後
最後: resultJson.data[0].audio_url を再確認
Enter fullscreen mode Exit fullscreen mode

それでも失敗する場合は、task_failed ではなく content_unavailable のように分類すると、運用上の切り分けがしやすくなります。

まとめ

今回のポイントは単純です。

公開 /content の失敗 = Suno 生成失敗
Enter fullscreen mode Exit fullscreen mode

ではありません。

Suno の実メディアは resultJson.data[0].audio_url にあり、そこからは正常に MP3 を取得できました。プロダクションでは、この URL を明示的に解析し、必要に応じて自社ストレージへ保存するのが安全です。

Top comments (0)