コンテンツへスキップ
Integration

デプロイせずに Webhook をデバッグ: 10 秒で起動できる一時的な受信トレイ

| 5 min read

使い捨て Webhook URL を作成し、任意のサービスにその URL を指定し、すべてのペイロードを検査します。 トンネル、サーバー、Zapier アカウントはありません。

Notification bell with incoming data streams
Photo by Brett Jordan on Unsplash

支払いが成功したときに Stripe が何を送信するかを確認したいとします。 または、誰かがプル リクエストを開いたときに GitHub が送信するもの。 標準的なアプローチ: ローカルサーバーを起動し、ngrok をインストールし、トンネルを設定し、ターミナルウィンドウを開いたままにして、セッションが継続されることを望みます。 テストの途中で期限切れになることはありません。 さらに悪いことに、中途半端なハンドラーをステージングにデプロイし、待っている間にログを追跡します。

どちらのワークフローも、実際の質問が単純である場合、インフラストラクチャで時間を無駄にします: *ペイロードはどのようなものですか? *

Botoi の Webhook 受信箱は、受信ペイロードをキャプチャして 24 時間保存する使い捨て URL を提供します。 3 つの API 呼び出し。 アカウントもトンネルもサーバーもありません。

3ステップのワークフロー

  1. 受信箱を作成する 固有の受信 URL を取得するには
  2. Webhook ソースを指定する そのURLで
  3. ペイロードをリストする 届いたものを検査する

各ステップは単一です curl 指示。

ステップ 1: 受信トレイを作成する

curl -X POST https://api.botoi.com/v1/webhook/inbox/create

応答:

{
  "success": true,
  "data": {
    "inbox_id": "a1b2c3d4",
    "url": "https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/receive",
    "expires_in": 86400
  }
}

を保存します。 inbox_id そして url 価値観。 受信トレイは 24 時間 (86,400 秒) 存続し、その後 URL と保存されているすべてのペイロードが削除されます。

ステップ 2: Webhook を受信トレイに送信する

Webhook プロバイダーに次の場所を指定します。 url ステップ 1 から。受信トレイは任意の JSON 本文を受け入れます。

curl -X POST https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/receive \\
  -H "Content-Type: application/json" \\
  -d '{
    "event": "payment_intent.succeeded",
    "amount": 4999,
    "currency": "usd",
    "customer_email": "buyer@example.com"
  }'

応答:

{
  "success": true,
  "data": {
    "received": true,
    "payload_id": "e5f6g7h8"
  }
}

ステップ 3: ペイロードを検査する

curl -X POST https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/list

応答:

{
  "success": true,
  "data": {
    "inbox_id": "a1b2c3d4",
    "payloads": [
      {
        "id": "e5f6g7h8",
        "received_at": "2026-03-26T10:00:00Z",
        "body": {
          "event": "payment_intent.succeeded",
          "amount": 4999,
          "currency": "usd",
          "customer_email": "buyer@example.com"
        }
      }
    ],
    "count": 1
  }
}

すべてのペイロードはタイムスタンプと一意の ID とともに保存されます。 リストのエンドポイントは何度でも呼び出すことができます 24 時間以内に。

実際の例: Stripe Webhook のデバッグ

Stripe のテスト モードを使用すると、ダッシュボードからイベントをトリガーできます。 それらを受信するためにサーバーを立ち上げる代わりに、 Stripe で受信トレイの URL を指定します。

1. 受信箱を作成する

