Amazon Web Services ブログ

Amazon Pinpoint In-app messaging (アプリ内メッセージング) で、製品内のユーザー体験を動的にパーソナライズする

この記事は、Dynamically personalize your in-product user experience using Amazon Pinpoint in-app messaging を翻訳したものです。

現在、多くの企業が、EメールやSMSなどのチャネルを通じた製品外へのメッセージと、ユーザーがモバイルやウェブアプリケーション内にいるときに表示される製品内へのメッセージの整合性を保つことに苦労しています。企業がターゲットとなる顧客にあるメッセージをEメールで送ったとしても、顧客がアプリケーションにアクセスすると、違うメッセージが表示される場合があります。これでは顧客が混乱してしまい、割引商品の購入など価値の高い行動を起こす可能性を下げてしまいます。アプリケーションに特定のメッセージをハードコーディングすることで回避することもできますが、これでは開発チームの時間を消費してしまい、モバイルやウェブのクライアントを新しくリリースする必要もあり、導入が遅くなります。

Amazon Pinpoint In-app messaing (アプリ内メッセージング) により、開発者は初期実装の後にクライアント側のコードを更新することなく、ターゲットに対し製品内のメッセージを動的に表示することができます。これにより、マーケティング担当者などの非技術者でも、開発チームから独立して対象の顧客へメッセージングすることができ、アプリケーション体験を変更することができます。また、対象顧客への製品外のメッセージングと同様の内容を、製品内へメッセージングすることができます。これにより、一貫したユーザーへのメッセージングが作成され、顧客が価値の高い行動を実行する可能性を高めることができます。

このブログでは、In-app messaging のエンドポイント、セグメント、キャンペーンの作成方法について概説しています。次に、アプリ内でメッセージを取得し、メッセージの優先順位付けやメッセージの上限を制御するシンプルなロジックを実装し、目的のタイミングでメッセージを表示するためのイベントを取得する方法について説明しています。

ソリューションの概要

ある小売業者が、最近購入した金額が 500 ドル以上の全ての顧客に対し、アプリケーションを起動したときにプロモーションバナーを表示したいと仮定します。In-app messagingのチャネルを使用してこの体験を提供するには、 user.UserAttribute.lastPurchaseValue > 500 ドルで、顧客の動的セグメントを作成し、プロモーションを獲得するため行動喚起になるIn-app messagingのテンプレートを作成した後、キャンペーンを作成します。In-app messagingのキャンペーンは、 app_launch のイベントに基づき、上記で作成した動的セグメントに属する顧客に対してのみのトリガーされます。メッセージをレンダリングし、アプリ内のエンゲージメント情報のイベントを Amazon Pinpoint に送信するには、このブログの後のセクションで説明する設定を 1 度行うことで実現できます。Amazon Pinpoint のキャンペーンの分析ダッシュボードを使用して、さまざまなメトリクスで In-app messaging のキャンペーンのパフォーマンスをモニタリングします。

In-app messaging のチャネルを実装するには、ユースケースと要件によって異なる場合があります。顧客セグメント、メッセージテンプレート、およびキャンペーンの作成は、Amazon Pinpoint のコンソールを使用するか、プログラムで Amazon Pinpoint API を用いることができます。アプリ内でのメッセージの取得、レンダリング、エンゲージメントのイベント情報は、開発者自信で構築・管理する、もしくは AWS Amplify を使用することができます。

以下のセクションで、In-app messaging のチャネルの 7 つの構成要素と、それらがどのように連携して動作するかを紹介します。

  • ステップ 1 : アプリ内エンドポイントとセグメントの作成
  • ステップ 2 : アプリ内メッセージテンプレートの作成
  • ステップ 3 : アプリ内キャンペーンの作成
  • ステップ 4 : Amazon Pinpoint の顧客が利用可能なアプリ内のメッセージを参照
  • ステップ 5 : アプリ内のメッセージをレンダリング
  • ステップ 6 : アプリ内のイベントを記録
  • ステップ 7 : SessionCap、DailyCap、TotalCap を使用したアプリ内のメッセージ表示ロジック

前提条件

このブログ記事では、次の前提条件を満たす必要があります。

ステップ 1 : Amazon Pinpoint の顧客セグメントを作成する

