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

【第591回】Personalization:Sitemap Builder で Sitemap と Schema の取得

    Nobuyuki Watanabe

    前回の記事では、Salesforce Personalization の Sitemap Builder に用意されている Debug を使用して、TrailNest から想定した Event が送信されていることを確認しました。

    ここまでで、

    Page Type の設定
    ↓
    Resolver の設定
    ↓
    Profile Attributes の設定
    ↓
    Event の作成
    ↓
    Event と Page Type の紐付け
    ↓
    Schema の確認
    ↓
    Debug による動作確認

    まで完了しました。

    最後に確認するのが、Sitemap Builder 右上部にある Review & Download です。

    Review & Download では、ここまで画面上で設定してきた内容から生成された、

    • Sitemap

    • Schema

    を最終確認し、ファイルとして取得できます。

    今回は、Sitemap Builder から生成された Sitemap と Schema を確認してダウンロードします。


    Personalization 基礎シリーズ

    Sitemap Builder シリーズ

    Data 360 設定シリーズ

    Personalization 設定シリーズ


    Review & Download を開く

    Sitemap Builder 上部の Review & Download をクリックします。

    画像

    Review & Download には、

    • Download Sitemap

    • Download Schema

    が表示されます。

    また、画面上でも、

    • Sitemap.js

    • Schema.json

    を切り替えて内容を確認できます。


    Sitemap.js を確認する

    まず Sitemap.js を確認します。

    画像

    Sitemap.js には、これまで Sitemap Builder で設定してきた内容が JavaScript として生成されています。

    今回の TrailNest では、例えば以下のような設定が含まれます。

    • Consent Management

    • Data Space

    • Page Type

    • Resolver

    • Product View

    • Add to Cart

    • Customer Confirm Email

    • Customer Identification

    • Purchase

    • Order Item

    • Listener

    Sitemap Builder では各タブから Low-Code / No-Code で設定してきましたが、最終的にはこれらが JavaScript の Sitemap として生成されます。

    Salesforce Personalization の Sitemap は、Web サイト上の Page Type やユーザー操作を判定し、Salesforce Interactions SDK から Data 360 へ送信する Event を定義する JavaScript の設定です。

    // Generated by Salesforce Data 360 Sitemap Builder
    
    var SI = getSalesforceInteractions();
    SI.setLoggingLevel("debug");
    SI.init({
      consents: new Promise(resolve => {
        resolve([{
          provider: "Consent Provider",
          purpose: SI.ConsentPurpose.Tracking,
          status: SI.ConsentStatus.OptIn
        }]);
      }),
      personalization: {
        dataspace: "default"
      }
    }).then(() => {
      const {cashDom, listener, resolvers, sendEvent, util, CartInteractionName, CatalogObjectInteractionName, OrderInteractionName} = SI;
      const currentURL = new URL(window.location.href);
      const parseText = value => {
        if (value == null) return null;
        try {
          const str = String(value).trim();
          SI.log.debug("String conversion:", value, "→", str);
          if (str === "") return null;
          return str;
        } catch (error) {
          SI.log.error("Type conversion parsing failed:", error);
          SI.log.error("String conversion failed:", error);
          return null;
        }
      };
      const parseNumber = value => {
        if (value == null || value === "") return null;
        try {
          const stripped = String(value).replace(/[^0-9.-]/g, "");
          if (stripped === "") return null;
          const parsed = Number(stripped);
          return isNaN(parsed) ? null : parsed;
        } catch (error) {
          SI.log.error("Type conversion parsing failed:", error);
          return null;
        }
      };
      const productid = () => parseText(resolvers.fromSelectorAttribute('#trailnest-app', 'data-product-id')());
      const productname = () => parseText(resolvers.fromSelectorAttribute('#trailnest-app', 'data-product-name')());
      const productprice = () => parseNumber(resolvers.fromSelectorAttribute('#trailnest-app', 'data-product-price')());
      const productquantity = () => 1;
      const orderid = () => {
        try {
          const order = JSON.parse(localStorage.getItem('trailnest_last_order'));
          return order?.orderId || '';
        } catch (e) {
          return '';
        }
      };
      const ordertotal = () => {
        try {
          const order = JSON.parse(localStorage.getItem('trailnest_last_order'));
          return Number(order?.total || 0);
        } catch (e) {
          return 0;
        }
      };
      const checkoutemail = () => (document.querySelector('#email')?.value || '').trim();
      const checkoutcustomerid = () => (document.querySelector('#customerId')?.value || '').trim();
      const orderitemproductid = $item => $item.attr('data-product-id') || '';
      const orderitemquantity = $item => Number($item.attr('data-quantity') || 0);
      const orderitemprice = $item => Number($item.attr('data-price') || 0);
      const global = {
        listeners: [],
        onActionEvent: actionEvent => actionEvent
      };
      const pageTypeDefault = {
        name: "default",
        interaction: {
          name: "default",
          eventType: "userEngagement"
        }
      };
      const pageTypes = [{
        name: "Home",
        isMatch: () => document.querySelector('#trailnest-app[data-page-type="home"]') !== null
      }, {
        name: "Category",
        isMatch: () => document.querySelector('#trailnest-app[data-page-type="category"]') !== null
      }, {
        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()
              }
            }
          });
        })]
      }, {
        name: "Cart",
        isMatch: () => document.querySelector('#trailnest-app[data-page-type="cart"]') !== null
      }, {
        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",
                IDNameWeb: "TrailNest Customer ID",
                IDType: "Customer ID",
                userId: checkoutcustomerid()
              }
            }
          });
        })]
      }, {
        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()
          }
        }
      }];
      const sitemapConfig = {
        global: global,
        pageTypeDefault: pageTypeDefault,
        pageTypes: pageTypes
      };
      SI.initSitemap(sitemapConfig);
    });

    Sitemap をダウンロードする

    内容を確認したら Download Sitemap をクリックします。

    画像

    これによって、生成された Sitemap をファイルとして取得できます。

    Salesforce 側で Website Connector を設定する際には、Sitemap ファイルをアップロードして利用します。

    Salesforce の公式手順でも、Website Connector のレコードから Sitemap ファイルをアップロードする流れになっています。

    ただし、今回はまだ Salesforce 側へのアップロードは行いません。

    まずは Sitemap Builder から生成されたファイルを取得するところまで確認します。


    Schema.json を確認する

    続いて Schema.json をクリックします。

    画像

    Schema.json には、Schema タブで確認した Event Schema が JSON として生成されています。

    今回の TrailNest では、次の 10 種類の Schema が含まれます。

    • Catalog

    • Cart

    • Cart Item

    • Order

    • Order Item

    • Consent Log

    • userEngagement

    • Contact Point Email

    • Party Identification

    • Identity

    例えば、今回設定してきた内容とは次のように対応します。

    • Product View
      → Catalog

    • Add to Cart
      → Cart / Cart Item

    • Customer Confirm Email
      → userEngagement / Contact Point Email

    • Customer Identification
      → userEngagement / Party Identification

    • Purchase
      → Order / Order Item

    {
      "records": [
        {
          "masterLabel": "Catalog",
          "developerName": "catalog",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Channel Type",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization",
              "developerName": "personalizationId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization Content",
              "developerName": "personalizationContentId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "id",
              "developerName": "id",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "type",
              "developerName": "type",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "attributePrice",
              "developerName": "attributePrice",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "attributeName",
              "developerName": "attributeName",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Cart",
          "developerName": "cart",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Channel Type",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization",
              "developerName": "personalizationId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization Content",
              "developerName": "personalizationContentId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Cart Item",
          "developerName": "cartItem",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Channel Type",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization",
              "developerName": "personalizationId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization Content",
              "developerName": "personalizationContentId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "cartEventId",
              "developerName": "cartEventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Product",
              "developerName": "catalogObjectId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "catalogObjectType",
              "developerName": "catalogObjectType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Currency",
              "developerName": "currency",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Product Price",
              "developerName": "price",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Product Quantity",
              "developerName": "quantity",
              "dataType": "Number",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Order",
          "developerName": "order",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Channel Type",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization",
              "developerName": "personalizationId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization Content",
              "developerName": "personalizationContentId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Currency",
              "developerName": "orderCurrency",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Sales Order Id",
              "developerName": "orderId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Total Product Amount",
              "developerName": "orderTotalValue",
              "dataType": "Number",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Order Item",
          "developerName": "orderItem",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Channel Type",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization",
              "developerName": "personalizationId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization Content",
              "developerName": "personalizationContentId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "orderEventId",
              "developerName": "orderEventId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Product",
              "developerName": "catalogObjectId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "catalogObjectType",
              "developerName": "catalogObjectType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "currency",
              "developerName": "currency",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Product Price Amount",
              "developerName": "price",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Total Line Amount",
              "developerName": "totalPrice",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Ordered Quantity",
              "developerName": "quantity",
              "dataType": "Number",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Consent Log",
          "developerName": "consentLog",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Channel Type",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization",
              "developerName": "personalizationId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization Content",
              "developerName": "personalizationContentId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "provider",
              "developerName": "provider",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Privacy Consent Log Category",
              "developerName": "purpose",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Privacy Consent Status",
              "developerName": "status",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "userEngagement",
          "developerName": "userEngagement",
          "category": "Engagement",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Channel Type",
              "developerName": "interactionName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization",
              "developerName": "personalizationId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Personalization Content",
              "developerName": "personalizationContentId",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        },
        {
          "masterLabel": "Contact Point Email",
          "developerName": "contactPointEmail",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Party",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Email Address",
              "developerName": "email",
              "dataType": "Text",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Party Identification",
          "developerName": "partyIdentification",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Identification Name",
              "developerName": "IDNameWeb",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Party Identification Type",
              "developerName": "IDType",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Identification Number",
              "developerName": "userId",
              "dataType": "Text",
              "isDataRequired": true
            }
          ]
        },
        {
          "masterLabel": "Identity",
          "developerName": "identity",
          "category": "Profile",
          "externalDataTranFields": [
            {
              "masterLabel": "category",
              "developerName": "category",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "Engagement Date Time",
              "developerName": "dateTime",
              "dataType": "DateTime",
              "isDataRequired": true
            },
            {
              "masterLabel": "Individual ID",
              "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": "Session",
              "developerName": "sessionId",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "pageView",
              "developerName": "pageView",
              "dataType": "Number",
              "isDataRequired": false
            },
            {
              "masterLabel": "Engagement Channel",
              "developerName": "sourceChannel",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "sourceLocale",
              "developerName": "sourceLocale",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Webpage Type",
              "developerName": "sourcePageType",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Page URL",
              "developerName": "sourceUrl",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Referrer URL",
              "developerName": "sourceUrlReferrer",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Is Anonymous",
              "developerName": "isAnonymous",
              "dataType": "Text",
              "isDataRequired": true
            },
            {
              "masterLabel": "First Name",
              "developerName": "firstName",
              "dataType": "Text",
              "isDataRequired": false
            },
            {
              "masterLabel": "Last Name",
              "developerName": "lastName",
              "dataType": "Text",
              "isDataRequired": false
            }
          ]
        }
      ]
    }

    Schema をダウンロードする

    Download Schema をクリックします。

    画像

    すると、Schema.json に含める Record を選択する画面が表示されます。

    今回の TrailNest では、

    • Catalog

    • Cart

    • Cart Item

    • Order

    • Order Item

    • Consent Log

    • userEngagement

    • Contact Point Email

    • Party Identification

    • Identity

    の 10 件が表示されました。

    画像

    Standard と表示されているものは Salesforce Interactions SDK で用意されている標準 Event Schema、Custom と表示されている userEngagement は今回作成した Custom Event で利用する Schema です。

    今回は 10 件すべてを選択したまま Export Customized Schema.json をクリックします。

    この Schema.json が、その後の Salesforce 側の設定で使用するファイルになります。


    Sitemap Builder Config について

    Review & Download には、Sitemap.js と Schema.json のほかに、

    • Export Sitemap Builder Config

    も用意されています。

    これは Website Connector や Event Schema にアップロードするためのファイルではなく、Sitemap Builder 上で作成した設定内容を保持するための補助的なエクスポート です。

    Sitemap Builder の最初の設定セクションである Get Started には Import Sitemap Builder Config も用意されているため、エクスポートした Config を読み込んで、Sitemap Builder 上の設定を再利用できます。

    実際に、今回の Salesforce 側の設定で使用するのは、

    • Sitemap.js

    • Schema.json

    の 2 つのみです。

    そのため、今回の sitemap-builder-config.json は、Sitemap Builder で作成した設定の記録・バックアップとして、Sitemap.js や Schema.json とあわせて保存しておいてください。

    画像

    今回はまだ Salesforce 側へ設定しない

    今回の Review & Download で行うのは、Sitemap Builder で作成した成果物を確認して取得するところまで です。

    この時点では、まだ Salesforce 側の Website Connector には Sitemap や Schema をアップロードしていません。

    次のステップでは、Salesforce 側へ移動して、

    Website Connector
    ↓
    Schema をアップロード
    ↓
    Sitemap をアップロード
    ↓
    Data Stream
    ↓
    Data Mapping

    と進んでいきます。


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

    今回は Review & Download を使用して、Sitemap Builder で作成した、

    • Sitemap.js

    • Schema.json

    • Sitemap Builder Config

    を確認しました。

    これで Sitemap Builder 上での作業は一通り完了です。

    次回からは Salesforce 側へ移動し、今回取得した Sitemap と Schema を実際に利用できるよう設定していきます。

    今回は以上です。


    次の記事はこちら

    前回の記事はこちら

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

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