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

【第623回】 Real-Time Offer Management : 顧客とオファーの Data Graph を作る

    前回の記事では、TrailNest で案内する 3 つの特典と、Web・メール用のコンテンツを作成しました。

    • Weekend Adventure Offer:一定金額以上の購入で利用できる特典

    • Camp Under the Stars Offer:テントカテゴリの商品に対する特典

    • Sleep Better Outdoors Offer:Sleeping カテゴリの商品に対する特典

    今回は、顧客の閲覧行動に合わせて、これらのオファーを選ぶためのデータを準備します。

    例えば、テントの商品を閲覧した顧客にはテントの特典を、Sleeping の商品を閲覧した顧客には寝袋の特典を案内する構成です。

    この回では、Web 行動の取り込み先とマッピングを設定し、顧客側とオファー側の2つの Data Graph を作成します。

    顧客データの取り込みと ID 解決は、完了している前提で進めます。


    Real-Time Offer Management シリーズ


    今回作成する 2 つの Data Graph

    今回使用する Data Graph には、それぞれ異なる役割があります。

    • TrailNest Offer Profile
      顧客の情報と、その顧客が閲覧した商品のカテゴリを参照します。

    • TrailNest Offer Catalog
      オファーの情報、対象カテゴリ、Web・メール向けの表示内容を参照します。

    この2つの Data Graph を、メールアドレスで直接結び付けるわけではありません。

    後ほど作成する Recommender で、次の情報を比較します。

    顧客が閲覧した商品のカテゴリ ⇔ オファーの対象カテゴリ

    例えば、両方が Tents を指していれば、テント向けのオファーを候補にできます。

    今回は、その比較に必要な情報を、最初から Data Graph に含めます。


    ① 商品とカテゴリの ID を確認する

    最初に、前回作成した商品とカテゴリの ID を確認します。

    今回使用する商品は、次の 2 つです。

    • Trail Duo Tent

      • Product Code:TN-TE-002

      • カテゴリ:Tents

    • Alpine Down Sleeping Bag

      • Product Code:TN-SL-001

      • カテゴリ:Sleeping

    ここで注意したいのは、商品コードやカテゴリ名と、レコードを識別する ID は別の値であることです。

    例えば、次の値は同じ意味ではありません。

    • TN-TE-002:商品コード

    • Tents:カテゴリ名

    • tents:以前の TrailNest で使用したカテゴリコード

    • Salesforce の商品・カテゴリのレコード ID

    今回の Web 行動では、Data 360 に取り込まれた商品・カテゴリと照合できる IDを送信します。

    そこで、CRM に移動して、次の 4 つの Salesforce ID(18 桁)を控えます。

    • Trail Duo Tent の商品 ID(01tWs00000HJotlIAD)

    • Alpine Down Sleeping Bag の商品 ID(01tWs00000HJovNIAT)

    • Tents のカテゴリ ID(0ZGWs000001fGLBOA2)

    • Sleeping のカテゴリ ID(0ZGWs000001fGMnOAM)

    今回、Salesforce のレコード ID を確認する理由

    一般的な Web サイトは、独自の商品コードやカテゴリコードを使用しています。Salesforce のレコード ID を、最初から持っているわけではありません。

    今回は、Salesforce 上で作成したオファーの対象カテゴリと、Web の閲覧カテゴリを比較します。そのため、デモサイト側にコードと Salesforce ID の対応を用意し、閲覧イベントを送る際に対応する ID を設定します。

    ここで控えた ID は、後の CloudPages 実装で使用します。これは今回のデモで採用する方法であり、すべての Web サイトに Salesforce ID の直接送信が必須という意味ではありません。

    Offer 側のカテゴリも確認する

    続いて、Offer Product Category を確認します。

    • Camp Under the Stars Offer が Tents に関連している

    • Sleep Better Outdoors Offer が Sleeping に関連している

    ここに入っているカテゴリの参照値と、Web 行動で送るカテゴリ ID を揃えます。

    後ほどの Filter で比較するのは、見た目のカテゴリ名ではなく、このカテゴリの識別値です。


    ② Website Connector を作成する

    次に、新しい Salesforce 組織に、TrailNest の Web 行動を取り込む入口を作成します。

    Data Cloud Setup → Websites & Mobile Apps を開き、新規作成します。

    • Connector Name:TrailNest Offers Website

    • Alias:off(offer の off です)

    • Connector Type:A Custom Website

    • Website Base URL:今回の Cloudpages URL

    画像

    ③ Web Connector Schema を登録する

    Website Connector の Schema から、今回用意した JSON ファイルをアップロードします。

    {
      "records": [
        {
          "masterLabel": "Cart",
          "developerName": "cart",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "interactionName",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationContentId",
              "developerName": "personalizationContentId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationId",
              "developerName": "personalizationId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Cart Item",
          "developerName": "cartItem",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "cartEventId",
              "developerName": "cartEventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "catalogObjectId",
              "developerName": "catalogObjectId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "catalogObjectType",
              "developerName": "catalogObjectType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "currency",
              "developerName": "currency",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "personalizationContentId",
              "developerName": "personalizationContentId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationId",
              "developerName": "personalizationId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "price",
              "developerName": "price",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "quantity",
              "developerName": "quantity",
              "dataType": "Number",
              "isDataRequired": true
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Catalog",
          "developerName": "catalog",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "id",
              "developerName": "id",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "interactionName",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationContentId",
              "developerName": "personalizationContentId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationId",
              "developerName": "personalizationId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "type",
              "developerName": "type",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "attributeCategoryId",
              "developerName": "attributeCategoryId",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Consent",
          "developerName": "consentLog",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "provider",
              "developerName": "provider",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "purpose",
              "developerName": "purpose",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "status",
              "developerName": "status",
              "dataType": "Text",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Order",
          "developerName": "order",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "interactionName",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "orderCurrency",
              "developerName": "orderCurrency",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "orderId",
              "developerName": "orderId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "orderTotalValue",
              "developerName": "orderTotalValue",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationContentId",
              "developerName": "personalizationContentId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationId",
              "developerName": "personalizationId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Order Item",
          "developerName": "orderItem",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "catalogObjectId",
              "developerName": "catalogObjectId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "catalogObjectType",
              "developerName": "catalogObjectType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "currency",
              "developerName": "currency",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "orderEventId",
              "developerName": "orderEventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "personalizationContentId",
              "developerName": "personalizationContentId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "personalizationId",
              "developerName": "personalizationId",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "price",
              "developerName": "price",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "quantity",
              "developerName": "quantity",
              "dataType": "Number",
              "isDataRequired": true
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Contact Point Address",
          "developerName": "contactPointAddress",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "addressLine1",
              "developerName": "addressLine1",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "addressLine2",
              "developerName": "addressLine2",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "addressLine3",
              "developerName": "addressLine3",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "addressLine4",
              "developerName": "addressLine4",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "city",
              "developerName": "city",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "country",
              "developerName": "country",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "postalCode",
              "developerName": "postalCode",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "stateProvince",
              "developerName": "stateProvince",
              "dataType": "Text",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Contact Point Email",
          "developerName": "contactPointEmail",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "email",
              "developerName": "email",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Contact Point Phone",
          "developerName": "contactPointPhone",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "phoneNumber",
              "developerName": "phoneNumber",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Identity",
          "developerName": "identity",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "addressLine1",
              "developerName": "addressLine1",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "addressLine2",
              "developerName": "addressLine2",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "addressLine3",
              "developerName": "addressLine3",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "addressLine4",
              "developerName": "addressLine4",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "city",
              "developerName": "city",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "country",
              "developerName": "country",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "email",
              "developerName": "email",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "firstName",
              "developerName": "firstName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "isAnonymous",
              "developerName": "isAnonymous",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "lastName",
              "developerName": "lastName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "phoneNumber",
              "developerName": "phoneNumber",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "postalCode",
              "developerName": "postalCode",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "stateProvince",
              "developerName": "stateProvince",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Party Identification",
          "developerName": "partyIdentification",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "dateTime",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "deviceId",
              "developerName": "deviceId",
              "dataType": "Text",
              "isDataRequired": true,
              "primaryIndexOrder": 1
            },
            {
              "masterLabel": "eventId",
              "developerName": "eventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "eventType",
              "developerName": "eventType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "IDName",
              "developerName": "IDName",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "IDType",
              "developerName": "IDType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "sessionId",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "sourceChannel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourcePageType",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrl",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceUrlReferrer",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "userId",
              "developerName": "userId",
              "dataType": "Text",
              "isDataRequired": true
            }
          ]
        }
      ]
    }
    

    このファイルは、Salesforce の推奨 Web Connector Schema をもとに、Catalog イベントへ次の項目を追加したものです。

    • 項目名:attributeCategoryId

    • 型:Text

    • 用途:閲覧した商品のカテゴリ ID

    元の推奨スキーマに含まれるイベント定義は保持しています。

    画像

    Sitemap の登録と Web SDK の設置は、CloudPages の HTML と合わせて Web 実装の回で行います。


    ④ Web のデータストリームを作成する

    Data 360 の Data Streams → New を開き、Website を選択します。

    • Website Connector:TrailNest Offers Website

    • Data Space:default

    画像

    今回の構成で使用するイベントとして、少なくとも次を含めます。

    • Catalog:商品閲覧

    • Identity:ブラウザ側の Individual 情報

    イベントと項目を確認して、データストリームをデプロイします。

    画像

    データストリームを作成しただけでは、Product Browse Engagement への項目の対応付けは完了していません。 続いて、マッピングを設定します。


    ⑤ 商品閲覧のマッピングを設定する

    作成された Behavioral Events のデータストリームを開き、Start Data Mapping またはマッピングの編集画面を開きます。

    今回の取り込み先は、Product Browse Engagement です。

    共通項目をマッピングする

    All Event Data の項目を、次のように対応付けます。

    • eventId → Product Browse Engagement ID

    • dateTime → Engagement Date Time

    • dateTime → Created Date

    • deviceId → Individual

    画像

    Catalog の項目をマッピングする

    Catalog の項目を、次のように対応付けます。

    • catalog.attributeCategoryId → Product Category

    • catalog.id → Product

    • catalog.interactionName → Engagement Channel Action

    • eventType → Engagement Type

    画像

    Identity をマッピングする

    Identity のデータストリームでは、Individual DMO に対してマッピングします。

    • deviceId → Individual ID

    • dateTime → Created Date

    • firstName → First Name

    • lastName → Last Name

    • isAnonymous → Is Anonymous

    画像

    contactPointEmail をマッピングする

    contactPointEmail のデータストリームでは、Contact Point Email DMO に対してマッピングします。

    • dateTime → Created Date

    • deviceId → Contact Point Email ID

    • deviceId → Party

    • email → Email Address

    画像

    設定を保存します。

    今回はデモなので、もっとも簡易にメールアドレスの一致を条件とする ID 解決のマッチルール によって、CRM の顧客 Profile と Web 側の Profile を同じ Unified Individual に関連付けます。

    画像

    ⑥ DMO の関連を確認する

    Profile Data Graph に商品閲覧を追加する前に、DMO の関連を確認します。

    Data 360 の Data Model で Product Browse Engagement を開き、Individual との関連を確認します。

    • Product Browse Engagement の Individual

    • Individual の Individual ID

    商品閲覧の複数レコードが、1 つの Individual に関連する構成です。

    標準の関連が存在している場合は、その関連を使用します。関連がない場合は、上記の項目を使用する 多対 1 の関連を設定します。

    画像

    ⑦ Real-Time Profile Data Graph を作成する

    顧客情報と商品閲覧をまとめて参照するため、Unified Individual を起点とした Real-Time Profile Data Graph を作成します。

    Data Graphs → New → Start from Scratch を開きます。

    • Name:TrailNest Offer Profile

    • Data Space:default

    • 種類:Real-Time Data Graph

    • Primary Data Model Object:Unified Individual

    画像

    詳細設定はデフォルトのままで OK です。

    画像

    顧客の関連を追加する

    次の順で関連オブジェクトを追加します。

    Unified Individual → Unified Link Individual → Individual

    Unified Individual では、次の項目を選択します。

    • Unified Individual ID

    • First Name

    • Last Name

    Unified Link Individual では、主キーと、統合先・統合元を関連付ける項目を含めます。

    Individual では、次の項目を選択します。

    • Individual ID

    • Key Qualifier Individual Id

    • First Name

    • Last Name

    各オブジェクトで自動選択される必須項目は保持します。

    メールで使用する情報を追加する

    Individual の配下に、次のオブジェクトを追加します。

    Contact Point Email

    • Contact Point Email ID

    • Key Qualifier Contact Point Email Id

    • Key Qualifier Party

    • Party

    • Data Source

    • Email Address

    商品閲覧を追加する

    さらに、Individual の配下に Product Browse Engagement を追加します。

    次の項目を選択します。

    • Created Date

    • Individual

    • Key Qualifier Individual

    • Key Qualifier Product Browse Engagement Id

    • Product Browse Engagement Id

    • Engagement Channel Action

    • Engagement Date Time

    • Engagement Type

    • Product

    • Product Category

    閲覧履歴の保持範囲を設定する

    商品閲覧を無期限に判断材料にするのではなく、今回のデモでは 直近 7 日間の閲覧を使用する方針にします。

    Product Browse Engagement の保持設定で、次を指定します。

    • Recency Field:Engagement Date Time

    • Record Limit:10

    • Time Limit:7 Days

    今回は Affinity の点数を計算する構成ではありません。Data Graph に含まれる閲覧カテゴリを、オファー選択の判断材料にします。

    保存してビルドする

    Save and Build を実行します。

    画像

    この時点で Web イベントをまだ送信していない場合、商品閲覧のデータが空でも構いません。まずは、商品閲覧を含む Data Graph の定義を作成します。

    実際の閲覧データが返ることは、CloudPages からイベントを送信する回で確認します。


    ⑧ Offer 用の Item Data Graph を作成する

    続いて、候補となるオファーとコンテンツを参照する Data Graph を作成します。

    Data Graphs → New → Start from Scratch を開きます。

    • Name:TrailNest Offer Catalog

    • Data Space:default

    • 種類:Standard Data Graph

    • Primary Data Model Object:Offer

    画像

    Offer の項目を選択する

    次の項目を選択します。

    • Offer ID

    • Key Qualifier Offer Id

    • End Date Time

    • Name

    • Offer Code

    • Priority Number

    • Promotion

    • Status

    • Start Date Time

    Offer Treatment を追加する

    Offer に関連する Offer Treatment を追加し、次の項目を選択します。

    • Key Qualifier Offer

    • Key Qualifier Offer Treatment Id

    • Offer

    • Offer Treatment Id

    • Call to Action Text

    • Call to Action URL

    • Engagement Channel Type

    • Image URL

    • Language

    • Name

    • Offer Body

    • Offer Heading

    • Offer Treatment Code

    • Output

    • Output Format

    前回登録した Web 用の HTML は、Output に入っています。

    チャネル情報を追加する

    Offer Treatment の配下に Engagement Channel Type を追加します。

    • Engagement Channel Type Id

    • Key Qualifier Engagement Channel Type Id

    • Name

    これにより、Web 用と Email 用の Treatment を区別できるようにします。

    オファーの対象カテゴリを追加する

    Offer の配下に Offer Product Category を追加します。

    • Key Qualifier Offer

    • Key Qualifier Offer Product Category Id

    • Offer

    • Offer Product Category Id

    • Product Category

    さらに、その配下に Product Category を追加します。

    • Key Qualifier Product Category Id

    • Product Category Id

    • Category Name

    このうち、Offer Product Category が保持する Product Category の参照値を、顧客の閲覧カテゴリと比較するために使用します。

    画像

    必要な項目を追加したら、更新間隔は Daily で Save and Build を実行します。


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

    今回は、TrailNest の商品閲覧を取り込むための Website Connector とマッピングを設定し、顧客側とオファー側の Data Graph を作成しました。

    顧客側では「どのカテゴリの商品を閲覧したか」、オファー側では「どのカテゴリを対象とした特典か」を参照します。

    これで、顧客の閲覧カテゴリに合うオファーを選ぶための準備ができました。

    次回は、この 2 つの Data Graph を使用し、共通オファー用と閲覧カテゴリ用の Recommender、Content Schema、Personalization Point を設定します。

    今回は以上です。


    次の記事はこちら

    前回の記事はこちら

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

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