コンテンツにスキップ

Webhook

Webhook endpoint を使うと、外部システムからエージェントのイベントストリームにイベントを送信できます。各エージェントは複数の endpoint を持ち、異なる連携先に対応できます。

  1. エージェント設定 → Webhooks を開く
  2. 名前を入力(例: youtube-live, discord
  3. 認証モードを選択
  4. Create webhook をクリック

新しい webhook はテストモードで作成されます — 受信したペイロードはプレビュー用に保存されますが、イベントは作成されません。本番稼働前にデータ形式を確認できます。

生成される endpoint URL:

POST /api/ingest/webhook/<webhookId>

webhook がテストモードの場合:

  1. 外部アプリケーションから endpoint URL に実際のペイロードを送信
  2. webhook カードの マッピング設定 ダイアログを開く
  3. 受信したペイロードが ソースペイロード ドロップダウンに表示される(最新 10 件)
  4. ビジュアルマッピングエディターでフィールドをイベントプロパティにマッピング
  5. ライブプレビューでマッピング結果を確認
  6. 正式上線 をクリックして webhook を有効化 — 以降のペイロードがイベントとして作成される

テストモードは、イベントストリームを汚さずにマッピング設定を反復できる安全な環境を提供します。

マッピングダイアログには 2 つのモードがあります:

ビジュアルエディターは分割ビューを表示します:

  • 左パネル — ソースペイロード: 受信ペイロードの JSON ツリー。ターゲットフィールドにフォーカスした状態でフィールドをクリックすると、マッピング式が自動生成されます。
  • 右パネル — ターゲットフィールド: マッピングする 5 つのイベントフィールド:
フィールドキー必須デフォルトテンプレート
Platformplatformいいえ{{ payload.platform || 'webhook' }}
Elementelementいいえ{{ payload.username || 'external' }}
Event Typeevent_typeいいえ{{ payload.event_type || 'message' }}
Titletitleはい{{ payload.message }}
Payloadpayloadいいえ{{ payload }}

ターゲットフィールドの下に、選択中のテストペイロードを使ったライブプレビューが表示されます。

クリックでマッピング:

  1. ターゲットフィールドをクリックしてフォーカス
  2. 左の JSON ツリーでノードをクリック
  3. {{ payload.path.to.field }} 式が自動挿入される
  4. ライブプレビューが即座に更新

Raw エディタータブに切り替えて JSON を直接編集できます。マッピングは {{ payload.xxx }} テンプレート構文を使った JSON オブジェクトで記述します:

{
"platform": "{{ payload.platform || 'webhook' }}",
"element": "{{ payload.username || 'external' }}",
"event_type": "{{ payload.event_type || 'message' }}",
"title": "{{ payload.message }}",
"payload": "{{ payload }}"
}

タブ切り替え時に双方向で同期されます。

  • payload は受信 JSON ペイロードを指します
  • payload.path.to.field でネストされたフィールドにアクセス(オブジェクト・配列対応、例: payload.items.0.name
  • || チェーンでフォールバック値を指定
  • 'literal' はリテラル値
  • {{ payload }} はペイロード全体を渡します

マッピングは空でない title フィールドを生成する必要があります。生成されない場合、422 エラーで拒否されます。

モードセキュリティユースケース
openなしテスト、低リスクな内部ソース
api_keyヘッダー/クエリ/ボディの keykey を送信できるが署名できない連携先
secretkey ベースの検証本番推奨

api_keysecret モードでは、key は以下の順序で検出されます:

  1. Authorization: Bearer <key> ヘッダー
  2. X-Webhook-KeyX-API-KeyX-Webhook-Secret ヘッダー
  3. クエリパラメータ: keyapi_keysecrettoken
  4. JSON ボディフィールド: keyapi_keysecrettoken

カスタムヘッダーを設定できないソース(Social Stream Ninja など)でも、JSON ボディやクエリ文字列で key を渡せます。

テストモードでは、保存されるペイロードから認証関連フィールドが自動的に除去され、UI で認証情報が漏洩するのを防ぎます。デフォルトで以下のフィールドが除去されます:

keyapi_keysecrettokenpasswordauthorizationaccess_tokenrefresh_tokenbearer

webhook 設定で追加の除外フィールドを設定できます。ユーザー設定の除外はテストモードとアクティブモードの両方で適用されます。

webhook は 3 つのステータスのいずれかです:

ステータスバッジ動作
テストアンバーペイロードはプレビュー用に保存、イベントは作成されない
アクティブグリーンペイロードはマッピングされ events テーブルに書き込まれる
無効グレーendpoint はすべてのリクエストを 404 で拒否

利用可能な遷移:

  • テスト → 正式上線(アクティブ)または無効化
  • アクティブ → 一時停止(無効)またはテストモード(テスト)
  • 無効 → 有効化(アクティブ)

ローテーションは新しい endpoint ID と key を生成し、古いものを無効にします。key が漏洩した可能性がある場合に使用:

  1. endpoint カードの Rotate をクリック
  2. 新しい endpoint ID と key が生成される
  3. 古い endpoint は即座に無効化
  4. 送信システムを新しい URL/key で更新

削除された endpoint は即座に 404 を返し、イベントを受信できなくなります。

各 endpoint にはレート制限があります(デフォルト: 120 リクエスト/分)。超過すると 429 Rate limit exceeded が返されます。

Social Stream Ninja は 100 以上のプラットフォーム(YouTube、Twitch、TikTok など)のライブイベントを集約し、webhook に転送できます。

カスタムヘッダーなしでの設定

Section titled “カスタムヘッダーなしでの設定”

Social Stream Ninja はカスタム HTTP ヘッダーをサポートしない場合があります。JSON ボディに key を含む api_key モードを使用:

  1. api_key 認証モードで endpoint を作成
  2. 生成された key をコピー
  3. Social Stream Ninja で webhook URL を設定:
    https://your-domain/api/ingest/webhook/<webhookId>
  4. JSON ペイロードに key フィールドとして key を含める
{
"platform": "youtube",
"username": "alice",
"message": "hello from chat",
"event_type": "message",
"key": "your-api-key-here"
}
コードステータス説明
WEBHOOK_NOT_FOUND404endpoint が存在しないか、無効/削除済み
WEBHOOK_UNAUTHORIZED401key が未提供または無効
WEBHOOK_MAPPING_INVALID422マッピング結果が無効(例: title がない)
WEBHOOK_RATE_LIMITED429レート制限超過
WEBHOOK_INGEST_FAILED500予期しないサーバーエラー