Event Webhook

SendGrid の Event Webhook は、SendGrid経由でメールを送信する際に発生するイベントを、指定したURLにPOSTすることができます。 このデータの用途は、配信停止アドレスの削除、迷惑メール報告への対応、エンゲージできなかった受信アドレスの判定、バウンスされたメールアドレスの特定、メールプログラムの高度な分析などです。ユニーク引数やカテゴリパラメータを使用して、動的なデータを挿入することができるため、あなたのメールのシャープでクリアなイメージを構築するのに役立ちます。

Webhookが送信するイベントを簡単に扱えるようにするため、いくつかのライブラリが存在します。Webhookライブラリを参照してください

セットアップ

Event Webhook をセットアップするには、SendGridにログインし、Mail Settingsページで Event Webhook をクリックします。”HTTP Post URL” に、イベントが発生したときSendGridからのPOSTを受け取るURLを設定してください。そして、WebサーバにPOSTしたいイベントのチェックボックスをONにしてください。 設定が済んだら Event Webhook Status を “ENABLED” に切り替えます。

また、Event WebhookはFilter Settingsエンドポイントを使ってセットアップすることもできます。

Event Webhook は HTTP のBasic認証をサポートしています。この認証を使用する場合は、Settings画面で、認証情報を含めたURLを HTTP Post URL に指定してください。

1
http(s)://username:password@domain/foo.php

Event Webhookはリダイレクトに対応していません。正しいURLを使用しない場合、POSTが失敗します。

暗号化されたPOSTを受信する場合、コールバックURLがTLS 1.2をサポートしている必要があります。

要求

1回のリクエストに複数のイベントがJSON配列として含まれた形で HTTP POST を受信します。POSTはHTTP Post URLに設定したURLに対して送信されます。

イベントは現状30秒毎またはバッチサイズが768KBに達するか、いずれか早いタイミングでPOSTされます。これはサーバごとのため、Webhook URLは毎秒数十回~数百回のPOSTを受信する場合があります。

イベントPOSTの例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[
  {
    "email":"john.doe@sendgrid.com",
    "timestamp": 1337197600,
    "smtp-id":"<4FB4041F.6080505@sendgrid.com>",
    "sg_event_id":"sendgrid_internal_event_id",
    "sg_message_id":"sendgrid_internal_message_id",
    "event": "processed"
  },
  {
    "email":"john.doe@sendgrid.com",
    "timestamp": 1337966815,
    "ip":"X.XX.XXX.XX",
    "sg_event_id":"sendgrid_internal_event_id",
    "url":"https://sendgrid.com",
    "sg_message_id":"sendgrid_internal_message_id",
    "useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
    "event":"click"
  },
  {
    "ip": "X.XX.XXX.XX",
    "sg_user_id": 123,
    "sg_event_id":"sendgrid_internal_event_id",
    "sg_message_id":"sendgrid_internal_message_id",
    "useragent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36",
    "event": "group_unsubscribe",
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337969592,
    "asm_group_id": 42
  }
]

Event Webhookの設定画面で 「Test Your Integration」 ボタンをクリックしてエンドポイントのテストをすることができます。SendGridはコールバックURLにテスト用のPOSTを送信します。

SendGridは、HTTPステータスコード 2xx が返されるのを待ちます。指定されたURLから 2xx 以外のコードが返された場合は、24時間リトライします。リトライキューの最大数は 100,000 です。キューが一杯になった場合は、古いリクエストから順に削除されます。リトライ期間内に送信されなかったイベントや、キューから削除されてしまったイベントは、そのまま失われてしまいます。

メールトラフィックが沢山のイベントを生成した場合、適切な設定が行われていなければ、受信データは簡単にWebサーバを過負荷状態にしてしまいます。無料のloader.ioで、エンドポイントの負荷テストをすることができます。

イベントの重複

Event WebhookによりPOSTされたデータのイベントは重複する可能性があります。

この重複イベントを処理もしくは保存する場合、sg_event_idを使用して各イベントを識別することを推奨します。sg_event_idは最大100文字のURLセーフな文字列であり、sg_event_idが存在する各イベントにおいてユニークです。

イベントタイプ

以下はSendGridにより生成されるイベントのリストです:

イベント 基準
Processed メッセージを受信し、メールの配信準備が整いました。
Dropped 次のような理由でメールがドロップされました。
  • 無効なSMTPAPIヘッダ
  • 迷惑メールコンテンツ(Spam Checker が有効な場合)
  • 配信停止されたメールアドレス
  • バウンスされたメールアドレス
  • 迷惑メール報告されたメールアドレス
  • 無効なメールアドレス
  • 宛先アドレス数が通数上限超過
