継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

Pinpoint で送ったメールの開封データイベントをS3 に保存する

タダです.

Pinpoint でメールの配信をやっている中で,送った後のメールの開封状況とかを保管し,分析したいという要望からデータ収集の仕組みの検証をしたのでまとめていきます.

Pinpoint のメール開封イベントの収集

Pinpoint のメール開封イベントの収集は Kinesisに送信することが可能です.今回はドキュメントに沿って,Kinesis Data Streams にメール開封イベントを送信し,Kinesis Data Firehose -> S3 に保存するフローを作りました.なお,Firehose から S3 の連携部分は本記事の割愛します.

docs.aws.amazon.com

Pinpoint -> Kinesis Data Streams の設定

Pinpoint から Kinesis Data Streams の設定を有効化するところをみていきます.対象のプロジェクト>設定>イベントストリームの編集に画面遷移して設定します.Amazon Kinesis へのストリーミング にチェックを入れて,対象の Kinesis Data Stream と IAM ロールを指定すれば完了します.そのため,予め Kinesis Data Sreams を作成している必要があります.

f:id:sadayoshi_tada:20211009164008p:plain

IAM は次のような権限を与えればイベント送信ができます.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kinesis:PutRecords",
                "kinesis:DescribeStream"
            ],
            "Resource": [
                "arn:aws:kinesis:ap-northeast-1:xxx:stream/xxx"
            ]
        }
    ]
}

送信されてきたイベント

Pinpoint から送られてきたイベントの中身を見てみると次のようになってました.event_type開封のステータスがきていたり,

{"event_type":"_email.delivered","event_timestamp":1633673088121,"arrival_timestamp":1633673089905,"event_version":"3.1","application":{"app_id":"xxx","sdk":{}},"client":{"client_id":"xxx"},"device":{"platform":{}},"session":{},"attributes":{"feedback":"delivered","tags":null},"awsAccountId":"xxx","facets":{"email_channel":{"mail_event":{"mail":{"message_id":"xxx,"message_send_timestamp":1633673088121,"from_address":"test@exmaple.com","destination":["tada@xxx"],"headers_truncated":false,"headers":[{"name":"From","value":"test@exmaple.com"},{"name":"To","value":"tada@xxx"},{"name":"Subject","value":"test"},{"name":"MIME-Version","value":"1.0"},{"name":"Content-Type","value":"multipart/alternative;  boundary=\"xxx\""}],"common_headers":{"from":"test@exmaple.com","to":["tada@xxx"],"subject":"test"}},"delivery":{"smtp_response":"250 2.0.0 OK  xxx xxx.xxx - xxx","reporting_mta":"xxx.ap-northeast-1.amazonses.com","recipients":["tada@xxx"],"processing_time_millis":1784}}}}}
{"event_type":"_email.send","event_timestamp":1633673088121,"arrival_timestamp":1633673088273,"event_version":"3.1","application":{"app_id":"xxx","sdk":{}},"client":{"client_id":"xxx"},"device":{"platform":{}},"session":{},"attributes":{"feedback":"received","tags":null},"awsAccountId":"xxx","facets":{"email_channel":{"mail_event":{"mail":{"message_id":"xxx,"message_send_timestamp":1633673088121,"from_address":"test@exmaple.com","destination":["xxx@xxx"],"headers_truncated":false,"headers":[{"name":"From","value":"test@exmaple.com"},{"name":"To","value":"xxx@xxx"},{"name":"Subject","value":"test"},{"name":"MIME-Version","value":"1.0"},{"name":"Content-Type","value":"multipart/alternative;  boundary=\"xxx""}],"common_headers":{"from":"test@exmaple.com","to":["xxx@xxx"],"subject":"test"}},"send":{}}}}}
{"event_type":"_email.open","event_timestamp":1633673088121,"arrival_timestamp":1633673142677,"event_version":"3.1","application":{"app_id":"xxx","sdk":{}},"client":{"client_id":"xxx"},"device":{"platform":{}},"session":{},"attributes":{"feedback":"opened","tags":null},"awsAccountId":"xxx","facets":{"email_channel":{"mail_event":{"mail":{"message_id":"xxx,"message_send_timestamp":1633673088121,"from_address":"test@exmaple.com","destination":["tada@xxx"],"headers_truncated":false,"headers":[{"name":"From","value":"test@exmaple.com"},{"name":"To","value":"tada@xxx"},{"name":"Subject","value":"test"},{"name":"MIME-Version","value":"1.0"},{"name":"Content-Type","value":"multipart/alternative;  boundary=\"xxx\""},{"name":"Message-ID","value":"null"}],"common_headers":{"from":"test@exmaple.com","to":["tada@xxx"],"subject":"test"}},"open":{"ip_address":"xxx","user_agent":"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)"}}}}}

まとめ

Pinpoint から Kinesis Data Streams でメール開封イベントを取ることができました.S3 に保存しておけばデータを整形したり,集計もできると思うので,マーケティング分析したりしていけそうです.