mcpField
S
sendgrid-webhooks

sendgrid-webhooks

github.com/hookdeck開発95253 回インストール今日更新
リポジトリ

sendgrid-webhooks について

sendgrid-webhooks は、SendGrid のメールイベントハンドラーを実装する開発者向けスキルです。ECDSA 検証とイベント処理を説明し、Express、Next.js、FastAPI の例を含みます。

主な機能

  1. 01SendGrid Webhook ハンドラーの手引き
  2. 02ECDSA 署名検証
  3. 03メール配信とエンゲージメントイベントの参照
  4. 04Express、Next.js、FastAPI の例
  5. 05Hookdeck CLI によるローカルテスト

活用シーン

  1. 01メール配信と遅延の追跡
  2. 02バウンス、配信停止、スパム報告の処理
  3. 03開封とリンククリックの分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/hookdeck/webhook-skills --skill sendgrid-webhooks

インストール後、Claude Code で/sendgrid-webhooksを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

TODO.md
examples/express/
.env.example
jest.config.js
package.json
README.md
examples/express/src/
index.js
examples/express/test/
webhook.test.js
examples/fastapi/
.env.example
main.py
README.md
requirements.txt
test_webhook.py
examples/nextjs/
.env.example
package.json
README.md
vitest.config.ts
examples/nextjs/app/webhooks/sendgrid/
route.ts
examples/nextjs/test/
webhook.test.ts
references/
overview.md
setup.md
verification.md

詳細

SendGrid Webhooks

このスキルを使用する場面

  • メール配信の追跡用にSendGridのWebhookハンドラーを設定する
  • ECDSA署名の検証失敗をデバッグする
  • メールイベント(バウンス、配信完了、開封、クリック、スパム報告)を処理する
  • メールエンゲージメント分析を実装する

必須コード

署名検証(手動)

SendGridでは、公開鍵検証にECDSA(楕円曲線デジタル署名アルゴリズム)を使用します。

// Node.js manual verification
const crypto = require('crypto');

function verifySignature(publicKey, payload, signature, timestamp) {
  // Decode the base64 signature
  const decodedSignature = Buffer.from(signature, 'base64');

  // Create the signed content
  const signedContent = timestamp + payload;

  // Create verifier
  const verifier = crypto.createVerify('sha256');
  verifier.update(signedContent);

  // Add PEM headers if not present
  let pemKey = publicKey;
  if (!pemKey.includes('BEGIN PUBLIC KEY')) {
    pemKey = `-----BEGIN PUBLIC KEY-----\n${publicKey}\n-----END PUBLIC KEY-----`;
  }

  // Verify the signature
  return verifier.verify(pemKey, decodedSignature);
}

// Express middleware
app.post('/webhooks/sendgrid', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');
  const timestamp = req.get('X-Twilio-Email-Event-Webhook-Timestamp');

  if (!signature || !timestamp) {
    return res.status(400).send('Missing signature headers');
  }

  const publicKey = process.env.SENDGRID_WEBHOOK_VERIFICATION_KEY;
  const payload = req.body.toString();

  if (!verifySignature(publicKey, payload, signature, timestamp)) {
    return res.status(400).send('Invalid signature');
  }

  // Process events
  const events = JSON.parse(payload);
  console.log(`Received ${events.length} events`);

  res.sendStatus(200);
});
SendGrid SDKを使用する
const { EventWebhook } = require('@sendgrid/eventwebhook');

const verifyWebhook = new EventWebhook();
const publicKey = process.env.SENDGRID_WEBHOOK_VERIFICATION_KEY;

app.post('/webhooks/sendgrid', express.raw({ type: 'application/json' }), (req, res) => {
  const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');
  const timestamp = req.get('X-Twilio-Email-Event-Webhook-Timestamp');

  const isValid = verifyWebhook.verifySignature(
    publicKey,
    req.body,
    signature,
    timestamp
  );

  if (!isValid) {
    return res.status(400).send('Invalid signature');
  }

  // Process webhook
  res.sendStatus(200);
});

一般的なイベントタイプ

イベント説明用途
processedメッセージを受信し、配信準備が完了した状態ですメール処理の追跡
deliveredメッセージが宛先に正常に配信されました配信確認
bounceメッセージが恒久的に拒否されました(ブロックされたメッセージの場合は type='blocked' が含まれます)連絡先リストの更新、配信失敗への対応
deferred一時的な配信失敗です遅延の監視
open受信者がメールを開封しましたエンゲージメントの追跡
click受信者がリンクをクリックしましたリンクの追跡、CTR分析
spam reportメールがスパムとして報告されましたリストの整理、送信者の評価の維持
unsubscribe受信者が登録を解除しました購読ステータスの更新
group unsubscribe受信者がグループの登録を解除しましたグループの購読設定の更新
group resubscribe受信者がグループに再登録しましたグループの購読設定の更新

環境変数

# Your SendGrid webhook verification key (public key)
SENDGRID_WEBHOOK_VERIFICATION_KEY="MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE..."

ローカル開発

ローカルでWebhookをテストするには、Hookdeck CLIを使用します。

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

アカウントは不要です。ローカルトンネルと、リクエストを確認できるWeb UIを利用できます。

リソース

  • overview.md - SendGrid Webhookの概要と一般的なイベントタイプ
  • setup.md - SendGridダッシュボードでWebhookを設定し、検証キーを取得する方法
  • verification.md - ECDSA署名検証の詳細と注意点
  • examples/ - Express、Next.js、FastAPI向けの完全な実装例

関連スキル

  • webhook-handler-patterns - 分野横断的なパターン(冪等性、再試行、フレームワーク別ガイド)
  • hookdeck-event-gateway - キューに代わるWebhookインフラストラクチャ。Webhookハンドラー向けに、配信保証、自動再試行、再生、レート制限、可観測性を提供します

コメント