メインコンテンツへスキップ
見出し画像
Photo byebks

【第588回】Personalization:Sitemap Builder で Event を紐付ける

    Nobuyuki Watanabe

    前回の記事では、Salesforce Personalization の Sitemap Builder で Event を設定しました。

    TrailNest では、

    • Product View
      → Product Detail の表示

    • Add to Cart
      → 商品を Cart に追加

    • Customer Confirm Email
      → 確認された Email Address を取得

    • Customer Identification
      → 確認された Customer ID を取得

    • Purchase
      → 注文完了

    の 5 つを作成しました。

    ただし、Event を作成しただけでは、まだ実際の Web サイト上では送信されません。

    前回までに、

    何を Event として送信するのか

    を定義したので、今回は、

    いつ、その Event を送信するのか

    を設定していきます。

    そのために、今回の記事では、再び Page Types タブへ戻ります。


    Personalization 基礎シリーズ

    Sitemap Builder シリーズ

    Data 360 設定シリーズ

    Personalization 設定シリーズ


    Page Type と Event を紐付ける

    Page Type には、Event を発火させるための主な設定として、

    • ① On Page Load Interaction

    • ② Listeners

    があります。

    この 2 つは、Event が発生するタイミングが異なります。


    ① On Page Load Interaction

    On Page Load Interaction は、その Page Type が表示されたときに送信する Event を設定します。

    Salesforce Interactions SDK の Sitemap では、Page Type が Match すると、その Page Config に設定されている interaction が Page Load に伴う Interaction として送信されます。

    例えば、

    Product Detail が表示された
    ↓
    Product View を送信

    という使い方です。


    ② Listeners

    一方、Listeners は、Web ページ上で発生するユーザー操作を監視するための設定です。

    例えば、

    • ボタンのクリック

    • フォーム操作

    などを検知し、そのタイミングで Event を送信できます。

    Salesforce の Sitemap では Listener を使用してページ上のユーザー操作を監視し、取得した操作を Web SDK の Event として送信できます。

    今回の TrailNest では、

    • Add to Cart ボタン → Add to Cart

    • Confirm Customer ボタン → Customer Confirm Email

    • Confirm Customer ボタン → Customer Identification

    という設定を行います。


    ① Product Detail Page Type

    Product Detail に Event を設定

    まず Page Types タブを開き、以前作成した Product Detail を選択します。

    画像

    Product Detail には、次の 2 つの Event を設定します。

    • Page Load → Product View

    • Add to Cart のクリック → Add to Cart


    On Page Load Interaction に Product View を設定する

    On Page Load Interaction から、

    Product View

    を選択します。

    画像

    これにより、

    Product Detail が Page Type として Match
    ↓
    Product View Event を送信

    という動きになります。

    Product View には前回、

    • Product ID

    • Product Name

    • Product Price

    を Resolver として設定しています。

    そのため Product Detail を表示すると、単純なページ表示ではなく、

    どの商品が閲覧されたのか

    を Catalog Interaction として取得できます。

    Salesforce でも、Product Detail のような Page Load で取得する Catalog Interaction は Sitemap の Page Config から送信する方法が案内されています。


    Product Detail の Listeners に Add to Cart を追加

    続いて、同じ Product Detail の Listeners から Add Listener をクリックします。

    画像

    今回監視するのは TrailNest の Add to Cart ボタンです。

    TrailNest には、

    <button id="add-to-cart">

    というボタンを用意しています。

    Pick をクリックし、Web ページ上の Add to Cart ボタンを選択します。

    画像
    画像

    Selector には、

    #add-to-cart

    が設定されます。

    そして Send Event には、

    Add to Cart(イベント)

    を選択します。

    画像

    これで、

    Add to Cart ボタンをクリック
    ↓
    Add to Cart Event を送信

    という Listener が設定されます。

    Add to Cart Event には、

    • Product ID

    • Product Quantity

    • Product Price

    を設定しているため、クリックされた商品の情報を Line Item として送信できます。

    {
      name: "Product Detail",
      isMatch: () => document.querySelector('#trailnest-app[data-page-type="product_detail"]') !== null,
      interaction: {
        name: SI.CatalogObjectInteractionName.ViewCatalogObject,
        catalogObject: {
          type: "Product",
          id: productid(),
          attributes: {
            Price: productprice(),
            Name: productname()
          }
        }
      },
      listeners: [listener("click", "#add-to-cart", () => {
        sendEvent({
          interaction: {
            name: SI.CartInteractionName.AddToCart,
            lineItem: {
              catalogObjectType: "Product",
              catalogObjectId: productid(),
              quantity: productquantity(),
              price: productprice()
            }
          }
        });
      })]
    }

    以上、設定できたら Save をクリックします。


    Tips:Pick 機能を使うか使わないかの分かれ道

    Pick は Selector を簡単に取得するための便利な機能ですが、取得された Selector が長期的に安定しているかを確認することが重要です。

    #add-to-cart のような一意で安定した ID や、Tracking 用に用意された data-* Attribute を取得できる場合は、そのまま利用しやすいです。

    一方、HTML の階層、nth-child、自動生成された Class などに依存する Selector は、Web サイトの変更によって動作しなくなる可能性があります。

    また、注文完了など「処理が成功したこと」を取得したい場合は、ボタンを Pick して Click を監視するだけでは不十分な場合があります。(入力エラーやサーバー側のエラーによって、ボタンをクリックしても注文処理が完了しない場合があるため)その場合は Application Event や Data Layer など、実際の処理結果を表す Event を利用する設計を検討します。


    ② Checkout Page Type

    Checkout に Event を設定

    続いて Checkout の Page Type を開きます。

    画像

    Checkout では、ユーザーが Confirm Customer をクリックしたタイミングで、

    • Customer Confirm Email

    • Customer Identification

    を送信します。

    On Page Load Interaction には、Page View を設定してください。

    画像

    Customer Confirm Email の Listener を追加

    Listeners から Add Listener をクリックします。

    画像

    今回対象とするのは Checkout の Confirm Customer ボタンです。

    Pick を使用して Confirm Customer ボタンを選択すると、Selector には、TrailNest の Confirm Customer ボタンを表す Selector が設定されます。

    画像

    Send Event には、

    • Customer Confirm Email

    を選択します。

    画像

    続いて、同じ Confirm Customer にもう 1 つ Listener を追加します。


    Customer Identification の Listener を追加

    続けて、もう一度 Add Listener をクリックします。

    先ほどと同じ Confirm Customer ボタンを対象にしますので、Selector には「#confirm-customer」をコピペします。

    Send Event には、

    • Customer Identification

    を選択します。

    画像

    これらによって、Confirm Customer を 1 回クリックすると、

    • Customer Confirm Email
      → Contact Point Email

    • Customer Identification
      → Party Identification

    の 2 つが送信される構成になります。

    {
      name: "Checkout",
      isMatch: () => document.querySelector('#trailnest-app[data-page-type="checkout"]') !== null,
      listeners: [listener("click", "#confirm-customer", () => {
        sendEvent({
          interaction: {
            name: "Customer Confirm Email",
            eventType: "userEngagement"
          },
          user: {
            attributes: {
              eventType: "contactPointEmail",
              email: checkoutemail()
            }
          }
        });
      }), listener("click", "#confirm-customer", () => {
        sendEvent({
          interaction: {
            name: "Customer Identification",
            eventType: "userEngagement"
          },
          user: {
            attributes: {
              eventType: "partyIdentification",
              IDName: "TrailNest Customer ID",
              IDType: "Customer ID",
              userId: checkoutcustomerid()
            }
          }
        });
      })]
    }

    Sitemap では 1 つの Page Type に複数の Listener を設定できます。

    今回は同じ Confirm Customer ボタンに 2 つの Listener を設定することで、1 回のクリックから Customer Confirm Email と Customer Identification の 2 つの Event を送信します。


    ③ Order Confirmation Page Type

    Order Confirmation に Purchase を設定

    最後に Order Confirmation の Page Type を開きます。

    画像

    前回作成した Purchase Event では、

    • Order ID

    • Total Value

    • 購入商品の Line Items

    を取得するように設定しました。

    Order ID と Total Value は Local Storage の trailnest_last_order から取得し、Line Items は Order Confirmation に表示されている各 .checkout-summary-item から取得します。

    そのため、

    Order Confirmation が表示された
    ↓
    Purchase Event を送信

    という設定にします。


    On Page Load Interaction に Purchase を設定

    On Page Load Interaction から、

    Purchase

    を選択します。

    画像

    これで Order Confirmation が Page Type として Match した際(Order Confirmation のページが開かれた際)に Purchase Event が送信されます。

    Purchase Event では、

    • Order ID

    • Total Value

    • Product ID

    • Quantity

    • Price

    を取得するため、

    • どの注文で、どの商品が、何個、いくらで購入されたのか

    を Order Interaction として取得できます。

    確認できたら Save をクリックします。

    {
      name: "Order Confirmation",
      isMatch: () => document.querySelector('#trailnest-app[data-page-type="order_confirmation"]') !== null,
      interaction: {
        name: SI.OrderInteractionName.Purchase,
        order: {
          id: orderid(),
          totalValue: ordertotal(),
          lineItems: cashDom(".checkout-summary-item").map((index, el) => {
            const $item = cashDom(el);
            return {
              catalogObjectType: "Product",
              catalogObjectId: orderitemproductid($item),
              quantity: orderitemquantity($item),
              price: orderitemprice($item)
            };
          }).get()
        }
      }
    }

    Purchase Event の重複送信には注意

    今回の検証では Order Confirmation の Page Load を Purchase Event の発火条件として利用しています。

    この方法は Sitemap の動きを理解するうえでは分かりやすい一方、実際の EC サイトでは注意が必要です。

    例えばユーザーが Order Confirmation を再読み込みすると、

    Page Load
    ↓
    Purchase

    がもう一度発生する可能性があります。

    実案件では、同じ Order ID の Purchase を重複して送信しないように、

    • 購入完了を一度だけ通知する Application Event

    • Data Layer

    • サーバー側の購入完了処理

    など、サイトの仕組みに合わせて発火条件を設計することが重要です。

    今回は Sitemap Builder の On Page Load Interaction をシンプルに確認するため、Order Confirmation の表示時に Purchase を送信する構成とします。


    その他の Page Type

    TrailNest には、

    • Home 

    • Category

    • Cart

    などの Page Type も作成しています。

    今回、そちらにはシンプルに On Page Load Interaction だけを設定し、それぞれに Page View だけ を設定してください。

    画像

    Interaction Name はすべて Page View ですが、sourcePageType に Home、Category、Cart、Checkout が入るため、どの種類のページを表示したかを区別できます。

    今回の Mapping では、Page View は Website Engagement に取り込まれます。ページの再表示や再読み込みでもレコードが増えるため、後ほど Hero Banner などの表示・クリックを確認する際は、Interaction Name を使って対象の Event を区別します。


    いかがでしたでしょうか。

    前回の記事では、何を Event として送信するのか を設定していました。

    今回の記事では、Page Types に戻り、On Page Load Interaction と Listener を利用して、いつ、その Event を送信するのか を設定しました。

    これで、

    • Product View

    • Add to Cart

    • Customer Confirm Email

    • Customer Identification

    • Purchase

    という TrailNest の主要な Event を Sitemap から取得するための設定が一通りつながりました。

    次回は Schema タブを確認します。

    これまで設定してきた Event や Profile Data が、Data 360 の Web Connector Schema とどのように結び付くのかを確認していきます。

    今回は以上です。


    次の記事はこちら

    前回の記事はこちら

    私の note のトップページはこちら

     
     
     
    Salesforce Marketing Cloud、Agentforce、Data Cloud、Salesforce 認定資格に関する実践的な情報を発信しています。これらの記事が、皆さまの学習や日々の業務に少しでもお役に立てば幸いです。