Webhook
尋ねたときではなく、起きたときに知らせます。
httpsエンドポイントを登録すれば、メールの受信、送信、バウンス、開封のたびに署名付きPOSTが届きます。
概要
メールのWebhookとは?
Webhookとは、何かが起きたときにサービスがあなたのURLへ送るHTTPリクエストです。コードはポーリングせずに反応できます。メールでは、受信、送信、バウンス、開封がそれにあたります。
20
購読できるイベント
10
メールボックスあたりのエンドポイント
5
イベントごとの最大試行回数
100
連続失敗でエンドポイントを無効化
仕組み
どの送信方法でも、同じイベント
エディタからの送信も、火曜日に予約した送信も、APIも、すべてemail.sentを発生させます。予約時にはまずemail.scheduledが発生します。
署名付き、検証はお手元で
すべてのPOSTには、タイムスタンプと生のボディのHMAC-SHA-256が付きます。届いたままのバイト列で検証し、300秒より古いものは拒否してください。
再試行は成功の見込みがあるときだけ
タイムアウト、408、425、429、5xxは、1分後、5分後、25分後、その後2時間後に再試行されます。それ以外の4xxは確定で、410はエンドポイントを停止します。
3系統、20種類のイベント
何も選ばなければ、email.replied以外のすべてのメッセージイベントを購読します。
配信を検証する
SDKはHMACを定数時間で照合し、5分より古い配信を拒否します。
import { verifyWebhookSignature } from '@openemail/sdk' export default async (request: Request) => { const event = await verifyWebhookSignature({ payload: await request.text(), headers: request.headers, secret: process.env.OPENEMAIL_WEBHOOK_SECRET! }) console.log(event.type, event.data) return new Response(null, { status: 204 })}できること
いま使える機能
5秒、並列で
エンドポイントは同時に呼び出されるので、10件でも5秒で済みます。
公開httpsのみ
プライベートやループバックのホストは拒否され、リダイレクトには従いません。
すべての試行を記録
それぞれ、サーバーの応答内容とかかった時間を確認できます。
上手な使い方
使いこなすために
- 01
先に応答、処理は後で
5秒以内に2xxを返し、時間のかかる処理はその後に行ってください。
- 02
重複したidは捨てる
処理したX-OpenEmail-Deliveryのidを保存し、重複はスキップしてください。
- 03
両方のシークレットでローテーション
ローテーションするとシークレットは即座に置き換わるため、デプロイが反映されるまでは新旧両方で検証してください。
質問
よくある質問
さらに見る