language で失敗時のエラーメッセージの言語も指定できます。
クイックスタート
タスク送信時に、リクエストボディのトップレベルにwebhook を追加します。失敗時のメッセージを翻訳する場合は、language も追加します:
あなたのURL + /callback に POST リクエストを送信します。
動画・音声などその他の非同期タスクのエンドポイントでも、
webhook の指定方法は同じです。language は現在、POST /v1/videos/generations と POST /v1/images/generations に対応しており、どちらのフィールドもリクエストボディのトップレベルに指定します。エラーメッセージの言語を指定
language は省略可能な文字列パラメータで、失敗時のコールバックに含まれる error.message のみに影響します。タスクID、ステータス、進捗、料金、結果URLなどのフィールドは言語によって変わりません。省略した場合は、アップストリームまたはプラットフォームの元のエラーメッセージが返されます。
- 大文字と小文字は区別されず、前後の空白は自動的に削除されます。たとえば、
"JA"と" ja "はどちらもjaとして扱われます。 - 表にある2文字コードを使用してください。
zh-CN、en-US、pt-BRなどの地域タグは認識されません。 - サポートされていない値でもタスク送信は失敗せず、コールバックには元のエラーメッセージが含まれます。
- 元のメッセージがすでに対象言語の場合、再翻訳せずそのまま返されます。
- 翻訳に失敗した場合も、コールバックを遅延または破棄せず、元のメッセージを返します。
ポーリング時は、タスクステータスエンドポイントの
language クエリパラメータで同じエラーメッセージ言語を指定できます。Webhookにはクエリ文字列がないため、language はタスク送信時に指定する必要があります。URLのルール
指定するwebhook は**ベースURL(base)**であり、その後ろに自動的に /callback を連結します:
そのため、サーバー側で
POST .../callback を受け取るエンドポイントを用意する必要があります。
受信する内容
プッシュされる内容は**「タスクステータスの取得」エンドポイントが返すものと完全に同じ**です。同じ解析ロジックで処理できます。動画タスクの結果は
result.videos、音声は result.audios にあります。上記の失敗例では
"language": "ja" を使用しています。言語パラメータによって変わるのは error.message のみで、その他のフィールドは同じです。リトライと重複排除(重要)
- リトライ: サーバー側が約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 を返し、処理ロジックはバックグラウンドで非同期に実行してください。