Delivered メッセージが受信側メールサーバへ正常に配信されました。
Deferred 受信側メールサーバから一時的に拒否されました。
Bounce 受信側メールサーバが受信できない、もしくは受け入れませんでした。
Open 受信者がHTMLメールを開封しました。このイベントを受け取るには開封トラッキングを有効化する必要があります。
Click 受信者がメール内のリンクをクリックしました。このイベントを受け取るにはクリックトラッキングを有効化する必要があります。
Spam Report 受信者がメールを迷惑メールと判定しました。
Unsubscribe 受信者は「Opt Out of All Emails」リンク(配信停止管理リンクをクリックするとクリック可能)をクリックしました。このイベントを受け取るには配信停止トラッキングを有効化する必要があります。
Group Unsubscribe 受信者はリンクをクリックするかまたはプリファレンス画面からあるグループからのメールを配信停止にしました。このイベントを受け取るには配信停止トラッキングを有効化する必要があります。
Group Resubscribe 受信者はプリファレンス画面からあるグループからのメール配信を再開するよう設定変更しました。このイベントを受け取るには配信停止トラッキングを有効化する必要があります。

以下にメールが処理される中で各イベントがどこで発生するかを示します。:

配信系イベントのデフォルトパラメータ

配信系イベント(bounce、deferred、delivered、dropped、processed)では次のパラメータが送信されます。いくつかのイベントは追加のパラメータが含まれます。

引数 説明
event 次のいずれか:bounce、deferred、delivered、dropped、processed
email 宛先メールアドレス
timestamp UNIXタイムスタンプ
smtp-id システムによって付与されたメッセージID
ip メールの送信元IPアドレス
tls メール送信にTLSが使用されたか否か

エンゲージ系イベントのデフォルトパラメータ

エンゲージ系イベント(click、open、spamreport、unsubscribe)では次のパラメータが送信されます。いくつかのイベントは追加のパラメータが含まれます。

引数 説明
event 次のいずれか:click、open、spamreport、unsubscribe
email 宛先メールアドレス
timestamp UNIXタイムスタンプ
useragent イベントに関連するユーザエージェント。例:”Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36”
ip イベント発生の元となったIPアドレス
tls メール送信にTLSが使用されたか否か

ユニーク引数とカスタム引数

SendGridによって生成されるイベントにはユニーク引数またはカスタム引数を含めることができます。

ユニーク引数とカスタム引数の機能は同じです:ユニーク引数はSMTP APIまたはv2 Mail Sendでメール送信時に使用される一方、カスタム引数はv3 Mail Sendでメール送信時に使用されます。

ユニーク引数

SMTP APIまたはv2 Mail Sendエンドポイント経由でメール送信時にユニーク引数を受け取りたい場合は、X-SMTPAPIヘッダ(またはパラメータ)でunique_argsパラメータを使用してください。例えば、useridやメールのtemplateといったパラメータをアプリケーションで受信したい場合、こちらに記載された方法でX-SMTPAPIヘッダ(またはパラメータ)内で指定してください。

例えば、v2 Mail Sendエンドポイントでメール送信時にx-smtpapiパラメータに以下のようなユニーク引数を指定した場合:

1
2
3
4
5
6
{
  "unique_args": {
    "userid": "1123",
    "template": "welcome"
  }
}

Event WebhookでPOSTされるデータ内に同じユニーク引数が含まれます。

1
2
3
4
5
6
7
8
9
10
11
[
  {
    "sg_message_id":"sendgrid_internal_message_id",
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337966815,
    "event": "click",
    "url": "https://sendgrid.com",
    "userid": "1123",
    "template": "welcome"
  }
]

SendGridが定義する予約語(”event”や”email”など)をキーとしてユニーク引数を設定することができますが、この場合、Webhookの要求には設定したユニーク引数の値は設定されず、SendGridが設定するデフォルト値が設定されるため注意が必要です。

予約語をユニーク引数で使用したケース

1
2
3
4
5
6
7
8
9
10
//for this example, assume we're sending to john.doe@sendgrid.com
{
  "unique_args": {
    "customerAccountNumber": "55555",
    "activationAttempt": "1",
    "New Argument 1": "New Value 1",
    "email": "jane.doe@sendgrid.com",
    "event": "SendEmail"
  }
}

Webhookの要求

1
2
3
4
5
6
7
8
9
10
[
  {
    "event": "Processed",
    "timestamp":"123456789",
    "customerAccountNumber": "55555",
    "activationAttempt": "1",
    "New Argument 1": "New Value 1",
    "email": "john.doe@sendgrid.com"
  }
]

