无需部署即可调试 Webhook:可在 10 秒内启动的临时收件箱
创建一个一次性 Webhook URL,将任何服务指向它,并检查每个有效负载。 没有隧道,没有服务器,没有 Zapier 帐户。
您想查看付款成功时 Stripe 发送的内容。 或者当有人打开拉取请求时 GitHub 发送的内容。 标准方法:启动本地服务器,安装 ngrok,配置隧道,保持终端窗口打开,希望会话 不会在测试中过期。 或者更糟糕:在等待时将半完成的处理程序部署到暂存和尾部日志。
当真正的问题很简单时,这两种工作流程都会在基础设施上浪费时间:*有效负载是什么样的?*
Botoi 的 webhook 收件箱为您提供了一个一次性 URL,用于捕获传入的有效负载并将其存储 24 小时。 三个 API 调用。 没有帐户,没有隧道,没有服务器。
3步工作流程
- 创建收件箱 获取唯一的接收 URL
- 指向您的 webhook 源 在那个网址
- 列出有效负载 检查到达的物品
每个步骤都是一个单独的步骤 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 仪表板 > 开发人员 > Webhooks。
单击“添加端点”并粘贴 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 会在以下事件上触发: push, pull_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 发送的确切结构,包括类似字段 action,
sender, repository,以及完整的 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 inbox 与替代方案
| 特征 | 波托伊收件箱 | 恩格罗克 | webhook.site | 请求Bin |
|---|---|---|---|---|
| 设置时间 | 1个curl命令 | 安装 CLI + 身份验证 | 打开浏览器 | 打开浏览器 |
| 需要本地服务器 | 不 | 是的 | 不 | 不 |
| 需要帐户 | 不 | 是(免费套餐) | 没有(有限) | 是的 |
| 程序化访问 | 完整的API | API(付费) | API(付费) | API(付费) |
| CI/CD 友好 | 是的; 卷曲+jq | 可能的; 复杂的 | 不 | 不 |
| TTL | 24小时 | 基于会话 | 各不相同 | 48小时 |
| 进程保持运行 | 不 | 是的 | 不 | 不 |
| 自由的 | 是的 | 有限的 | 有限的 | 不 |
botoi 收件箱的主要优点是一切都通过 API 发生。 您可以创建收件箱,发送测试 有效负载,并在 shell 脚本、CI 管道和集成测试中检索结果,而无需打开浏览器 或保持后台进程处于活动状态。
何时使用这个
- 探索新的 webhook 提供程序。 在编写处理程序代码之前,捕获真实的有效负载以了解 数据形状、字段名称和边缘情况。
- CI 中的集成测试。 在测试套件中启动收件箱,触发 Webhook,轮询列表 端点,并对有效负载内容进行断言。
- 调试损坏的处理程序。 暂时将您的生产 Webhook URL 与收件箱 URL 交换为 捕获导致失败的确切有效负载。
- 结对编程或演示。 与队友共享收件箱 ID。 你们俩都可以发送有效负载并且 检查不同机器的结果。
收件箱设计为一次性的。 当您需要时创建一个,将其用于会话,然后让它过期。 无需清理,没有挥之不去的端点,没有意外的计费。
FAQ
- Webhook 收件箱可以持续多长时间?
- 每个收件箱将在 24 小时后过期。 收件箱 URL、所有收到的有效负载和元数据将在到期时删除。 每当您需要时创建一个新收件箱。
- 我需要 API 密钥来创建收件箱吗?
- 不需要。免费套餐允许每分钟 5 个请求的匿名访问,并具有基于 IP 的速率限制。 您无需注册即可在几秒钟内开始测试。
- Webhook 负载有大小限制吗?
- 接收端点接受任何有效的 JSON 正文。 标准 Cloudflare Workers 请求大小限制适用(大多数计划为 100 MB)。
- 我可以将其与非 JSON Webhook 一起使用吗?
- 接收端点需要一个 JSON 正文。 如果您的 Webhook 源发送表单编码数据或 XML,则您将需要一个小型代理来将有效负载转换为 JSON,然后再将其转发到收件箱 URL。
- 这与 ngrok 有什么不同?
- ngrok 创建到正在运行的本地服务器的隧道。 Botoi Webhook 收件箱是一个托管端点,用于存储负载以供您稍后检索。 无需本地服务器,无需安装 CLI,无需保持活动状态。
开始使用 botoi 构建
150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。