🕶️

AWSからSMS送信する際に考えるべきこと(Pinpoint vs SNS)

2023/11/12に公開

はじめに

AWSサービスからSMS送信する際の候補としては、Amazon PinpointとAmazon SNSがあります。
一見多機能に見えるPinpointを選定される方も多いと思いますが、"それ、SNSでもよくないですか?"っていうケースもたくさんあります。
本記事ではSMS送信するときにどちらのサービスを選ぶべきか整理してみましたので、参考にしていただければ幸いです。

忙しい人向けのまとめ

  1. 標準機能で分析する場合、できることはほとんど変わらないのでAmazon SNSでよい。どうしてもコンソールからグラフで見たい場合はAmazon Pinpoint
  2. 送信先顧客情報をリスト化したい。A/Bテストを実施したい。顧客のステータスに対して送付有無などを判定したい場合はAmazon Pinpoint
  3. SMS送信料金・電話番号料金は両者とも同じ料金である。また取得した電話番号はAmazon SNSとAmazon Pinpointで共有可能 ※日本の場合

分析機能にほとんど違いはない

Amazon Pinpointの場合

Amazon Pinpoint 分析に記載があるように、Amazon Pinpointには様々な分析機能があります。特にE メールの開封とクリックイベントの追跡なんてとても魅力的です。メッセージ送信だけでなく、その後の分析もAWSマネージドサービスでできるのであれば、構築がめちゃめちゃ簡単になりますし、この上ない喜びです。しかし、これらの機能はSMS送付の場合でも使用できるのでしょうか?
管理コンソールで見てもイマイチよくわからない。。。

トランザクションメッセージについてはプルダウンでSMSとEメールを選択できるので、SMSの分析もできることがわかりますね。

ここで上記ドキュメントを詳しく見てみるとこんなことが書いてあります。

分析データを Amazon Pinpoint の外部で分析または保存するには、データを Amazon Kinesis にストリーミングするか、データを Amazon Athena にストリ<ーミングするように Amazon Pinpoint を設定できます。

開封イベントおよびクリックイベントを表示するには、イベントストリーミングをセットアップする必要があります。イベントストリームの作成方法については、「イベントストリーム設定」を参照してください。

つまりPinpointが分析する為の元データとなるものはKinesis Data Streamsなどで取得できるみたいです。つまり、SMSの分析情報をこの機能で取得し、中身を確認すれば何ができるかわかりそうです。
SMSについて取得できる分析情報はSMS イベントに記載があります。
Eメールについて取得できる分析情報はE メールイベントに記載があります。
SMSとEメールで解析できる情報が違うことがわかります。少なくとも上記で冒頭で記載した、メッセージの開封率やクリックの追跡はできないみたいです。
データを一意に識別するためのIdなどを除くと、SMS分析に使えそうなの情報は主に以下、つまりSMSの成功/失敗、失敗した場合の原因あたりになると思います。

属性 説明
event_type イベントのタイプ
origination_phone_number メッセージの送信元の電話番号
destination_phone_number メッセージを送信しようとした電話番号
record_status メッセージのステータスに関する追加情報

実際、トランザクションメッセージンググラフに記載がある通り、エラーの発生状況や回数がグラフとして視覚化できるようです。ただし、成功/失敗を単純に可視化しているだけなので細かい分析はKinesisで取得したデータをAthena等で集計する必要があります。
Amazon Pinpoint 分析グラフリファレンスを見る限り、トランザクションメッセージのみ対応しており、プロモーションメッセージは非対応だと思われます。

※今回はエラーを実際に出せていないため、管理コンソールのスクショは空白になっています

Amazon SNSの場合

Amazon SNSの場合、以下の情報が分析に使えると思います。

  • (Lambdaで送信する場合)Lambdaの実行ログ
  • Amazon SNSのログ

それぞれ見ていきましょう

Lambdaの実行ログ

LambdaからAmazon SNSを使用してSMSを送付する場合、Amazon SNSのPublish APIを実行することになります。
Publishに詳細なリクエスト及びレスポンスの記載があります。
リクエストパラメータに送信元・送信先の電話番号が取れるほか、レスポンスでもエラーの内容が詳細に分類できるように設定可能であることがわかります。

Amazon SNSの配信ステータスログ

SMS 配信用の Amazon CloudWatch のメトリクスおよびログを表示するに記載がある通り、Amazon SNSのログをCloudWatch Logsで表示できる機能があります。
こちらを確認することで、SMSの送信ステータス及び失敗時の原因(電話番号がブロックされているのかなど)を確認することができます

