Jinba Tool Registry
Guides

Webhooks

Webhookでイベント通知を受け取る方法

概要

Webhookを設定すると、ツール実行やバージョン公開などのイベントをHTTPで通知できます。Web UIの「Webhooks」ページから設定します。

サポートされるイベント

イベント説明
tool.run.completedツール実行が成功した
tool.run.failedツール実行が失敗した
toolset.publishedToolSetの新バージョンが公開された

設定方法

Web UIのサイドバーから「Webhooks」を選択し、Webhookを管理できます。

  1. 「New Webhook」をクリック
  2. 通知先URLを入力
  3. 購読するイベントを選択
  4. 「Create」をクリック

作成時にsecretが表示されます。署名検証に使用するため安全に保管してください。

ペイロード形式

{
  "event": "tool.run.completed",
  "timestamp": "2024-01-15T10:00:00.000Z",
  "data": {
    "runId": "run_xxx",
    "toolSetSlug": "my-toolset",
    "toolSlug": "my-tool",
    "status": "success",
    "durationMs": 1234
  }
}

ヘッダー

ヘッダー説明
Content-Typeapplication/json
X-Webhook-Signaturesha256={signature}
X-Webhook-Eventイベント名(例: tool.run.completed

署名検証

Webhookの署名を検証して、リクエストがJinba Tool Registryから送信されたものであることを確認してください。

Node.js

import crypto from "node:crypto";

function verifySignature(payload, signature, secret) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(payload)
    .digest("hex");
  return signature === `sha256=${expected}`;
}

// Express example
app.post("/webhooks", (req, res) => {
  const payload = JSON.stringify(req.body);
  const signature = req.headers["x-webhook-signature"];

  if (!verifySignature(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).send("Invalid signature");
  }

  const event = req.headers["x-webhook-event"];
  // イベントを処理...
  res.status(200).send("OK");
});

Python

import hmac
import hashlib

def verify_signature(payload: str, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode(), payload.encode(), hashlib.sha256
    ).hexdigest()
    return signature == f"sha256={expected}"

リトライ

配信に失敗した場合、最大3回までリトライされます。

試行タイミング
1回目即時
2回目1分後
3回目5分後
最終30分後(失敗の場合、配信はfailedとしてマーク)

HTTPステータスコード200-299をレスポンスすると成功と見なされます。タイムアウトは10秒です。

On this page