AWS Pinpointはカスタマーエンゲージメントを目的としたシステムの統合プラットフォームです。
メッセージ配信と分析でそれぞれ別のシステムを開発、連携することなく、全てをAmazon Pinpointに統合して管理、運用することができます。
開発者だけではなくマーケティング担当者の利用も想定しているため、分析結果をグラフィカルに表示する機能もついているのがすごいところですね。
とりあえずどんなもんなのかなーというのが気になったので、ちょろっと触ってみたという個人的なメモです。
簡単に実施できそうかなという理由でメール配信を行う場合を試してみます。
設定の大まかな流れはメール配信設定のチュートリアルに従って実施しますが、リソース作成はAWS CLIを利用して実施していきます。
AWS CLIは以下のバージョンを利用しています。
$ aws --version
aws-cli/2.0.48 Python/3.7.4 Darwin/19.6.0 exe/x86_64
プロジェクトの設定
まずは管理のベースとなるプロジェクトの設定を行います。
1. プロジェクトの作成
まずはプロジェクトを作ります。プロジェクト作成にはcreate-appを実行します。
$ json=$(cat << EOS
{
"CreateApplicationRequest": {
"Name":"<project_name>"
}
}
EOS
)
$ aws pinpoint create-app --cli-input-json "$json"
Nameがプロジェクト名です。以降の操作でApplicationId
を求められることがありますが、この場合はここで指定した名前ではなく自動的に割り当てられたIDの方を指定する形になります。
create-appに限らず、PinpointのCLIは--cli-input-json
オプションをつけることでJSON形式で設定値を渡すことができます。
--generate-cli-skeleton
オプションをつけることでリソースを作成せずに設定用JSONのスケルトンだけを出力することも可能です。
2. Emailチャネルの有効化
続いてメール配信が出来るようにEmailチャネルを有効化します。
有効化にはupdate-email-channelを実行します。
$ json=$(cat << EOS
{
"ApplicationId": "<project_id>",
"EmailChannelRequest": {
"Enabled": true,
"FromAddress": "<default_sender_address>",
"Identity": "arn:aws:ses:<region>:<account_id>:identity/<email_address_or_domain>"
}
}
EOS
)
$ aws pinpoint update-email-channel --cli-input-json "$json"
項目 | 型 | 用途 |
---|---|---|
Enabled | true / false | trueを設定するとEmailチャネルを有効化します。 |
FromAddress | string | メール送信時のデフォルト送信元アドレスを設定します。 |
Identity | string | メール送信時に利用するAmazon Simple Email ServiceのAmazon Resource Nameを設定します。identity/の後ろにドメインを指定した場合はそのドメインの任意のメールアドレスから送信可能です。 |
今回はお試しなのでIdentity
にはメールアドレスを設定しました。
FromAddress
に設定したメールアドレスには利用確認メールを送る必要があります。
裏側ではメール送信にAmazon Simple Email Service (SES)を使っているようで、SESの操作であるcreate-email-identityを実行して確認メールを送信できます。
$ aws sesv2 create-email-identity --email-identity <default_sender_address>
このメールに記載されているURLへアクセスすることで送信元アドレスとして利用可能になるようです。
また、Emailチャネルの場合、作成直後は不正使用から保護するためにサンドボックス環境としてセットアップされるようです。
https://docs.aws.amazon.com/pinpoint/latest/userguide/tutorials-send-an-email-upload-contacts.html
If this is your first time using Amazon Pinpoint, your account is in the sandbox. When your account is in the sandbox, you can only send email to verified identities.
この状態では検証済みメールアドレスのみ送受信が可能です。(テストメール送信機能を行う場合は任意のアドレスでも受信のみ可)
このサンドボックス環境もSESが持っている機能のようです。必要な手続きを行うことで本番運用環境へ移行できます。
Email送信の設定
メール送信を行うには以下を作成する必要があります。
- エンドポイント: 実際の送信先
- セグメント: まとめて通知する集団(複数のエンドポイントの集まり)
- メールテンプレート: 送信するメール内容のテンプレート
- キャンペーン: メール送信を行う単位
1. エンドポイントの作成
エンドポイントの作成にはupdate-endpointを実行します。
$ json=$(cat << EOS
{
"ApplicationId": "<project_id>",
"EndpointId": "<endpoint_name>",
"EndpointRequest": {
"Address": <recipient_address>,
"ChannelType": "EMAIL"
}
}
EOS
)
$ aws pinpoint update-endpoint --cli-input-json "$json"
ChannelTypeにEMAILを指定することで、このエンドポイントを利用した時はメールが使われるようになります。
たくさん作成するときはupdate-endpoints-batchを利用したり、S3にアップロードした設定ファイルを読み込んで作成する方法を選択した方が良さそうです。
2. セグメントの作成
セグメントの作成にはcreate-segmentを実行します。
$ json=$(cat << EOS
{
"ApplicationId": "<project_id>",
"WriteSegmentRequest": {
"Dimensions": {
"Demographic": {
"Channel": {
"DimensionType": "INCLUSIVE",
"Values": ["EMAIL"]
}
}
},
"Name": "<segment_name>"
}
}
EOS
)
$ aws pinpoint create-segment --cli-input-json "$json"
例としてChannelTypeがEMAILのエンドポイントを対象とするセグメントを作成します。
対象とするエンドポイントの条件を細かく設定したりセグメントのグルーピング設定を行うことでメール送信後により細かい分析ができるようになりそうですが、とりあえずシンプルなルールで作ってみます。
3. メールテンプレートの作成
メールテンプレートのの作成にはcreate-email-templateを実行します。
$ json=$(cat << EOS
{
"EmailTemplateRequest": {
"HtmlPart": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n</head>\n<body>\n<p>Hi!</p>\n<p style=\"color:red;\">This is sent from my first Amazon Pinpoint!</p>\n</body>\n</html>",
"Subject": "Hello, Amazon Pinpoint!",
"TemplateDescription": "My first template.",
"TextPart": "Hi! \nThis is sent in plain text from my first Amazon Pinpoint!"
},
"TemplateName": "<template_name>"
}
EOS
)
$ aws pinpoint create-email-template --cli-input-json "$json"
項目 | 型 | 用途 |
---|---|---|
HtmlPart | string | HTMLメールの本文を設定します。 |
Subject | string | メールのタイトルを設定します。 |
TemplateDescription | string | (任意)テンプレートの説明を設定します。 |
TextPart | string | (任意)テキストメールのみを受け付けている場合の本文を設定します。 |
TemplateName | string | テンプレート名を設定します。 |
以下のようなメールが送られる想定のテンプレートを作成してみました。
4. キャンペーンの作成
キャンペーンの作成にはcreate-campaignを実行します。
以下の例ではキャンペーンを作成したらすぐにメールを送信します。
$ json=$(cat << EOS
{
"ApplicationId": "<project_id>",
"WriteCampaignRequest": {
"Name": "<campaign-name>",
"Schedule": {
"IsLocalTime": false,
"StartTime": "IMMEDIATE",
"Timezone": "UTC"
},
"SegmentId": "<segment_id>",
"SegmentVersion": <segment_version>,
"TemplateConfiguration": {
"EmailTemplate": {
"Name": "<email_template_name>"
}
}
}
}
EOS
)
$ aws pinpoint create-campaign --cli-input-json "$json"
主な設定は以下です。
項目 | 型 | 用途 |
---|---|---|
Schedule.StartTime | string | キャンペーンの開始タイミングを設定します。IMMEDIATEを指定すると即時で実行されます。 |
SegmentId | string | 送信対象セグメントのIDを設定します。セグメントのIDはコンソール上から確認できる他、get-segmentsで一覧を取得することでも確認できます。 |
SegmentVersion | string | 送信対象セグメントのバージョンを設定します。 |
EmailTemplate.Name | string | 利用するメールテンプレート名を設定します。 |
設定するとセグメントに含まれるエンドポイント全てに対してメールが送信されます。
送信結果の確認
Amazon Pinpoint Console上からキャンペーンのメール送信結果を確認できます。
試しに2件送って1件だけ開封した結果が以下です。
送られてきたメールをみてみると、開封は本文に1×1pxのdisplay:noneなimageタグを埋め込むことで検知しているようです。
imageタグのsrcのURLにはメールヘッダのMessage-ID
を含んでいたので、それを元によしなに突合して……いるのかどうかまではわかりませんが、このURLへのアクセスでカウントしてくれているっぽいです。
開封確認の方法としてはよくある形式ですね。
メール開封率などの指標はget-campaign-date-range-kpiを実行して取得することも出来ます。
$ json=$(cat << EOS
{
"ApplicationId": "<project_id>",
"CampaignId": "<campaign_id>",
"KpiName": "email-open-rate",
"StartTime": "1970-01-01T00:00:00",
"EndTime": "1970-01-01T00:00:00"
}
EOS
)
$ aws pinpoint get-campaign-date-range-kpi --cli-input-json "$json"
KpiName
に取得したい指標を指定して取得する形です。設定可能な値は公式ドキュメントにまとまっています。
今回はエンドポイント等に細かい情報をまったく設定しなかったため単純なメール送信と結果確認だけでした。
ただ、適切に設定することでより柔軟にターゲットを指定してメールを送信したり、詳細な分析ができるものと思います。
また、設定次第でメールに記載されたリンクへ遷移した後のファネル分析も行えるようです。
自前で分析システムを構築しなくても分析が出来るのは1つのメリットかなと思いました。