Amazon Web Services ブログ

Amazon Pinpoint のイベントトリガージャーニーによるカート放棄の対策

この投稿では、 EC におけるショッピングカートの放棄(カゴ落ち)についてのユーザージャーニーを Amazon Pinpoint で構築する方法について説明します。ジャーニーとは、ユーザーに価値の高いアクションを推進することを目的とした、条件やロジックに基づいたチャネル送信( SMS 、 E メール、プッシュ)と複数のステップからなるユーザーエンゲージメントです。このジャーニーにより、ショッピングカートに商品を追加したが購入していないユーザーを特定し、メールでフォローアップしてご注文を完了するように促すことができます。この記事の例はユースケース特有のものですが、この手順を同じ様なユーザージャーニーに合わせて調節して利用することもできます。

ショッピングカート放棄のジャーニー

Baynard Institute によると、カートの平均放棄率は 69.57% です。これは、半数以上のユーザーが商品をカートに追加してもチェックアウトしないことを意味します。この指標の改善は収益に直接影響しますが、簡単に測定できます。測定することによって、マーケティング担当者はキャンペーンを通じて簡単に対応することができます。以前は、カート放棄やその他の重要なイベントにすぐに対応する方法がありませんでした。つまり、マーケティング担当者はカートを放棄したユーザのセグメントを毎日作成して案内を送信する必要がありました。この時点で、サイトの利用者は別の場所で商品を購入したり、製品やサービスへの関心を失っている可能性もあります。

ソリューションの概要

これから構築するソリューションは、 Amazon Pinpoint のイベント API を使用して、2 つのアプリケーションイベント ( AddToCartEvent , CartPurchasedEvent ) を送信します。これらのイベントは、 EC サイトのショッピングカートから Amazon Pinpoint へ送信される必要があります。EC サイトのカートへの実装については、この記事では対象外です。詳細については、 Amazon Pinpoint 開発者ガイドを参照してください。

Pinpoint Architecture

ECサイトの利用者がカートに商品を追加する時に、 AddToCartEvent を Amazon Pinpoint にレポートすることができます。後に利用者が購入を完了したときには、 CartPurchasedEvent をレポートできます。AddToCartEvent を受け取ってから 1 時間以内に CartPurchasedEvent が Amazon Pinpoint に報告されない場合、カート放棄対策のメールを利用者へ送信して、購入手続きを完了するよう促すことができます。
これらのイベントと、 Amazon Pinpoint のジャーニー機能を利用することで、ユーザー体験のオーケストレーションを実現できます。最初のイベント AddToCartEvent を使用して、ジャーニーをトリガーします。1 時間待ってから、2 番目のイベント CartPurchasedEvent を使用して、購入を完了した利用者を除外します。残りの利用者には、カートに戻って注文を完了するように促すメールが届きます。

ステップ 1:「カートに追加」と「購入」のカスタムイベントを作成する

このソリューションを設定する最初のステップは、2 つのカスタムイベントを作成して Amazon Pinpoint へレポートすることです。アプリケーション内のイベントをレポートする方法は複数あります。例として、AWS Lambda 関数内からPython 用 AWS SDK (Boto3) を使用してそれぞれのイベントを呼び出すサンプルコードを記載します。

Amazon Pinpoint の Event API は、イベントを登録 するのと同時にエンドポイントを更新することができます。次の例では、最初の API 呼び出しで、エンドポイントの属性 Cart をショッピングカートの中身で更新します。2 番目の例では、API 呼び出しがエンドポイントの属性 PurchasedYes フラグで更新します。

サンプルイベント:商品 HAT29.95ドル の価格でカートに追加

import boto3
import datetime
import time

client = boto3.client('pinpoint')
app_id = '[PINPOINT_PROJECT_ID]'
endpoint_id = '[ENDPOINT_ID]'
address = '[EMAIL_ADDRESS]'

def lambda_handler(event, context):
    
    response = client.put_events(
        ApplicationId = app_id,
        EventsRequest={
            'BatchItem': {
                endpoint_id: {
                    'Endpoint': {
                        'ChannelType': 'EMAIL',
                        'Address': address,
                        'Attributes': {
                            'Cart': ['Hat'],
                            'Purchased': ['No']
                        }
                    },
                    'Events':{
                        'cart-event-2': {
                            'Attributes':{
                                'AddedToCart': 'Hat'
                            },
                            'EventType': 'AddToCartEvent',
                            'Metrics': {
                                'price': 29.95
                            },
                            'Timestamp': datetime.datetime.fromtimestamp(time.time()).isoformat()
                        }
                    }
                }
            } 
        }
    )
    return response

サンプルイベント:カート購入済み

import boto3
import datetime
import time

client = boto3.client('pinpoint')
app_id = '[PINPOINT_PROJECT_ID]'
endpoint_id = '[ENDPOINT_ID]'
address = '[EMAIL_ADDRESS]'

def lambda_handler(event, context):
    
    response = client.put_events(
        ApplicationId = app_id,
        EventsRequest={
            'BatchItem': {
                endpoint_id: {
                    'Endpoint': {
                        'ChannelType': 'EMAIL',
                        'Address': address,
                        'Attributes': {
                            'Cart': ['Hat'],
                            'Purchased': ['Yes']
                        }
                    },
                    'Events':{
                        'cart-event-2': {
                            'Attributes':{
                                'Purchased': 'Yes'
                            },
                            'EventType': 'CartPurchasedEvent',
                            'Timestamp': datetime.datetime.fromtimestamp(time.time()).isoformat()
                        }
                    }
                }
            } 
        }
    )
    return response