INBOX=\$(curl -s -X POST https://api.botoi.com/v1/webhook/inbox/create)
INBOX_ID=\$(echo \$INBOX | jq -r '.data.inbox_id')
INBOX_URL=\$(echo \$INBOX | jq -r '.data.url')
echo "Inbox URL: \$INBOX_URL"

2. URLをStripeに追加します

に行く Stripe ダッシュボード > 開発者 > Webhook。 「エンドポイントの追加」をクリックして、 INBOX_URL。 気になるイベントを選択し、 好き payment_intent.succeeded そして invoice.payment_failed

3. テスト イベントをトリガーする

Stripe ダッシュボードで [テスト Webhook を送信] をクリックします。 次に、到着したものを検査します。

curl -s -X POST "https://api.botoi.com/v1/webhook/inbox/\$INBOX_ID/list" | jq '.data.payloads'

これで、すべてのネストされたオブジェクト、フィールド名、タイプを含む、Stripe が送信する正確なペイロードが得られました。 これを使用すると、スキーマを推測するのではなく、自信を持ってハンドラーを作成できます。

実際の例: GitHub Webhook 統合のテスト

GitHub リポジトリ Webhook は次のようなイベントで起動します。 pushpull_request、 そして issues。 コードをローカルで実行せずにキャプチャする方法は次のとおりです。

1. 受信トレイを作成し、GitHub を設定する

# Create the inbox
INBOX=\$(curl -s -X POST https://api.botoi.com/v1/webhook/inbox/create)
INBOX_URL=\$(echo \$INBOX | jq -r '.data.url')
INBOX_ID=\$(echo \$INBOX | jq -r '.data.inbox_id')

# Add webhook to your repo via GitHub API
curl -X POST \\
  -H "Authorization: token \$GITHUB_TOKEN" \\
  -H "Content-Type: application/json" \\
  "https://api.github.com/repos/your-org/your-repo/hooks" \\
  -d "{
    \\"config\\": {
      \\"url\\": \\"\$INBOX_URL\\",
      \\"content_type\\": \\"json\\"
    },
    \\"events\\": [\\"pull_request\\"]
  }"

2. プル リクエストを開き、受信箱を確認します。

curl -s -X POST "https://api.botoi.com/v1/webhook/inbox/\$INBOX_ID/list" \\
  | jq '.data.payloads[0].body | {action, number: .pull_request.number, title: .pull_request.title}'

出力(例):

{
  "action": "opened",
  "number": 42,
  "title": "Add rate limiting to /api/orders"
}

次のようなフィールドを含む、GitHub が送信する正確な構造を確認できます。 actionsenderrepository、そして完全な pull_request 物体。 これは、GitHub のドキュメントを読んで、各イベント タイプにどのフィールドが設定されているかを推測するよりも高速です。

自動化: テスト スクリプト

この bash スクリプトは、受信トレイを作成し、テスト ペイロードを送信して取得し、ラウンド トリップを検証します。 名前を付けて保存 test-webhook.sh それを実行して、統合がエンドツーエンドで機能することを確認します。

#!/bin/bash
set -euo pipefail

API="https://api.botoi.com/v1/webhook/inbox"

echo "Creating inbox..."
INBOX=\$(curl -s -X POST "\$API/create")
INBOX_ID=\$(echo "\$INBOX" | jq -r '.data.inbox_id')
INBOX_URL=\$(echo "\$INBOX" | jq -r '.data.url')
echo "Inbox ID: \$INBOX_ID"
echo "Receive URL: \$INBOX_URL"

echo ""
echo "Sending test payload..."
SEND=\$(curl -s -X POST "\$INBOX_URL" \\
  -H "Content-Type: application/json" \\
  -d '{
    "event": "order.created",
    "order_id": "ord_98765",
    "total": 129.99,
    "items": [
      {"sku": "WIDGET-A", "qty": 2},
      {"sku": "GADGET-B", "qty": 1}
    ]
  }')

PAYLOAD_ID=\$(echo "\$SEND" | jq -r '.data.payload_id')
echo "Payload ID: \$PAYLOAD_ID"

echo ""
echo "Retrieving payloads..."
LIST=\$(curl -s -X POST "\$API/\$INBOX_ID/list")
COUNT=\$(echo "\$LIST" | jq -r '.data.count')

if [ "\$COUNT" -ge 1 ]; then
  echo "Success: \$COUNT payload(s) received"
  echo "\$LIST" | jq '.data.payloads[0].body'
else
  echo "Error: no payloads found"
  exit 1
fi

期待される出力:

Creating inbox...
Inbox ID: a1b2c3d4
Receive URL: https://api.botoi.com/v1/webhook/inbox/a1b2c3d4/receive

Sending test payload...
Payload ID: e5f6g7h8

Retrieving payloads...
Success: 1 payload(s) received
{
  "event": "order.created",
  "order_id": "ord_98765",
  "total": 129.99,
  "items": [
    {"sku": "WIDGET-A", "qty": 2},
    {"sku": "GADGET-B", "qty": 1}
  ]
}

比較: botoi 受信トレイと代替手段

特徴 ボトイ受信箱 ングロク webhook.site リクエストビン
セットアップ時間 1 つのカールコマンド CLI + 認証をインストールする ブラウザを開く ブラウザを開く
ローカルサーバーが必要です いいえ はい いいえ いいえ
アカウントが必要です いいえ はい (無料利用枠) いいえ(限定的) はい
プログラムによるアクセス 完全な API API(有料) API(有料) API(有料)
CI/CD フレンドリー はい; カール + jq 可能; 複雑な いいえ いいえ
TTL 24時間 セッションベース さまざま 48時間
プロセスは実行を継続します いいえ はい いいえ いいえ
無料 はい 限定 限定 いいえ

Botoi 受信トレイの主な利点は、すべてが API を通じて行われることです。 受信箱を作成したり、テストを送信したりできます ペイロードを取得し、ブラウザを開かずにシェル スクリプト、CI パイプライン、統合テスト内の結果を取得します。 またはバックグラウンドプロセスを生きたままにします。

これをいつ使用するか

  • 新しい Webhook プロバイダーを検討しています。 ハンドラー コードを作成する前に、実際のペイロードをキャプチャして理解する データの形状、フィールド名、およびエッジケース。
  • CI での統合テスト。 テスト スイートで受信トレイを起動し、Webhook をトリガーし、リストをポーリングします。 エンドポイントを取得し、ペイロードの内容をアサートします。
  • 壊れたハンドラーをデバッグしています。 実稼働 Webhook URL を受信トレイ URL と一時的に交換して、 障害の原因となる正確なペイロードをキャプチャします。
  • ペアプログラミングまたはデモ。 受信トレイ ID をチームメイトと共有します。 どちらもペイロードを送信でき、 さまざまなマシンからの結果を検査します。

受信トレイは設計上使い捨てです。 必要なときに作成し、セッションで使用し、期限切れにします。 クリーンアップも、エンドポイントの残留も、驚くような請求もありません。

FAQ

Webhook 受信トレイはどれくらいの期間存続しますか?
各受信トレイは 24 時間後に期限切れになります。 受信ボックス URL、受信したすべてのペイロード、メタデータは有効期限が切れると削除されます。 必要なときにいつでも新しい受信トレイを作成できます。
受信トレイを作成するには API キーが必要ですか?
いいえ。無料枠では、IP ベースのレート制限により、1 分あたり 5 リクエストの匿名アクセスが許可されます。 サインアップせずに数秒でテストを開始できます。
Webhook ペイロードにサイズ制限はありますか?
受信エンドポイントは、有効な JSON 本文を受け入れます。 標準の Cloudflare Workers リクエストサイズ制限が適用されます (ほとんどのプランでは 100 MB)。
これを非 JSON Webhook で使用できますか?
受信エンドポイントは JSON 本文を必要とします。 Webhook ソースがフォームエンコードされたデータまたは XML を送信する場合、ペイロードを受信ボックス URL に転送する前に、ペイロードを JSON に変換するための小さなプロキシが必要になります。
これはngrokとどう違うのですか?
ngrok は、実行中のローカル サーバーへのトンネルを作成します。 Botoi Webhook 受信箱は、後で取得できるようにペイロードを保存するホスト型エンドポイントです。 ローカル サーバーは必要なく、CLI をインストールしたり、プロセスを維持したりする必要はありません。

botoiで開発を始めよう

150以上のAPIエンドポイント。検索、テキスト処理、画像生成、開発者ユーティリティに対応。無料プラン、クレジットカード不要。