Cloud Agents のライフサイクルイベントを HTTP Webhook で購読します。エンドポイント管理、配信動作、対応イベント一覧を説明します。
概要
Webhook は Qoder Cloud Agents が提供するイベント駆動型のプッシュ機構です。Agent や Session などのリソースにライフサイクルの変化が生じると、システムは構造化されたイベントを HTTP POST で開発者が登録した URL に配信します。ポーリングは不要です。
主な特徴:
- イベント駆動型プッシュ — リソースの状態変化時に能動的に通知し、クライアント側のポーリングは不要
- envelope 構造 — 統一された
BetaWebhookEvent { id, created_at, data, type:"event" }フォーマット - 配信セマンティクス — 少なくとも 1 回(at-least-once)の保証、指数バックオフによるリトライ
| シナリオ | 説明 |
|---|---|
| 非同期タスク完了通知 | Session の完了時に下流のワークフローをトリガーする |
| Agent 設定の監査 | Agent の作成/更新/削除操作を追跡する |
| マルチ Agent オーケストレーション | Thread の状態変化に応じてサブタスクのスケジューリングを駆動する |
| 運用監視とアラート | 連続失敗回数がしきい値を超えたときにアラートを発する |
ドメインタイプ
このセクションでは Webhook イベントのデータ構造を定義します。各イベントタイプの data フィールドは、リソース ID、イベントタイプ、およびイベント固有の追加フィールドを含む統一されたオブジェクト形式に従います。
Session ライフサイクルイベント
Webhook Session Updated Event Data
-
WebhookSessionUpdatedEventData object { id, type }-
id: stringイベントをトリガーした Session ID。 -
type: "session.updated""session.updated"
-
Webhook Session Deleted Event Data
-
WebhookSessionDeletedEventData object { id, type }-
id: stringイベントをトリガーした Session ID。 -
type: "session.deleted""session.deleted"
-
Session ステータスイベント
Webhook Session Status Run Started Event Data
-
WebhookSessionStatusRunStartedEventData object { id, type }-
id: stringイベントをトリガーした Session ID。 -
type: "session.status_run_started""session.status_run_started"
-
Webhook Session Status Idled Event Data
-
WebhookSessionStatusIdledEventData object { id, type }-
id: stringイベントをトリガーした Session ID。 -
type: "session.status_idled""session.status_idled"
-
Session Thread イベント
マルチ Agent 協調シナリオに適用されます。Thread イベントは基本フィールドに加えて session_thread_id フィールドを持ち、特定の実行スレッドを識別します。
Webhook Session Thread Created Event Data
-
WebhookSessionThreadCreatedEventData object { id, type, session_thread_id }-
id: stringイベントをトリガーした Session ID。 -
type: "session.thread_created""session.thread_created"
-
session_thread_id: string関連付けられた Session Thread ID。
-
Webhook Session Thread Idled Event Data
-
WebhookSessionThreadIdledEventData object { id, type, session_thread_id }-
id: stringイベントをトリガーした Session ID。 -
type: "session.thread_idled""session.thread_idled"
-
session_thread_id: string関連付けられた Session Thread ID。
-
Webhook Session Thread Terminated Event Data
-
WebhookSessionThreadTerminatedEventData object { id, type, session_thread_id }-
id: stringイベントをトリガーした Session ID。 -
type: "session.thread_terminated""session.thread_terminated"
-
session_thread_id: string関連付けられた Session Thread ID。
-
Agent ライフサイクルイベント
Webhook Agent Created Event Data
-
WebhookAgentCreatedEventData object { id, type }-
id: stringイベントをトリガーした Agent ID。 -
type: "agent.created""agent.created"
POST /agentsにより Agent が作成された後にこのイベントを送信します。
-
Webhook Agent Updated Event Data
-
WebhookAgentUpdatedEventData object { id, type }-
id: stringイベントをトリガーした Agent ID。 -
type: "agent.updated""agent.updated"
-
Webhook Agent Archived Event Data
-
WebhookAgentArchivedEventData object { id, type }-
id: stringイベントをトリガーした Agent ID。 -
type: "agent.archived""agent.archived"
-
Webhook Agent Deleted Event Data
-
WebhookAgentDeletedEventData object { id, type }-
id: stringイベントをトリガーした Agent ID。 -
type: "agent.deleted""agent.deleted"
-
Deployment Run イベント
Deployment Run イベントでは、id は Deployment Run ID です。
WebhookDeploymentRunStartedEventData object { id, type: "deployment_run.started" }WebhookDeploymentRunSucceededEventData object { id, type: "deployment_run.succeeded" }WebhookDeploymentRunFailedEventData object { id, type: "deployment_run.failed" }
Webhook エンドポイント API
Webhook エンドポイントを管理するための CRUD エンドポイントです。これらを使用して、Webhook エンドポイントの作成、照会、更新、削除を行うほか、テストイベントの送信やエンドポイントの有効化/無効化の制御を行います。
Base URL:
| リージョン | アドレス |
|---|---|
| Global | https://api.qoder.com/api/v1/cloud |
| CN | https://api.qoder.com.cn/api/v1/cloud |
POST /webhook_endpoints
新しい Webhook エンドポイントを作成します。
リクエストパラメータ:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
url | string | はい | イベント配信用の、インターネットから到達可能な HTTPS URL。ポート 443 が必須 |
description | string | いいえ | 管理目的のエンドポイント説明 |
events | string[] | はい | 明示的に指定したイベントタイプのリスト。使用できる値は「サポート対象のイベントタイプ」を参照 |
201 Created
Note: signing_secret は作成時に一度だけ返されます。安全に保管してください。
ステータスコード:
| コード | 説明 |
|---|---|
| 201 | 作成成功 |
| 400 | 無効なリクエストパラメータ(URL がインターネットから到達可能な HTTPS ポート 443 のアドレスではない、イベントタイプが無効など) |
| 401 | 認証エラー、無効または期限切れのトークン |
| 422 | セマンティックエラー(URL の重複登録など) |
GET /webhook_endpoints
現在のアカウント配下のすべての Webhook エンドポイントを一覧表示します。
リクエストパラメータ: なし
レスポンス: 200 OK
| フィールド | 型 | 説明 |
|---|---|---|
id | string | エンドポイントの一意識別子 |
url | string | イベントを受信する URL |
description | string | エンドポイントの説明 |
events | string[] | 購読中のイベントタイプ |
active | boolean | 有効かどうか |
consecutive_fail | integer | 連続配信失敗回数 |
last_success_at | string | 最後に配信が成功した時刻(RFC 3339) |
last_failure_at | string | 最後に配信が失敗した時刻(RFC 3339)。失敗記録がない場合は null |
created_at | string | 作成時刻(RFC 3339) |
updated_at | string | 最終更新時刻(RFC 3339) |
GET /webhook_endpoints/{id}
特定の Webhook エンドポイントの詳細を取得します。
パスパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | Webhook エンドポイント ID |
200 OK
一覧エンドポイントの要素と同じ構造の単一のエンドポイントオブジェクトを返します。
ステータスコード:
| コード | 説明 |
|---|---|
| 200 | 成功 |
| 404 | エンドポイントが見つからない |
PUT /webhook_endpoints/{id}
特定の Webhook エンドポイントの設定を更新します。
パスパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | Webhook エンドポイント ID |
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
url | string | いいえ | インターネットから到達可能な HTTPS ポート 443 の配信 URL に更新する |
description | string | いいえ | エンドポイント説明を更新する |
events | string[] | いいえ | 明示的に指定した購読イベントタイプを更新する |
200 OK
更新後の完全なエンドポイントオブジェクトを返します。
ステータスコード:
| コード | 説明 |
|---|---|
| 200 | 更新成功 |
| 400 | 無効なリクエストパラメータ |
| 404 | エンドポイントが見つからない |
DELETE /webhook_endpoints/{id}
Webhook エンドポイントを永久に削除します。未配信のイベントはすべて破棄されます。
パスパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | Webhook エンドポイント ID |
204 No Content
ステータスコード:
| コード | 説明 |
|---|---|
| 204 | 削除成功 |
| 404 | エンドポイントが見つからない |
POST /webhook_endpoints/{id}/test
指定したエンドポイントにテストイベントを送信し、接続性とペイロード処理ロジックを確認します。
パスパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | Webhook エンドポイント ID |
202 Accepted
| フィールド | 型 | 説明 |
|---|---|---|
event_id | integer | テストイベントの内部 ID |
delivery_rows | integer | イベントが公開されたメッセージパーティション数 |
| コード | 説明 |
|---|---|
| 202 | テストイベント送信済み |
| 404 | エンドポイントが見つからない |
POST /webhook_endpoints/{id}/enable
無効化された Webhook エンドポイントを有効化します。有効化されると、エンドポイントはイベント配信の受信を再開します。
パスパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | Webhook エンドポイント ID |
200 OK
有効化後のエンドポイントオブジェクト(active: true)を返します。
ステータスコード:
| コード | 説明 |
|---|---|
| 200 | 有効化成功 |
| 404 | エンドポイントが見つからない |
POST /webhook_endpoints/{id}/disable
Webhook エンドポイントを無効化します。無効化されると、エンドポイントはイベント配信の受信を停止しますが、削除はされません。
パスパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | Webhook エンドポイント ID |
200 OK
無効化後のエンドポイントオブジェクト(active: false)を返します。
ステータスコード:
| コード | 説明 |
|---|---|
| 200 | 無効化成功 |
| 404 | エンドポイントが見つからない |
GET /webhook_events
監査やトラブルシューティングのために Webhook イベント配信レコードを一覧表示します。
リクエストパラメータ: なし
レスポンス: 200 OK
配信ステータス、タイムスタンプなどの情報を含むイベント一覧を返します。
例:
GET /webhook_events/{id}
単一の Webhook イベントの詳細情報を取得します。
パスパラメータ:
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | Webhook イベント ID |
200 OK
ステータスコード:
| コード | 説明 |
|---|---|
| 200 | 成功 |
| 404 | イベントが見つからない |
エラーレスポンス形式
すべてのエンドポイントは、エラー発生時に統一されたエラー構造を返します:
| フィールド | 型 | 説明 |
|---|---|---|
error.message | string | 人間が読めるエラー説明 |
error.type | string | エラーカテゴリ(例: invalid_request_error、not_found_error) |
request_id | string | サポートチームでのトラブルシューティング用のリクエストトレース ID |
type | string | 固定値 "error" |
注意: 認証層(Token が無効または欠落している場合など)が返す 401 レスポンスは、ゲートウェイから直接返されるため、上記の業務エラー構造に従わない場合があります。
Webhook 配信
配信方法
システムは、登録済み URL に HTTP POST で次の形式のイベントを配信します:
- Method:
POST - Content-Type:
application/json - Body: JSON envelope 構造(「envelope 構造」を参照)
リクエストヘッダー
各配信には次の HTTP ヘッダーが含まれます:
| ヘッダー | 説明 |
|---|---|
Content-Type | application/json |
User-Agent | QoderCloudAgents-Webhook/1.0 |
リトライ戦略
配信が失敗した場合、システムは指数バックオフでリトライします:
| 試行 | 遅延 | 説明 |
|---|---|---|
| 1 回目 | 即時 | 初回配信 |
| 2 回目 | 1 秒 | 1 回目のリトライ |
| 3 回目 | 5 秒 | 2 回目のリトライ |
| 4 回目 | 30 秒 | 最後のリトライ |
レスポンスコードの処理
| レスポンスコード範囲 | 処理 |
|---|---|
| 2xx | 配信成功。イベントを配信済みとしてマーク |
| 4xx | リトライせず、イベントを破棄済みとしてマーク(クライアントエラーは開発者側で修正) |
| 5xx | リトライを実行(一時的なサーバー障害) |
| Timeout | リトライを実行(デフォルトのタイムアウトは 30 秒) |
自動デグレード
エンドポイントの consecutive_fail が 20 を超えると、システムはデグレード警告を発します。失敗が継続する場合は、この指標を監視し、次を確認してください:
- エンドポイント URL に到達できるか
- SSL 証明書が有効か
- サーバーが正常に応答しているか
サポート対象のイベントタイプ
現在購読可能で、実際に送信されるイベントを次に示します。events には、この表にあるイベント名を明示的に指定する必要があります。
| イベントタイプ | 追加の data フィールド | トリガー条件 |
|---|---|---|
session.updated | — | Session のメタデータが変更された |
session.deleted | — | Session が永久に削除された |
session.status_run_started | — | Agent が実行を開始した |
session.status_idled | — | ターンが完了し、Session がアイドルに戻った |
session.thread_created | session_thread_id | 新しい Session Thread が作成された |
session.thread_idled | session_thread_id | Thread の実行が終了し、アイドルに移行した |
session.thread_terminated | session_thread_id | Thread が終了された |
agent.created | — | Agent が作成された |
agent.updated | — | Agent の設定が更新された |
agent.archived | — | Agent がアーカイブされた |
agent.deleted | — | Agent が削除された |
deployment_run.started | — | Deployment Run が実行を開始した |
deployment_run.succeeded | — | Deployment Run が成功した |
deployment_run.failed | — | Deployment Run が失敗した |
envelope 構造
すべての Webhook イベントは、統一された envelope 構造で配信されます。
基本 envelope 構造
Thread イベントの envelope
Thread イベントは data 内に追加の session_thread_id フィールドを含みます:
フィールドの説明
| フィールド | 型 | 説明 |
|---|---|---|
id | string | whe_ で始まるイベントの一意識別子。同じイベントの再試行でも値は変わりません |
created_at | string | イベント作成時刻。RFC 3339 UTC 形式 |
type | string | 固定値 "event"。イベント envelope であることを示します |
data | object | トリガーとなったリソース情報を含むイベントペイロード |
data.id | string | イベントをトリガーしたリソースの ID。Session、Agent、Deployment Run ID など |
data.type | string | イベントタイプ文字列(例: "session.status_idled"、"agent.updated") |
data.session_thread_id | string | Thread イベントのみ。関連付けられた Session Thread ID |
冪等性の処理
envelope 内の id は重複排除キーとして使用できます。配信セマンティクスは少なくとも 1 回(at-least-once)であるため、同じイベントが複数回配信される可能性があります。受信側では次を実施してください:
idを重複排除の一意キーとして使用する- 処理前に
idがすでに消費済みか確認する - イベント処理ロジックを冪等にする
付録 A: クイックスタートガイド
ステップ 1: Webhook エンドポイントを作成する
ステップ 2: 受信側を実装する
サービスに Webhook 受信エンドポイントを実装し、次を確実に行ってください:
- JSON ペイロードを解析し、
typeに応じてイベントを処理する - イベントの
idを使用して冪等な重複排除を行う - 受信確認として
200 OKを返す - ビジネスロジックを非同期に処理する(タイムアウトを回避するため)
ステップ 3: テストイベントを送信する
ステップ 4: 検証して本番稼働する
テストイベントが正しく受信されることを確認したら、本番運用を開始できます。
付録 B: ベストプラクティス
| プラクティス | 説明 |
|---|---|
| 冪等処理 | イベントの id を使用して重複排除を行い、重複処理を防ぐ |
| 高速応答 | 受信側は 5 秒以内に 2xx を返し、時間のかかる処理は非同期に実行する |
| 正確な購読 | 必要なイベントタイプのみを購読し、不要なネットワーク負荷を減らす |