Amazon Web Services ブログ

Amazon Pinpoint で Push 通知のエンゲージメントメトリクスをトラッキング

このブログでは、Amazon Pinpoint の API を使い、キャンペーンとジャーニーの Push 通知のイベントをトラッキングし、属性値を管理する方法を学びます。

Amazon Pinpoint はマルチチャネルのカスタマーエンゲージメントプラットフォームで、6 つの異なるチャネルでカスタマーエンゲージを行うことができます。Amazon Pinpoint のPush 通知チャンネルは、Firebase Cloud Messaging (FCM)、 Apple Push Notification service (APNs)、Baidu Cloud Push、 Amazon Device Messaging (ADM) を経由してモバイルアプリユーザーにメッセージを送信することができます。

Push 通知は、ユーザーがアプリを使用していないときでも通知され、効果的をコミュニケーションが実現できるチャネルです。エンゲージメントを向上し、カスタマーが目的のコンバージョンに至るまでの確率を高めることができます。また、アプリをダウンロードし、まだ会員登録しないユーザーに対しても、ターゲットとしてメッセージを送信することができます。

Amazon Pinpoint のPush 通知チャネルを使用すると、厳選したコンテンツを配信でき、ユーザーのエンゲージメントを高めることができます。配信されるメッセージは、Amazon Pinpoint に保存されているカスタマーの情報、画像情報、ディープリンク、カスタムした通知音などを使い、パーソナライズすることができます (詳細はこちら)。Amazon Pinpoint のキャンペーンジャーニーは、マーケターなどの非エンジニアでも、配信スケジュールの管理やマルチチャネルの通知を行うことができます。また、デベロッパー向けには、メッセージの送信を制御するための豊富な API も提供しています。更にすべてのアカウントはデフォルトで 1 秒間に 25,000 メッセージを送信できるように設定されています。これは、クォータ引き上げのリクエストをすることも可能です。

カスタマーとのコミュニケーションの計測は、継続的にカスタマーエンゲージメントを最適化していくためにも非常に重要です。Amazon Pinpoint のプッシュ通知には、以下の3つのイベントがあります。

  • _opened_notification : このイベントタイプは、受信者が通知をタップして開いたことを示します。
  • _received_foreground : このイベントタイプは、受信者がフォアグラウンド通知としてメッセージを受信したことを示します。
  • received_background : このイベントタイプは、受信者がメッセージをバックグラウンドの通知として受信したことを示します。

モバイルアプリケーションから上記のイベントをトラッキングするには、AWS Amplify のPush 通知ライブラリを使用することをお勧めします(現在、React Native のみ利用可能です)。

ソリューションの説明

このブログでは、Amazon Pinpoint の Push 通知をトラッキングする際に、 AWS Amplify を使わずに実現する方法を紹介します。具体的には、Amazon Pinpoint の Event API オペレーションを利用します。これはカスタマーがモバイルやウェブアプリケーション上で生成したイベントを記録する際に利用できます。この API を使うことで Push 通知のエンゲージメントに関するイベントの記録に使用することもできます。

Events API のリクエストボディには、Push 通知のペイロード上のメタデータで受け取ったキャンペーンまたはジャーニーの属性情報が入力されます。これらの属性は、キャンペーンまたはジャーニーにイベントを正しく関連づけるために役立ちます。

このブログでは、キャンペーン、ジャーニー、トランザクションの Push 通知のペイロードの例と、Event API オペレーションに正しく入力する方法を紹介します。さらに、AWS Mobile SDK を使用してアプリケーションから Amazon Pinpoint API を安全に呼び出すためアプローチの概要も紹介します。

前提条件

このブログでは、キャンペーンまたはジャーニーを使用し、エンドポイントに正しく Push 通知を送信できるように設定された Amazon Pinpoint のプロジェクトが既にあることを前提としています。Amazon Pinpoint プロジェクトの設定方法については、「Amazon Pinpoint の開始方法」と「Amazon Pinpointモバイルプッシュチャンネルをセットアップする」を参照してください。

また、アプリのそれぞれのプラットフォーム用の AWS Mobile SDK が必要です。使用できるリポジトリは以下の通りです。

実装

アプリケーションから受信する Push 通知のペイロードは、キャンペーン、ジャーニー、トランザクションの各メッセージで異なります。このブログでは、キャンペーン、ジャーニー、トランザクションメッセージのペイロードの例と、Amazon Pinpoint に Push 通知のトラッキングデータを記録するために、 Amazon Pinpoint Events API リクエストボディに正しくデータを入力する方法について説明します。

プッシュ通知メッセージのペイロード例

キャンペーンのペイロードの例:

{
   "pinpoint.openApp":"true",
   "pinpoint.campaign.treatment_id":"0",
   "pinpoint.notification.title":"Message title",
   "pinpoint.notification.body":"Message body",
   "data":"{\"pinpoint\":{\"endpointId\":\"endpoint_id1\",\"userId\":\"user_id1\"}}",
   "pinpoint.campaign.campaign_id":"5befa9dc28b1430cb0469554789e3f99",
   "pinpoint.notification.silentPush":"0",
   "pinpoint.campaign.campaign_activity_id":"613f918c7a4440b69b09c4806d1a9357",
   "receivedAt":"1671009494989",
   "sentAt":"1671009495484"
}

ジャーニーのペイロードの例:

