Webhooks
APIタスクが進行または完了したときに、MeshyからあなたのサーバーへPOSTリクエストを送信させることで、ポーリングが不要になります。
Webhooksを使う理由
Webhooksは、各タスクのステータスをAPIにポーリングするよりも手間がかからず、コストも抑えられます。Meshyは更新が発生するたびに送信するため、より早く受け取ることができ、Webhooksはポーリングよりもスケールしやすくなります。また、送信するリクエストの数も減るため、レート制限に対してより余裕を持つことができます。
Webhookを設定する
Webhookを追加するには、以下の手順に従ってください。
- Developer Platform内のWebhooksページを開き、Create Webhookをクリックします。
- Payload URLに、配信を受け取るURLを入力します。Meshyは
https://経由でのみ配信します。 - Activeを選択し、Confirmをクリックします。
各アカウントは、アクティブなWebhookを5つまで、合計10個まで持つことができます。アクティブなWebhookはすべて、あなたのすべてのAPIタスクのステータス更新を受け取ります。
自分のコンピュータ上のサーバーでWebhookをテストするには、自分のコンピュータでテストするを参照してください。
配信を処理する
配信を受け付けるには、200や202など、400未満のステータスで応答してください。Meshyは応答を約25秒待つため、まず配信内容を保存してから応答してください。モデルのダウンロードなど、時間のかかる処理はその後に行ってください。
400以上のステータス、または応答がない場合は、配信失敗として扱われます。Meshyは試行間の待機時間を徐々に延ばしながら再試行し、IN_PROGRESS更新の場合は最大4回、最終ステータスの場合は最大9回再試行します。20回連続の更新がすべての試行で失敗した場合、Meshyはそのwebhookを無効化することがあります。再度有効にするには、Webhooksページで編集し、Activeを選択してください。
以下のケースに対応できるようにコードを書いてください。
- 配信は順不同で届くことがあります。
IN_PROGRESSの配信が最終配信の後に届くこともあるため、それによって最終ステータスを上書きしないようにしてください。 - 同じ更新が複数回届くことがあります。
idとstatusの組み合わせごとに1回だけ処理するようにしてください。
タスクの通常の所要時間のおよそ2倍が経過してもタスクの最終配信が届かない場合は、そのタスクのGETエンドポイントからタスクを取得してください。通常の所要時間と待機すべき時間については、タスクのライフサイクルを参照してください。
自分のコンピュータでテストする
Meshyは公開されたhttps://のURLにのみ配信するため、あなたのコンピュータ上のサーバーに直接届けることはできません。自分のコンピュータ上のコードをテストするには、webhookプロキシを使って公開URLをそのコンピュータに転送してください。以下の手順ではsmee.ioを使用しますが、どのwebhookプロキシサービスでも同様に動作します。
-
smee.ioを開き、Start a new channelをクリックします。Webhook Proxy URLの下にあるURLをコピーします。
-
smeeクライアントをまだインストールしていない場合は、インストールしてください。
npm install --global smee-client -
チャンネルをあなたのサーバーに転送します。
WEBHOOK_PROXY_URLをあなたのWebhook Proxy URLに置き換えてください。smee --url WEBHOOK_PROXY_URL --path /webhook --port 3000出力は次のようになります。ここで
WEBHOOK_PROXY_URLはあなたのWebhook Proxy URLです。Forwarding WEBHOOK_PROXY_URL to http://127.0.0.1:3000/webhook Connected WEBHOOK_PROXY_URLテスト中はこれを実行したままにしてください。転送を停止するには、Ctrl+Cを押します。あなたのサーバーはポート
3000のパス/webhookで配信を受け取るため、そこでリッスンするようにコードを設定してください。 -
Webhooksページで、Webhook Proxy URLをPayload URLとしてWebhookを作成します。
配信ペイロード
Meshyは、タスクがIN_PROGRESSの間に1回配信を送信し、タスクが最終ステータスに達したときにもう1回送信します。タスクはIN_PROGRESSの配信を経ずに最終ステータスに達することもあります。
各配信は、タスクオブジェクトをJSONボディとしてあなたのPayload URLへ送信されるPOSTです。これは、タスクのGETエンドポイントが返すものと同じオブジェクトですが、progressは例外です。配信では、progressは以下のいずれかの値として送信されます。
- タスクが
IN_PROGRESSの間は50 - タスクが成功したときは
100 - タスクが失敗またはキャンセルされたときは
0
各タスクオブジェクトのフィールドと例については、以下のセクションを参照してください。