注:eventとemailは上書きされません。”event”と”email”はSendGridの予約語であるためです。

カスタム引数

v3 Mail Sendを使用して送信するメールに含まれるカスタム引数も同様にEvent Webhookのイベントに含まれます。

例えば、v3 Mail Sendエンドポイントのpersonalization内で次のようなカスタム引数を指定した場合:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
  "personalizations": [
    {
      "to": [
        {
          "email": "example@example.com"
        }
      ],
      "subject": "Hello, World!",
      "custom_args": {
        "userid": "1123"
      }
    }
  ],
  "from": {
    "email": "from_address@example.com"
  },
  "content": [
    {
      "type": "text/plain",
      "value": "Hello, World!"
    }
  ]
}

Event Webhookには次のようなデータが含まれます:

1
2
3
4
5
[
  {
    "userid": "1123"
  }
]

配信停止グループ

SMTP APIを通じてUnsubscribe Groups が設定された場合、Event Webhookで次のようなイベントが取得できます:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
  {
    "status":"5.0.0",
    "sg_event_id":"sendgrid_internal_event_id",
    "sg_message_id":"sendgrid_internal_message_id",
    "event":"bounce",
    "email":"email@example.com",
    "timestamp":1249948800,
    "smtp-id":"<original-smtp-id@domain.com>",
    "unique_arg_key":"unique_arg_value",
    "category":["category1", "category2"],
    "reason":"500 No Such User",
    "type":"bounce",
    "asm_group_id": 1
  }

カテゴリ

カテゴリについては、SendGridは送信されたものを返します。一つのカテゴリが配列として設定された場合、Event Webhookは配列として返します。一つのカテゴリが文字列として設定された場合、Event Webhookは文字列として返します。

SMTPAPIを通じてカテゴリが設定された場合、Event Webhookは次のような値が返されます:

カテゴリ文字列

一つのカテゴリを文字列として返します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
  {
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337966815,
    "category": "newuser",
    "event": "open"
  },
  {
    "email": "jane.doe@sendgrid.com",
    "timestamp": 1337966815,
    "category": "olduser",
    "event": "open"
  }
]

カテゴリ配列

複数のカテゴリを配列として返します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[
  {
    "email": "john.doe@sendgrid.com",
    "timestamp": 1337966815,
    "category": [
      "newuser",
      "transactional"
    ],
    "event": "open"
  },
  {
    "email": "jane.doe@sendgrid.com",
    "timestamp": 1337966815,
    "category": "olduser",
    "event": "open"
  }
]

次のPHPのサンプルはWebhookのリクエストを /tmp/log.txt に保存します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

$myFile = "tmp/log.txt";
$fh = fopen($myFile, 'a+') or die("can't open file");

if ($fh){
    $headers = apache_request_headers();
    $postdata = file_get_contents("php://input");

    foreach ($headers as $header => $value) {
    fwrite($fh, print_r("$header: $value \n", true));
}

fwrite($fh, print_r("$postdata \n", true));
fclose($fh);
}

echo "ok";
?>

IP Pools

IPプールを指定して送信した場合、Processedイベントで指定されたIPプールを確認することができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
    {
        "email": "john.doe@sendgrid.com",
        "smtp-id": "<14c583da911.2c36.1c804d@ismtpd-073>",
        "timestamp": 1427409578,
        "pool": {
            "name": "new_MY_test",
            "id": 210
        },
        "sg_event_id": "RHFZB1IrTD2Y9Q7bUdZxUw",
        "sg_message_id": "14c583da911.2c36.1c804d.filter-406.22375.55148AA99.0",
        "event": "processed"
    }
]

パラメータ詳細

以下にイベント種別ごとにPOSTされる可能性のある全てのパラメータについて示します。

SMTPAPIを利用してカテゴリやユニーク引数などを含むカスタムパラメータを追加することができます。ユニーク引数はそれぞれ分離されたPOSTパラメータとしてPOSTされます。以下に示されたカテゴリと似ていますが、独自の名称をセットすることができます。

以下に示すJSON文字列は実際には配列内の要素としてPOSTされてきます。各フィールドの順番は固定ではありません。

Bounce

event email status reason type category
bounce メッセージの宛先 ステータスコード。例:5.5.0 MTAが返したバウンスの理由 bounce/blocked/expired 設定したカテゴリ