注:この記事の残りのステップを完了するには、上記の両方のイベントを Amazon Pinpoint にレポートしておく必要があります。

ステップ 2:「購入済み( Made A Purchase )」動的セグメントを作成する

このソリューションの 2 番目のステップは、購入を行ったユーザーを除外する動的セグメントを作成することです。これを行う為に、エンドポイント属性 Purchased の、値が Yes であるユーザーを探します。

※訳注:同じ手順を試す場合にはAWSコンソール画面上部の[ Toggle UI ]ボタンで古いページを使用してください。

  1. Amazon Pinpoint コンソールでプロジェクトに移動し、次に [セグメント] に移動します。
  2. [セグメントを作成] を選択します。
  3. [セグメントを構築] を選択します。
  4. 名前フィールドに Made A Purchase という名前を入力します。
  5. セグメントグループ 1 のセグメントフィルターを設定します。
    1. [フィルターを追加] で [エンドポイントでフィルタリング] を選択します。
    2. [エンドポイント属性を選択] ドロップダウンで [Purchased] を選択します。
    3. 中央のドロップダウンで [である] が選択されていることを確認します。
    4. [値を選択] ドロップダウンで [Yes] を選択します。
  6. [セグメントを作成] をクリックして、最初の動的セグメントを作成します。このセグメントが複数のエンドポイントチャンネルをターゲットにしていることを強調するポップアップが表示されます。[了承しました] を選択します。

ステップ 3: 「カート放棄( Abandon Cart )」のジャーニーを作成する

最後のステップは、ジャーニーそのものをデザインすることです。

  1. Amazon Pinpoint コンソールでプロジェクトに移動し、次に[ジャーニー]に移動します。
  2. [ジャーニーを作成] を選択して、新しいジャーニーを作成します。
  3. タイトルのテキストボックスのデフォルト値の Untitled を置き換えて、ジャーニーに Abandon Cart という名前を付けます。
  4. ジャーニーエントリーを定義する
    1. [エントリ条件を設定] を選択して、[ジャーニーエントリー]アクティビティを展開します。
    2. [アクティビティの実行時に参加者を追加] を選択し、[イベント] フィールドで AddToCartEvent を入力します。
    3. [保存] を選択します
  5. 購入しなかったユーザーをターゲットにするブランチを作成する
    1. ジャーニーエントリーアクティビティのすぐ下にある [Add activity] を選択します
    2. [ジャーニーアクティビティを選択]で、[はい/いいえ分割]を選択します。
    3. [条件タイプを選択] で [セグメント] を選択します。
    4. [セグメント] で、前に作成した Made A Purchase 動的セグメントを選択します。
    5. [条件評価] で [次の後に評価] を選択し、[1 時間] を選択します。
    6. [保存] を選択します
  6. カートを放棄するメッセージを送信するメールアクティビティを追加する
    1. [No]の パスのすぐ下の [Add Activity] を選択します。
    2. [ジャーニーアクティビティを選択]で [ E メールを送信] を選択します。
    3. [ E メールテンプレートの選択] を選択し、メッセージングテンプレートを選択して、[テンプレートを選択] を選択します。
    4. [保存] を選択します。

この時点で、あなたのジャーニーは下のスクリーンショットのようになるはずです。[レビュー] を選択して、ジャーニーを公開するウォークスルーステップを実行できるようになりました。

Pinpoint Journey

次のステップ

このツールでコードを変更せずに顧客体験を繰り返し提供しながら改善し、最適なジャーニーを作成することができます。

  • ジャーニーエントリーの条件にイベント指標フィルターを追加することで、イベントを高額のカートアイテムだけに絞り込めます。
  • メールではなく SMS でユーザーにメッセージを送信して、さまざまなチャネルをテストできます。
  • ジャーニーに「分割」を追加して、ユーザーの優先チャネルにメッセージを送信できます。
  • 24 時間待ってから 10% 割引のクーポンコード付きの最終リマインダーを送信することができます。
  • 「ランダム分割」を追加して、さまざまなメッセージやチャネルの A/B テストを行います。

クリーンアップ

追加料金が発生しないように、ジャーニーを中止して取り消すには、以下の手順に従ってください。

  • Amazon Pinpoint コンソールでプロジェクトに移動し、次にジャーニーに移動します。
  • Abandon Cart ジャーニーを選択します。
  • [ジャーニーを停止] を選択し、確認画面で[ジャーニーの停止]を再度選択します。
  • ジャーニーを完全に削除するには、[アクション] メニューから [削除] を選択します。

まとめ

カートの放棄は、収益に直接影響を与える大きな問題です。このソリューションにより、利用者が重要なフローを離脱したことをサイトの管理者に知らせ、マーケティング担当者は手遅れになる前にメッセージングチャネルを通じてユーザーに再び関与することができます。ユーザージャーニーのさまざまなコンポーネントを A/B テストし、さまざまなユーザーセグメントをターゲットにすることで、さまざまなユーザー層から最高のリターンを引き出すこともできます。一度設定すればジャーニーは常時進行し、それだけでビジネスの収益を増やすことができます。

Amazon Pinpoint コンソールにログインして、ショッピングカート放棄対策のジャーニーの作成を始めましょう。

翻訳は Solutions Architect 多田が担当しました。原文はこちらです。