Guides
Webhooks
Webhookでイベント通知を受け取る方法
概要
Webhookを設定すると、ツール実行やバージョン公開などのイベントをHTTPで通知できます。Web UIの「Webhooks」ページから設定します。
サポートされるイベント
| イベント | 説明 |
|---|---|
tool.run.completed | ツール実行が成功した |
tool.run.failed | ツール実行が失敗した |
toolset.published | ToolSetの新バージョンが公開された |
設定方法
Web UIのサイドバーから「Webhooks」を選択し、Webhookを管理できます。
- 「New Webhook」をクリック
- 通知先URLを入力
- 購読するイベントを選択
- 「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-Type | application/json |
X-Webhook-Signature | sha256={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秒です。