bounce_classificationは、バウンスした理由を7つの分類(Invalid Address, Technical, Content, Reputation, Frequency/Volume, Mailbox Unavailable, Unclassified)に大別して表します。詳しくはこちらを参照してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "status":"5.0.0",
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "bounce_classification":"invalid",
  "event":"bounce",
  "email":"email@example.com",
  "timestamp":1249948800,
  "smtp-id":"<original-smtp-id@domain.com>",
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "asm_group_id": 1,
  "reason":"500 No Such User",
  "type":"bounce",
  "ip" : "127.0.0.1",
  "tls" : "1"
}

Click

event email url category
click メッセージの宛先 クリックされたURL 設定したカテゴリ

url_offsetは同じURLのリンクが複数ある場合、そのうちのどのリンクがクリックされたかを表します。indexは0から始まり、クリックされたリンクを識別できます。typeはリンクのタイプを示します。リンクのタイプはテキスト、HTML、もしくはヘッダなどを表します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "ip":"255.255.255.255",
  "useragent":"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53",
  "event":"click",
  "email":"email@example.com",
  "timestamp":1249948800,
  "url":"http://yourdomain.com/blog/news.html",
  "url_offset": {
    "index": 0,
    "type": "html"
  },
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "asm_group_id": 1
}

Deferred

event email response attempt category
deferred メッセージの宛先 MTAの応答 配信を試みた回数 設定したカテゴリ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "response":"400 Try again",
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "event":"deferred",
  "email":"email@example.com",
  "timestamp":1249948800,
  "smtp-id":"<original-smtp-id@domain.com>",
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "attempt":"10",
  "asm_group_id": 1,
  "ip" : "127.0.0.1",
  "tls" : "1"
}

Delivered

event email response category
delivered メッセージの宛先 MTAの応答 設定したカテゴリ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "response":"250 OK",
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "event":"delivered",
  "email":"email@example.com",
  "timestamp":1249948800,
  "smtp-id":"<original-smtp-id@domain.com>",
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "asm_group_id": 1,
  "ip" : "127.0.0.1",
  "tls" : "1"
}

Drop

event email reason category
dropped メッセージの宛先 ドロップの理由 設定したカテゴリ
1
2
3
4
5
6
7
8
9
10
11
{
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "email":"email@example.com",
  "timestamp":1249948800,
  "smtp-id":"<original-smtp-id@domain.com>",
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "reason":"Bounced Address",
  "event":"dropped"
}

Open

event email category
open メッセージの宛先 設定したカテゴリ

sg_machine_openは、発生したOpenイベントがAppleのメールプライバシー保護機能 (MPP)によるものかどうかを表します。MPPが有効な宛先に対する開封の場合にtrueとなり、それ以外の開封ではfalseとなります。

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "email":"email@example.com",
  "timestamp":1249948800,
  "ip":"255.255.255.255",
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "useragent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)",
  "event":"open",
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "asm_group_id": 1,
  "sg_machine_open": true
}

Processed

event email category
processed メッセージの宛先 設定したカテゴリ
1
2
3
4
5
6
7
8
9
10
11
12
{
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "email":"email@example.com",
  "timestamp":1249948800,
  "smtp-id":"<original-smtp-id@domain.com>",
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "event":"processed",
  "asm_group_id": 1,
  "send_at":1249949000
}

Spam Report

event email category
spamreport メッセージの宛先 設定したカテゴリ
1
2
3
4
5
6
7
8
9
10
{
  "sg_event_id":"sendgrid_internal_event_id",
  "sg_message_id":"sendgrid_internal_message_id",
  "email":"email@example.com",
  "timestamp":1249948800,
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "event":"spamreport",
  "asm_group_id": 1
}

Unsubscribe

event email category
unsubscribe メッセージの宛先 設定したカテゴリ
1
2
3
4
5
6
7
8
9
{
  "sg_message_id":"sendgrid_internal_message_id",
  "email":"email@example.com",
  "timestamp":1249948800,
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "event":"unsubscribe",
  "asm_group_id": 1
}

Group Unsubscribe

event email asm_group_id category
group_unsubscribe メッセージの宛先 配信停止されたASMグループのID 設定したカテゴリ
1
2
3
4
5
6
7
8
9
10
11
{
  "sg_message_id":"sendgrid_internal_message_id",
  "email":"email@example.com",
  "timestamp":1249948800,
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "event":"group_unsubscribe",
  "asm_group_id":1,
  "useragent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36",
  "ip":"255.255.255.255"
}

Group Resubscribe