{
   "pinpoint.openApp":"true",
   "pinpoint.notification.title":"Message title",
   "pinpoint":{
      "journey":{
         "journey_activity_id":"ibcF4z9lsp",
         "journey_run_id":"5df6dd97f9154cb688afc0b41ab221c3",
         "journey_id":"dc893692ea9848faa76cceef197c5305"
      }
   },
   "pinpoint.notification.body":"Message body",
   "data":"{\"pinpoint\":{\"endpointId\":\"endpoint_id1\",\"userId\":\"user_id1\"}}",
   "pinpoint.notification.silentPush":"0"
}

トランザクションペイロードの例:

トランザクションのペイロードは、Push 通知トークンとエンドポイント ID に送信されるメッセージの両方が同じであることに注意してください。さらに、pinpoint.campaign.campaign_id は常に _DIRECT に設定されています。

{
"pinpoint.openApp":"true",
"pinpoint.notification.title":"Message title",
"pinpoint.notification.body":"Message body",
"pinpoint.campaign.campaign_id":"_DIRECT",
"pinpoint.notification.silentPush":"0",
"receivedAt":"1671731433375",
"sentAt":"1671731433565"
}

Push 通知イベントの記録

モバイルや Web アプリケーションからの Push 通知イベントを記録するために、AWS Mobile SDK または Amazon Pinpoint Events API を使用します。「ダブルカウント」のような不正確なメトリクスを防ぐために、適切な endpoint_id を使用することをお勧めします。以下では、Events REST API と put_events AWS Python SDK – Boto3 の両方の例を紹介しています。署名付きAWS APIリクエストの作成方法の詳細については、こちらのページをご覧ください。

REST API を使ったキャンペーンのイベントのリクエスト例:

必須項目: ApplicationId, endpoint_id, EventType, Timestamp, campaign_id, campaign_activity_id

POST https://pinpoint.us-east-1.amazonaws.com/v1/apps/<ApplicationId>/events

{
   "BatchItem":{
      "<endpoint_id>":{
         "Endpoint":{}
       },
      "Events":{
         "<event_id>":{
            "EventType":"_campaign.opened_notification",
            "Timestamp":"2022-12-14T09:50:00.000Z",
            "Attributes":{
               "treatment_id":"0",
               "campaign_id":"5befa9dc28b1430cb0469554789e3f99",
               "campaign_activity_id":"613f918c7a4440b69b09c4806d1a9357"
            }
         }
      }
   }
}

Python SDK を使ったキャンペーンのイベントの実装例:

必須項目: ApplicationId, endpoint_id, EventType, Timestamp, campaign_id, campaign_activity_id

import boto3 
client = boto3.client("pinpoint")
response = client.put_events(
  ApplicationId = <Pinpoint-App-id>,
  EventsRequest = { 
    "BatchItem": {
      "<endpoint_id>": {
        "Endpoint": {},
        "Events": { 
          "<event_id>": { 
            "EventType":"_campaign.opened_notification",
            "Timestamp": "2022-12-14T09:50:00.000Z",
            "Attributes": {
              "treatment_id":"0",
              "campaign_id":"5befa9dc28b1430cb0469554789e3f99",
              "campaign_activity_id":"613f918c7a4440b69b09c4806d1a9357"
            }
          }
        }
      }
    }
  }
)

REST API を使ったジャーニーのイベントのリクエスト例:

必須項目: ApplicationId, endpoint_id, EventType, Timestamp, journey_id, journey_activity_id

POST https://pinpoint.us-east-1.amazonaws.com/v1/apps/<ApplicationId>/events

{
   "BatchItem":{
      "<endpoint_id>":{
         "Endpoint":{}
      },
      "Events":{
         "<event_id>":{
            "EventType":"_journey.opened_notification",
            "Timestamp":"2022-12-14T09:50:00.000Z",
            "Attributes":{
               "journey_id":"dc893692ea9848faa76cceef197c5305",
               "journey_activity_id":"ibcF4z9lsp"
            }
         }
      }
   }
}

Python SDK を使ったジャーニーのイベントの実装例:

必須項目: ApplicationId, endpoint_id, EventType, Timestamp, journey_id, journey_activity_id

import boto3 
client = boto3.client("pinpoint")
response = client.put_events(
  ApplicationId = <Pinpoint-App-id>,
  EventsRequest = { 
    "BatchItem": {
      "<endpoint_id>": {
        "Endpoint": {},
        "Events": { 
          "<event_id>": { 
            "EventType":"_campaign.opened_notification",
            "Timestamp": "2022-12-14T09:50:00.000Z",
            "Attributes": {
              "treatment_id":"0",
              "campaign_id":"5befa9dc28b1430cb0469554789e3f99",
              "campaign_activity_id":"613f918c7a4440b69b09c4806d1a9357"
            }
          }
        }
      }
    }
  }
)

トランザクションのイベント:

Amazon Pinpoint は、トランザクションメッセージの Push 通知メトリクスはサポートしておらず、現時点では、トランザクションメッセージは、エンゲージメントイベントの属性に使用できるフィールドがありません。しかし、これらのエンゲージメントイベントは、Amazon Pinpoint の Event API を使用して記録し、イベントストリーミング を使用することで、保存と分析を行うことができます。

次のステップ:

Amazon Pinpoint Events API へのリクエストは、AWS Signature version 4 を使用して署名する必要があります。リクエスト署名を代行する AWS Mobile SDK の利用をお勧めします。一時的な限定特権のAmazon Cognito クレデンシャルで AWS Mobile SDK を使用することができます。詳細と例については、クレデンシャルの取得を参照してください。

この記事は、Push notification engagement metrics tracking を翻訳したものです。翻訳は Solutions Architect の中村 達也 が担当しました。