Amazon Pinpoint では、ユーザーに 1 つ以上のエンドポイントを持たせることができます。エンドポイントは、メールアドレスや電話番号など、一意のアドレスを表します。他の Amazon Pinpoint のチャネルと同様に、Channel = IN_APP でエンドポイントを作成またはインポートする必要があります。ある顧客がアプリ内でメッセージを取得するには、その顧客の IN_APP 用のエンドポイント ID を使用する必要があります。Address はIn-app messagingでは必須フィールドではないため、空白のままでもかまいません。

  1. 下のテキストをコピーし、CSV形式で自身のコンピュータに保存します。
    Id,ChannelType,Address,User.UserId,OptOut
    111,IN_APP,123,userid1,NONE
  2. Amazon Pinpoint コンソールに移動
  3. In-app messagingのチャネルを設定する Amazon Pinpoint プロジェクトを選択
  4. [セグメント] のセクションに移動
  5. [セグメントをインポート] を選択
  6. [インポート方法] として [ユーザーのコンピュータからファイルをアップロード] を選択
  7. [ファイルを選択] を選択し、手順 1 で作成した CSV ファイルを指定
  8. [セグメントを作成] を選択
  9. AWS Cloudshell コンソールに移動し、ターミナルのロードまで待つ
  10. 次のコマンドの <Application id> を自身のAmazon PinpointのアプリケーションID に置き換える
    aws pinpoint get-endpoint --application-id <Application id> --endpoint-id 111
  11. ステップ 10 のコマンドを AWS CloudShell のターミナルに貼り付け、 Enter キーを押し実行。以下のような応答が表示される

ステップ 2 : In-app messagingのテンプレートを作成する

In-app messaging のメッセージテンプレートにはさまざまなフィールドがあり、その中にはヘッダーの配置などの定義済みの値から選択できるものもあれば、 メッセージなどのフリーテキスト形式のものもあります。最終的には、ヘッダー、メッセージ、画像、ボタン、カスタムデータを含むメッセージが作成されます。また、それらはすべてカスタマイズ可能です。In-app messagingのテンプレート作成中に、スマートフォン、タブレット、ブラウザでメッセージのプレビューを表示できます。このプレビューは、エンドユーザーのデバイスやレンダリング方法によって異なる可能性があるため、あくまでも参考として参照してください。

注意点 : In-app messaging のメッセージテンプレートは現在、パーソナライゼーションためのメッセージヘルパーをサポートしていませんが、Amazon Pinpoint の開発チームが検討している機能です。

  1. [メッセージテンプレート] に移動
  2. [テンプレートの作成] を選択し、チャネルは [アプリ内メッセージング] を選択
  3. テンプレート名に my_first_in-app_message_template と入力
  4. メッセージの要件に従って、セクションを完了
  5. [作成] を選択

ステップ 3 : In-app messaging のキャンペーンを作成する

キャンペーンは、特定のオーディエンスセグメントに働きかけるメッセージイニシアチブです。キャンペーンは、定義したスケジュールまたは顧客イベントに従って、カスタマイズされたメッセージを送信します。

  1. Amazon Pinpoint のプロジェクトに移動し、[キャンペーン] を選択し、[キャンペーンを作成] を選択
  2. キャンペーン名my_first_in-app_campaign と入力
  3. キャンペーンタイプ[標準キャンペーン]、チャネルは[アプリ内メッセージング]を選択
  4. 優先順位の設定は [非常に重要] を選択
    (この設定はチャネル固有のものであり、エンドポイントに対するアプリ内へのメッセージングの中で、最も重要なものを特定するのに役立ちます)
  5. [次へ] を選択し、ドロップダウンから [in-app-segment] を選択
    (これは、ステップ 1 : Amazon Pinpoint の顧客セグメントを作成する で作成したインポート済みセグメントである必要があります。セグメント推定では、 1 エンドポイント と表示されます)
  6. [次へ] を選択し、 my_first_in-app_message_template という名前のアプリ内メッセージテンプレートを選択し、[次へ] を選択
  7. 現在 Amazon Pinpoint のプロジェクトでイベントを記録していない場合は、 test_eventイベントトリガーとして入力します
    (In-app messaging のキャンペーンは、アプリ内のメッセージがいつ表示されるかを決めるイベントトリガーが必要です。イベント属性やメトリクスを追加して、より具体的に指定することができます。Amazon Pinpoint でイベントを記録する方法については、アプリケーションでのイベントのレポートをご覧ください。)
  8. キャンペーンの日付で [開始日日時] と [終了日時] を選択
    (公開時間から少なく 15 分後に開始する必要があります)
  9. 3つのキャンペーン設定の編集項目はすべて「10」と入力し、必要に応じて「プロジェクトレベルの設定を上書き」を選択
    キャンペーン設定を編集のセクションには、エンドポイントごとに表示されたセッションメッセージの最大数 (SessionCap)、エンドポイントの 1 日あたりの表示された日次メッセージの最大数 (DailyCap) 、エンドポイントごとの表示されたメッセージの最大数 (TotalCap) を指定するフィールドがあります。これらの値は、そのキャンペーンで顧客にアプリ内へのメッセージを表示できる回数の上限を、それぞれセッション、日ごと、合計数で指定します。また、設定した優先順位の設定イベントトリガー上限は、Amazon Pinpointの In-app messages REST API operation を呼び出したときに受け取るメッセージのペイロードの一部になります。この情報を使用して、アプリ内へのメッセージをレンダリングするかどうかを決定します)
  10. [次へ] を選択し、下にスクロールして [キャンペーンを起動] を選択