event email asm_group_id category
group_resubscribe メッセージの宛先 配信再開するよう設定変更されたASMグループのID 設定したカテゴリ
1
2
3
4
5
6
7
8
9
10
11
{
  "sg_message_id":"sendgrid_internal_message_id",
  "email":"email@example.com",
  "timestamp":1249948800,
  "unique_arg_key":"unique_arg_value",
  "category":["category1", "category2"],
  "event":"group_resubscribe",
  "asm_group_id":1,
  "useragent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36",
  "ip":"255.255.255.255"
}

Marketing Campaigns

Marketing Campaign機能を通じて送信されたメールについては、Marketing Campaign特有のパラメータがイベントに追加されます。marketing_campaign_namemarketing_campaign_idはUnique Argsのように表示されます。

キャンペーン送信時の標準的(A/Bテスト機能を利用しない)なイベントデータの例:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  "category": [],
  "email": "email@example.com",
  "event": "processed",
  "marketing_campaign_id": 12345,
  "marketing_campaign_name": "campaign name",
  "post_type": "event",
  "sg_event_id": "sendgrid_internal_event_id",
  "sg_message_id": "sendgrid_internal_message_id",
  "sg_user_id": 12345,
  "smtp-id": "",
  "timestamp": 1442349428
}

A/Bテスト機能を利用した場合のイベントデータの例:

marketing_campaign_versionはA/Bテストの一部であることを示すためにイベントデータに含まれます。marketing_campaign_versionにはA, B, Cなどのような値が設定されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
  "category": [],
  "email": "tadpole_0010@stbase-018.sjc1.sendgrid.net",
  "event": "processed",
  "marketing_campaign_id": 23314,
  "marketing_campaign_name": "unique args ab",
  "marketing_campaign_version": "B",
  "marketing_campaign_split_id": 13471,
  "post_type": "event",
  "sg_event_id": "qNOzbkTuTNCdxa1eXEpnXg",
  "sg_message_id": "5lFl7Fr1Rjme_EyzNNB_5A.stfilter-015.5185.55F883172.0",
  "sg_user_id": 939115,
  "smtp-id": "<5lFl7Fr1Rjme_EyzNNB_5A@stismtpd-006.sjc1.sendgrid.net>",
  "timestamp": 1442349848
}

A/Bテスト機能でWinnerが決定した場合のイベントデータの例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
  "category": [],
  "email": "tadpole_0001@stbase-018.sjc1.sendgrid.net",
  "event": "delivered",
  "marketing_campaign_id": 23314,
  "marketing_campaign_name": "unique args ab",
  "post_type": "event",
  "response": "250 Ok ",
  "sg_event_id": "X2M1IUfMRhuAhWM0CbmFqQ",
  "sg_message_id": "fPJrJPIRTxC_obpgfTy74w.stfilter-015.5185.55F883564.0",
  "sg_user_id": 12345,
  "smtp-id": "",
  "timestamp": 1442349911
}

配信停止された場合のイベントデータの例:

マーケティングキャンペーン機能を通じて送信された場合、配信停止イベントは次のようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[
  {
    "email": "email@example.com",
    "event": "unsubscribe",
    "marketing_campaign_id": 12345,
    "marketing_campaign_name": "campaign name",
    "sg_event_id": "sendgrid_internal_event_id",
    "sg_message_id": "sendgrid_internal_message_id",
    "sg_user_id": 12345,
    "category": [
      "Tests",
      "Newsletter"
    ],
    "timestamp": 1612345670,
    "useragent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36",
    "ip":"255.255.255.255"
  }
]

トラブルシューティング

WebサーバがSendGridサーバに対してHTTPステータスコード 2xx を返していることを確認してください。それ以外のコードが返された場合、SendGridサーバはHTTPステータスコード 2xx が返されるか、上限時間が経過するまでPOSTし続けます。全てのイベントは、イベントが発生してから24時間リトライされます。 あなたのサーバにPOSTしようとしているSendGridのIPアドレスをブロックしてしまっていないか確認してください。なお、SendGrid はサーバを適宜増強していますので、IPアドレスの変更にご注意ください。

Event Webhook の 「Test Your Integration」 をクリックすることで、コールバックURLのテストを行うことができます。また、cURLを使って、シェルからPOSTすることもできます。

1
curl -X POST -H "Content-Type: application/json" -d '[{"email":"john.doe@sendgrid.com","timestamp":1337197600,"smtp-id":"<4FB4041F.6080505@sendgrid.com>","event":"processed"},{"email":"john.doe@sendgrid.com","timestamp":1337966815,"category":"newuser","event":"click","url":"https://sendgrid.com"},{"email":"john.doe@sendgrid.com","timestamp":1337969592,"smtp-id":"<20120525181309.C1A9B40405B3@Example-Mac.local>","event":"processed"}]'