あとはこれらのログをCloudWatch Logs Insightで集計すればPinpointと同様の分析ができますね

分析機能まとめ

  • 対象がトランザクションメッセージである かつ 単純な成功/失敗をグラフで見たいならPinpointを使用してコンソールを確認する方針で対応
  • 対象がプロモーションメッセージである、または失敗の原因分析を分析する要件がある・オリジナルのレポートを作成する必要がある場合はSNSで十分

Pinpointでないとできないこと

SMS送信において、Pinpointでできないことは主に以下の2つです。

  • セグメント
  • キャンペーン
  • ジャーニー

それぞれ機能を紹介していきます

セグメント

主にこんな機能があります。細かい機能を知りたい方はAmazon Pinpoint のセグメントを参照してください

  • オリジナルの顧客リストを作成することができる
  • 顧客リストのフォーマットやカラムはオリジナルでカスタマイズすることができる ※必須項目あり
  • アプリケーションなどと連携することでセグメントを動的に変更することができる。

特にセグメントをアプリケーション等を使用して動的に変動できるのが魅力的です。顧客リストを追加削除したり・ステータスを変更することができるので、後述するユースケースのようにターゲットを絞ったSMS送信が可能となります。

キャンペーン

主にこんな機能があります。細かい機能を知りたい方はAmazon Pinpoint のキャンペーンを参照してください

  • 事前に作成した顧客リスト(セグメント)に対してA/Bテストを行うことができる
  • 事前設定したスケジュール通りに自動でSMS送信を行うことができる

特に前者のA/BテストについてはClassmethodさんがAmazon Pinpointでセグメントを構築してキャンペーンを送信するとして紹介しているのでそちらを参照頂ければと思います。

ジャーニー

Pinpointの各種機能(Eメール・SMSなど)のワークフローを視覚的に管理することができます。
たとえば"Eメールが問題なく届いた顧客に対しては1ヶ月後に別のEメールを送付する"とか"Eメールを送付したが、開封しなかった顧客に対して後追いでSMSを送付する"といったワークフローを、コンソールで視覚的に確認しながら作成することができます。(Amazon Connectのコンタクトフロー作成画面やStepFunctionsのようなイメージ)
公式ドキュメントはAmazon Pinpoint のジャーニーに、
実際にやってみた際の挙動を紹介している記事はClassmethodさんがAmazon Pinpointのジャーニー機能を使ってみましたとして公開しているので参考にしてみてください

実際のユースケース

Pinpoint独自の機能を利用したユースケースとしてはAWSさんがAmazon Connect と Amazon Pinpoint による効果的なマルチチャネルコミュニケーションとして紹介しているような内容が考えられます。

ここでは概要を紹介します

  • S3に保存している顧客リスト(マスターデータ)をもとにPinpointによる送信対象のセグメントを作成
  • Lambdaがセグメントを読み取り、対象の顧客に対してAmazon Connectの自動通話を実施
  • 顧客が電話に出た/出ないに応じてLambdaがセグメントのステータスを更新(動的セグメント)
  • Pinpointのジャーニ機能を用いて、動的セグメントのステータスをもとにEメール・SMSを送付

当然A/Bテストとして顧客に送るメッセージを変更することができますし、送付タイミングも任意にスケジューリングすることができます。
これらをAmazon SNSで実行しようとするとLambdaやDynamoDB,StepFunctionsをカスタムで開発する必要がありますし、顧客データを扱う都合でセキュリティも慎重に検討する必要があります。
単純なSMSだけでなく、上記のようにワークフローを構築し、様々な機能と連携したい場合はPinpointに軍配が上がると思います。

SMS送信に関する料金は同じ

※2023年11月12日現在の情報です。
日本のリージョンからSMSを送付する場合、SMSを送付する為の料金は同じです(2023/11/12現在)
Amazon SNSのSMS料金は世界中の SMS 料金
Amazon PinpointのSMS料金はSMS テキストメッセージ
に記載があります。

また、Amazon SNSの場合でもAmazon Pinpointの場合でも電話番号を取得する画面はPinpointのコンソールである為、Amazon SNS用で取得したショートコードをAmazon Pinpointで使用することも可能です。

まとめ

pinpointは非常に魅力的なサービスである一方で、単純な分析機能であればAmazon SNSでも十分対応可能であることがわかって頂けたと思います。
サービス間で電話番号の共有もできるので、まずはAmazon SNSでスモールスタートして、コールセンター/モバイルアプリ等と連携した大規模なワークフローを構築する要件が発生してからPinpointの使用を検討する、で十分業務は回るのではないかと思っています。

Discussion