Amazon Pinpointでセグメントを構築してキャンペーンを送信する

2021.11.27

いわさです。

先日、Amazon Pinpointを使ったシンプルなSMS送信を行ってみました。

シンプルなSMS送信を行う場合、Amazon SNSでも実現出来ます。
また、Eメール送信を単体で行う場合はAmazon SESでも実現出来ます。

ただし、Pinpointではセグメントという顧客リストを作成し、キャンペーンという形で送信方法・内容・スケジュール・開封率などを管理することが出来ます。
また、マルチチャネルでの配信を一元管理出来るので、SMS・Eメール・プッシュ通知・アプリ内メッセージまでであればチャネルごとの作り込みは不要ですぐに使い始めることが可能です。
他にも、A/Bテストやテンプレート、ジャーニーなど様々なオンラインマーケティング機能を有しています。

SNSやSES単体では実現出来ない要件もPinpoint単体で実現出来る場合があります。
本日はPinpointの基本である、セグメントを構築とキャンペーン送信を行ってみたいと思います。

セグメント

セグメントとは、特定の属性や条件でフィルタリングされた顧客リストです。
キャンペーンは宛先に個別の単独のメールアドレスなどを指定するのではなく、セグメントを指定する必要があります。

セグメントには動的セグメントと静的セグメントがありますが、動的セグメントについてはまた次回取り扱いと思います。
こちらも非常に多機能です。
静的セグメントの場合はCSVファイルまたはJSONファイルをインポートしてリストを構築します。

CSVのフィールドには様々な属性を指定することが可能です。
ざっくりまとめると以下のような感じです。

属性 概要 カスタム
Address 宛先。電話番号やメールアドレス、トークンなど様々なものが混在
Attributes.xxx セグメント作成時に指定可能なカスタム属性
ChannelType 使用するチャネル(例:APNS, EMAIL, GCM, SMS)
Demographic.xxx エンドポイントのアプリやデバイスに関連する情報
Id 識別子
Location.xxx エンドポイントの地理的な情報
Metrics.xxx アプリから連携出来る数値情報のみのカスタムメトリクス。カートに残るアイテム数などの使い方が出来る
OptOut オプトアウト状態
User.UserAttributes.xxx ユーザーを示すカスタム属性
User.UserId ユーザーの一意の識別子

詳細はこちらを参照ください。
セグメントのインポート - Amazon Pinpoint

インポートファイルの条件は以下となっています。

  • UTF-8エンコード
  • AddressとChannelTypeは必須
  • 属性名は50文字以下、属性値は100文字以下
  • CSVの場合は最初の行はヘッダーで属性を定義
  • 値にカンマを含めたりやダブルクォーテーションで括る場合は、属性値をダブルクォーテーションで括る
  • CSVの値に改行はサポートされていない

マルチバイトについての言及がありませんでした、試したところマルチバイト文字列は属性名と属性値どちらも指定することが出来ました。
ただし、セグメントとして作成は出来たのですが、後述するキャンペーン送信時のテンプレートにマルチバイト文字列の「属性名」を埋め込むと不正な形式を示すエラーになったので、避けたほうが無難そうでした。
ただし、「属性値」はマルチバイト使っても問題ないのでご安心ください。

Address,ChannelType,User.UserAttributes.hoge
+81080xxxxxxxx,SMS,いわさ1
iwasa.takahito+1@hoge.jp,EMAIL,いわさ2
iwasa.takahito+2@hoge.jp,EMAIL,いわさ3

上記のような形式でインポートファイルをアップロードします。
なお、S3から取り込むことも可能です。

インポートしたセグメントはダウンロードすることが可能です。

Id,ChannelType,Address,EndpointStatus,OptOut,EffectiveDate,User.UserAttributes.Name,User.UserAttributes.hoge
cril6xkko+k0sryjuggcecji3l0,EMAIL,iwasa.takahito+2@hoge.jp,ACTIVE,NONE,2021-11-23T22:37:27.903Z,"",いわさ3
y2qvg22bomdlvzaqq/7o9h9y9gy,SMS,+81080xxxxxxxx,ACTIVE,NONE,2021-11-23T22:37:27.920Z,"",いわさ1
mlvbyuunnwpxbw75bw6eqhuktsk,EMAIL,iwasa.takahito+1@hoge.jp,ACTIVE,NONE,2021-11-23T22:37:27.954Z,"",いわさ2

一意に識別するためのIdOptOutEffectiveDateなど管理するための属性が追加されています。
また、不正なレコードはインポート対象から除外されます。

キャンペーン

セグメントで送信者リストを構築しました。
次は、キャンペーンで誰にどういうメッセージをいつ送信するのかを設定しましょう。

作成と送信

キャンペーンタイプは今回は標準キャンペーンを使用しますが、A/Bテストを行うことも可能です。
A/Bテストの場合は内容を違うものにするパターンか、同じ内容で異なる時刻に送信されるパターンを使って比較が可能です。

チャネルは1キャンペーンにつき1つを選択します。
今回は1つのセグメントに対して2つのキャンペーン(Eメール、SMS)を作成しました。
カスタムチャネルを使うと、サポートされていない外部サービスを使ったメッセージングが可能です。

Amazon Pinpointの新機能「カスタムチャネル」を使って配信処理をLambda Functionで行う | DevelopersIO

メッセージのテンプレートでは以下のように変数を使って属性値を埋め込むことが可能です。

ほげEメール
<br />
To: {{User.UserAttributes.hoge}}

また、実際の送信前にテスト送信も可能なので、テンプレートで変数を使うのであればテスト用セグメントを事前に用意しておくと良いと思います。

内容を決めたら、最後に送信スケジュールを決めます。
即時送信も可能ですし、スケジューリングされたワンショットなキャンペーン、あるいは定期的に自動で繰り返されるキャンペーンも実施することが可能です。

本日は即時送信してみます。
以下はEメールキャンペーンです。
3件のユーザーのうち2件に送信されましたね。
また、テンプレートにユーザー名を埋め込んだのですが、置換されていますね。

以下はSMSキャンペーンです。
3件のユーザーのうち1件に送信されました。

ちなみにSMSはHTMLは利用不可です。

測定

メールの場合、送信数/開封率/クリックなど確認が可能です。

仕組みとしてはAmazon SESと同じ仕組みでWebビーコンが埋め込まれています。

ほげEメール
<br />
To: いわさ2<img alt="" src="http://1fq2t9rs.r.ap-northeast-1.awstrack.me/I0/02060000cr15sj5p-ctecd00u-e7dv-odln-mgi9-6rlagv250kg0-000000/VxfxHSp8r3IeYkq3YGt268ka1J0=29" style="display: none; width: 1px; height: 1px;">

キャンペーンの測定については今度もう少し掘り下げみたいと思います。

まとめ

本日は、Amazon Pinpointのセグメントとキャンペーンを使って、EメールとSMSメッセージを一括送信してみました。
これらをSNSやSESを使って実現する場合、セグメント相当のデータを管理し、送信ロジックを実装する必要がありますが、Amazon Pinpointでは送信リストの取り込みからメッセージの作成、スケジューリング、送信後の状況確認までマネージドな機能で実現出来ます。

本日は紹介できませんでしたが、「ジャーニー」という機能があって、これがまた多機能ですごいので後日ご紹介出来ればと思います。