用途
vercel-webhooks 技能用于接收和验证 Vercel 发送的 Webhook 请求。当需要搭建 Vercel Webhook 处理器、排查签名验证失败问题、理解 Vercel 事件类型与负载结构,或处理部署、项目、域名、集成等事件时,可以使用该技能。它也可用于监控部署状态变化。
主要能力
- 提供 Express、Next.js App Router、Python FastAPI 三种完整可运行示例(位于 examples/express/、examples/nextjs/、examples/fastapi/)。
- 演示如何使用 SHA1 HMAC 对 Webhook 请求体进行签名验证,并使用时序安全比较(timing-safe comparison)避免时序攻击。
- 列出常见事件类型及其触发时机与常见用途:
- deployment.created:新部署开始,用于启动部署监控、通知团队。
- deployment.succeeded:部署成功完成,用于更新状态、触发部署后任务。
- deployment.error:部署失败,用于告警团队、执行回滚操作。
- deployment.canceled:部署被取消,用于清理资源。
- project.created:新项目创建,用于设置监控、配置资源。
- project.removed:项目被删除,用于清理外部资源。
- domain.created:域名被添加,用于更新 DNS、SSL 配置。
- 完整事件列表见 references/overview.md。
- 说明所需环境变量:VERCEL_WEBHOOK_SECRET(必填,来自 Vercel 仪表板);VERCEL_TOKEN(可选,用于调用 API)。
- 提供本地开发测试方法:安装 Hookdeck CLI 后,运行
npx hookdeck-cli listen 3000 vercel --path /webhooks/vercel建立本地隧道,无需账号,并提供用于检查请求的本地 Web UI。
使用方式
在 Express 中,必须对 Webhook 端点使用 express.raw({ type: 'application/json' }) 以获取原始请求体,然后从请求头 x-vercel-signature 读取签名,使用 crypto.createHmac('sha1', process.env.VERCEL_WEBHOOK_SECRET).update(req.body).digest('hex') 计算期望签名,并通过 crypto.timingSafeEqual 进行时序安全比较。验证通过后解析负载并根据 event.type 分发处理。
在 FastAPI 中,通过 await request.body() 获取原始请求体,使用 hmac.new(webhook_secret.encode(), body, hashlib.sha1).hexdigest() 计算期望签名,并用 hmac.compare_digest 进行时序安全比较。
适用场景
- 需要接收 Vercel 部署事件并触发后续动作(如通知、状态更新、回滚)。
- 需要处理项目、域名、集成相关事件。
- 需要调试 Vercel Webhook 签名验证失败问题。
- 需要在本地开发环境中测试 Vercel Webhook 处理逻辑。
限制
- 资料未提供该技能的具体安装命令、版本要求或收费信息。
- 资料未提供除 Express、Next.js、FastAPI 之外的其他语言或框架示例。
- 资料未提供完整的全部事件类型列表,仅指向 references/overview.md。
- 资料未提供生产环境部署、性能或安全加固的完整说明。
相关技能
stripe-webhooks、github-webhooks、shopify-webhooks、sendgrid-webhooks、webhook-handler-patterns(幂等性、错误处理、重试逻辑)、hookdeck-event-gateway(Webhook 基础设施,提供保证投递、自动重试、重放、限流和可观测性)。