クイックスタート
タスク送信時に、リクエストボディにwebhook フィールドを追加します:
あなたのURL + /callback に POST リクエストを送信します。
動画・音声などその他の非同期タスクのエンドポイントも同様で、いずれもリクエストボディに
webhook フィールドを追加します。URLのルール
指定するwebhook は**ベースURL(base)**であり、その後ろに自動的に /callback を連結します:
そのため、サーバー側で
POST .../callback を受け取るエンドポイントを用意する必要があります。
受信する内容
プッシュされる内容は**「タスクステータスの取得」エンドポイントが返すものと完全に同じ**です。同じ解析ロジックで処理できます。動画タスクの結果は
result.videos、音声は result.audios にあります。リトライと重複排除(重要)
- リトライ: サーバー側が約10秒以内に
2xxを返さない、または5xxを返した場合、自動的に最大 3回 リトライします。間隔は約 10秒、30秒、60秒 です。3回とも失敗すると諦めます(約2分以内に終了)。 - リトライしないケース: エンドポイントが
4xxを返した場合(URL / リクエストに問題があると見なす)、リトライせずに直ちに諦めます。 - 重複排除: 通常、1つのタスクは1回のみプッシュされます。ただし極端なケース(送信後・確認前に当方で再起動が発生した場合など)では、重複プッシュを受信する可能性があります。重複処理を避けるため、必ず
id(task_id)で冪等に重複排除 してください。
1
できるだけ早く 2xx を返す
まず受け取ってキューに入れ、その後で非同期に処理してください。処理完了まで当方を待たせないでください。
2
id で重複排除する
id(task_id)を冪等キーとして使用し、重複処理を回避してください。3
署名を設定・検証する
本番環境では、コールバックリクエストの送信元を検証し、偽造されたリクエストを拒否してください。
コールバックURLの要件
セキュリティのため、コールバックURLは次を満たす必要があります:
要件を満たさないURLは直ちに破棄されます(プッシュもリトライもされません)。
よくある質問
webhook付きでタスクを送信したのにプッシュが届かない?
webhook付きでタスクを送信したのにプッシュが届かない?
1つずつ確認してください:
- タスクは本当に完了しましたか? タスク詳細を確認し、
statusがcompleted/failedになっていますか(処理中はプッシュしません)? - あなたのURLは公開アクセス可能ですか? 当方からあなたの
/callbackに到達できますか? - ポートは標準ポート(80 / 443)ですか? 非標準ポートはセキュリティポリシーでブロックされる可能性があります。
- あなたの
/callbackは速やかに 2xx を返しましたか? 4xx を返すと直ちに諦めます。 httpsを使っていますか? 証明書は有効ですか?
result の url が配列になっているのはなぜ?
result の url が配列になっているのはなぜ?
一部のモデルは一度に複数枚の画像を生成するため、
images[].url は配列になることがあります。配列として処理してください。結果リンクに有効期限はありますか?
結果リンクに有効期限はありますか?
result に expires_at(Unixタイムスタンプ)が含まれる場合、そのリンクの有効期限を示します。速やかに保存し直してください。「処理中」のステータスはプッシュされますか?
「処理中」のステータスはプッシュされますか?
いいえ。タスクが最終的に成功または失敗したときに1回だけプッシュします。
最小の受信側サンプル
Python
200 を返し、処理ロジックはバックグラウンドで非同期に実行してください。