ステップ 4 : Amazon Pinpoint を利用するアプリで In-app messaging のメッセージを取得

Amazon Pinpoint を利用するアプリ内でメッセージを取得するには、そのユーザーのIN_APPチャネルのエンドポイントIDを取得した後、 In-app messages REST API operationを用いるか 、Amazon Pinpointをサポートする AWS SDKsAWS Command Line Interface もしくは AWS Amplify のいずれか方法を用います。

注意点 : AWS Amplifyはアプリ内メッセージのリクエスト、レンダリング、トラッキングの機能を用意しています。したがって、Amazon Pinpointの In-app messaging チャンネルにAWS Amplifyを使用している場合、以下の手順は必要ありません。

リクエストボディには、チャネルが IN_APP のエンドポイントIDを指定する必要があります。そのエンドポイントIDに対して利用可能なアプリ内へのメッセージがある場合、レスポンスには、優先順位に基づいた上位10個のアクティブなアプリ内へのメッセージが入ったJSONオブジェクトが含まれます(In-app messagingのメッセージのレスポンスが10個というのはハードリミットです)。ループ処理で、メッセージの中からイベントトリガー優先順位に基づく条件を満たす内容を特定します。

  1. AWS CloudShell コンソールに移動
  2. 次のコマンドの<Application id> を自身のAmazon Pinpoint にあるアプリケーション ID に置き換え
    aws pinpoint get-in-app-messages --application-id <Application id> --endpoint-id 111
  3. ステップ 2 のコマンドを AWS CloudShell のターミナルに貼り付け、 Enter キーを押し実行。以下のような応答が表示される

レスポンスには In-app messaging のキャンペーンが 1 つだけあるはずです。In-app messaging のテンプレート情報とキャンペーンの設定がすべてレスポンスに表示されていることが確認できます。

注意点 : 終了日を過ぎたキャンペーンや、その日または合計数の上限値に達したキャンペーンは、レスポンスに表示されません。レスポンスに同じ優先順位の複数のアプリ内メッセージが含まれ、両方とも上限を超えていない場合、In-app messaging のキャンペーンの開始日を使い、どちらを表示するか判断することができます。

アプリ内へのメッセージは1セッションにつき 1 回取得し、ローカルに保存することをお勧めします。そうすれば、顧客がモバイルやウェブアプリでトリガーしたすべてのイベントで、Amazon Pinpointへ追加でリクエストせずに、ローカルに保存されたアプリ内へのメッセージと照合することができます。この方法は、リクエストごとに支払うコストにおいて、In-app messaging のチャネルのコストを削減できます。

Amazon Pinpoint を利用するアプリ内でメッセージを取得する処理は、クライアントサイドまたはサーバーサイドのいずれかで実行できます。サーバーサイドは、下の図のようなアーキテクチャで実装することができ、 Amazon API GatewayAWS Lambda を用いて、開発フレームワークに依存しないアプローチを実現しています。さらに、Amazon API Gatewayは、非常に多様な 認証と認可の仕組み を提供しています。

下記のサーバーサイドアーキテクチャは、オフラインの顧客に対するユースケースをカバーしていません。もしこのケースが必要な場合、アプリ内でメッセージ情報を保存し、デバイスがインターネットに接続されていないときはローカルで取得することをお勧めします。デバイスがインターネットに接続された後、関連するアプリ内へのイベントをさかのぼって送信することができます。

注意点 : AWS Amplify を使用している場合、デバイスがオンラインに戻った時、オフラインで発生したイベントの配信が再試行されます。

ステップ 5 : アプリ内へメッセージをレンダリングする

