SuperAPI AI 工具集

sendgrid-webhooks

通用与其它

查看项目

更新于 10-15 14:30

技能介绍

用途

SendGrid Webhooks 技能用于接收并验证 SendGrid 发送的邮件事件 Webhook。它适合在以下场景使用:搭建 SendGrid Webhook 处理器以跟踪邮件投递;调试 ECDSA 签名验证失败;处理邮件事件(bounce、delivered、open、click、spam report 等);实现邮件互动分析。

主要能力

该技能涵盖 SendGrid Webhook 的签名验证与事件处理。SendGrid 使用 ECDSA(椭圆曲线数字签名算法)配合公钥进行验证。技能提供了两种验证方式:

  1. 手动验证:使用 Node.js 的 crypto 模块,将 base64 签名解码,拼接 timestamp 与 payload 作为签名内容,创建 sha256 验证器,并在公钥缺少 PEM 头时自动补全,最后调用 verify 完成校验。
  2. 使用 SendGrid SDK:通过 @sendgrid/eventwebhook 的 EventWebhook 类,调用 verifySignature 方法传入公钥、请求体、签名和时间戳完成验证。

技能还给出了 Express 中间件的示例:使用 express.raw({ type: 'application/json' }) 获取原始请求体,从请求头 X-Twilio-Email-Event-Webhook-Signature 和 X-Twilio-Email-Event-Webhook-Timestamp 读取签名与时间戳,缺失时返回 400,验证失败时返回 400,验证通过后解析事件并返回 200。

常见事件类型

技能列出了 SendGrid 的常见事件及其用途:

  • processed:消息已接收并准备投递,用于跟踪邮件处理。
  • delivered:消息成功投递到收件人,用于投递确认。
  • bounce:消息被永久拒绝(包含 type='blocked' 表示被阻止的消息),用于更新联系人列表、处理失败。
  • deferred:临时投递失败,用于监控延迟。
  • open:收件人打开了邮件,用于互动跟踪。
  • click:收件人点击了链接,用于链接跟踪、CTR 分析。
  • spam report:邮件被标记为垃圾邮件,用于列表清理、发件人声誉。
  • unsubscribe:收件人取消订阅,用于更新订阅状态。
  • group unsubscribe:收件人取消订阅某个组,用于更新组订阅偏好。
  • group resubscribe:收件人重新订阅某个组,用于更新组订阅偏好。

使用方式

需要设置环境变量 SENDGRID_WEBHOOK_VERIFICATION_KEY,其值为 SendGrid Webhook 验证密钥(公钥),例如 "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE..."。

本地开发时,可使用 Hookdeck CLI 进行 Webhook 测试:

npx hookdeck-cli listen 3000 sendgrid --path /webhooks/sendgrid

该命令无需账号,提供本地隧道和用于检查请求的 Web UI。

适用场景

适用于需要接收 SendGrid 邮件事件并进行签名验证的后端服务,例如邮件投递跟踪、退信处理、互动分析、订阅状态更新等。技能提供了 Express、Next.js 和 FastAPI 的完整实现示例(位于 examples/ 目录)。

限制

资料未提供该技能的具体收费、价格、平台支持范围或性能效果等信息。签名验证依赖正确的公钥配置,若公钥格式缺少 PEM 头需手动补全。