in-app message API に基づいてアプリ内へのメッセージをメッセージをレンダリングするか、 AWS Amplify を用いてレンダリングをします。AWS Amplifyでは、Amplifyが提供するデフォルトのUIをオーバーライドして、 独自のUIコンポーネントでアプリ内へのメッセージングを配信する ことができます。

ステップ 6 : アプリ内のイベントを記録する

In-app messaging のキャンペーンの結果計測は、次の 4 つの指標に基づきます。

  • メッセージ表示 : エンドユーザに対してメッセージが表示されたこと
  • メッセージの破棄 : ユーザーがメッセージ破棄したこと
  • メッセージのクリック : ユーザーがメッセージをクリックしたこと
  • 任意のイベントタイプ : モバイルまたはウェブアプリでユーザーがトリガーできるすべてのイベント

これらのイベントを正しく In-app messaging のキャンペーンと関連づけるには、EventType に加えて、他のフィールドがいくつか必要です。リクエストするペイロードの event attributes のオブジェクト 内で、campaign_iddelivery_type のフィールドを指定する必要があります。campaign_idInApp campaign_id と一致する必要があり、delivery_typeIN_APP_MESSAGE である必要があります。さらに、treatment_id は、A/Bテストを実行している場合に必要です。

以下のコード例では、 AWS Python SDK Boto3 とAmazon Pinpoint の put_events のオペレーションを使用してカスタムイベントに記録しています。このコードスニペットでは、application_id(PinpointのプロジェクトID)、endpoind_id(対象のエンドポイントID)、campaign_id(対象のキャンペーンID)、EventType(イベント名、上記のEventTypeの名前を参照)のプレースホルダーを含めています。このコードをAWS Lambda関数に貼り付けて、適切なIAMポリシーでアプリ内イベントを記録することができます。また、AWS CLI の put_events を使用してアプリ内のイベントを記録することもできます。

import boto3
import datetime
import time
application_id = '<enter Amazon Pinpoint project id>'
endpoint_id = '<enter the in-app endpoint id>'
client = boto3.client('pinpoint')

def lambda_handler(event, context):
    response = client.put_events(
        ApplicationId = application_id,
            EventsRequest={
                'BatchItem': {
                    endpoint_id: {
                        'Endpoint': {
                        },
                        'Events':{
                            'Event': {
                                'Attributes':{
                                    # Event attributes
                                    'campaign_id': '<enter the in-app campaign id>',
                                    'delivery_type': 'IN_APP_MESSAGE'
                                },
                                'EventType': '<enter the event name> ', #Type here the event name
                                'Timestamp': datetime.datetime.fromtimestamp(time.time()).isoformat()
                            }
                        }
                    }
                } 
            }
        )
    print(response)

注意点 : 上記のイベントの名前と属性を使用しない場合、Amazon Pinpoint コンソールの [キャンペーン配信メトリックス] と [キャンペーンエンゲージメント率] にイベントは表示されません。

ステップ 7 : SessionCap、DailyCap、および TotalCap を使用したアプリ内へのメッセージ表示ロジック

メッセージ表示ロジックとは、ユーザーがアプリ内へのメッセージを見た回数や、やりとりした回数を保存し、評価するロジックを指します。Amazon Pinpoint の DailyCapTotalCap_inapp.message_displayed のイベントを記録するか、AWS Amplify を使用した場合に限り、計算されます。SessionCap のイベントについては、AWS Amplifyを使用していない場合、モバイルまたはウェブアプリケーションのローカル上で表示される _inapp.message_displayed をカウントする必要があります。

注意点 : Amazon Pinpointのアプリ内へのメッセージ情報を取得する場合、ペイロードにはメッセージの日ごとと、合計の残り表示可能回数が含まれます。

まとめ

この記事では、顧客がモバイル、ウェブアプリケーションで情報を見る際、 Amazon Pinpoint を用いて、アプリ内へメッセージを送信するための、設定方法について説明しました。この Amazon Pinpoint のチャネルを使用すると、次のことが可能になります。

  • In-app messaging のセグメント、メッセージテンプレート、キャンペーンの作成
  • ユーザーごとのアプリ内でメッセージを取得
  • アプリ内でメッセージをレンダリング
  • アプリ内での顧客エンゲージメントデータを記録

関連リンク

このソリューションに使用されている技術や機能の詳細については、以下のページを参照してください。

本記事の翻訳はソリューションアーキテクトの 中村 達也 が担当しました。原文はこちらをご覧ください。