トラックイベント

イベントデータをAdobe Experience Cloudに送信するには、sendEventコマンドを使用します。 この sendEvent コマンドは、 にデータを送信し、パーソナライズされたコンテンツ、ID、オーディエンスの宛先を取得する主な方法です。Experience Cloud

Adobe Experience Cloud に送信されるデータは、次の 2 つのカテゴリに分類されます。

  • XDM データ
  • XDM以外のデータ

XDM データの送信

XDM データは、Adobe Experience Platform 内で作成したスキーマとコンテンツと同じ構造を持つオブジェクトです。スキーマの作成方法の詳細について説明します。

分析、パーソナライゼーション、オーディエンスまたは宛先の一部とするXDMデータは、xdmオプションを使用して送信する必要があります。

alloy("sendEvent", {
  "xdm": {
    "commerce": {
      "order": {
        "purchaseID": "a8g784hjq1mnp3",
        "purchaseOrderNumber": "VAU3123",
        "currencyCode": "USD",
        "priceTotal": 999.98
      }
    }
  }
});

sendEventコマンドが実行されてからデータがサーバーに送信されるまでに時間がかかる場合があります(例えば、Web SDKライブラリが完全に読み込まれていないか、同意をまだ受け取っていない場合)。 sendEventコマンドの実行後にxdmオブジェクトの一部を変更する場合は、sendEventコマンドの実行前にxdmオブジェクト​をコピーすることを強くお勧めします。​次に例を示します。

var clone = function(value) {
  return JSON.parse(JSON.stringify(value));
};

var dataLayer = {
  "commerce": {
    "order": {
      "purchaseID": "a8g784hjq1mnp3",
      "purchaseOrderNumber": "VAU3123",
      "currencyCode": "USD",
      "priceTotal": 999.98
    }
  }
};

alloy("sendEvent", {
  "xdm": clone(dataLayer)
});

// This change will not be reflected in the data sent to the 
// server for the prior sendEvent command.
dataLayer.commerce = null;

この例では、データレイヤーをJSONにシリアライズし、デシリアライズすることで、データレイヤーを複製します。 次に、クローン結果がsendEventコマンドに渡されます。 これにより、sendEventコマンドが実行されたときのデータレイヤーのスナップショットがsendEventコマンドに含まれ、後で元のデータレイヤーオブジェクトに対する変更がサーバーに送信されたデータに反映されなくなります。 イベント駆動型データレイヤーを使用している場合、データのクローンは既に自動的に処理されている可能性が高くなります。 例えば、Adobeクライアントデータレイヤーを使用している場合、getState()メソッドは、以前のすべての変更に関する計算済みのクローンスナップショットを提供します。 また、Adobe Experience Platform Web SDKタグ拡張機能を使用している場合は、自動的に処理されます。

メモ

XDMフィールドの各イベントで送信できるデータには、32 KBの制限があります。

XDM 以外のデータの送信

XDMスキーマと一致しないデータは、sendEventコマンドのdataオプションを使用して送信する必要があります。 この機能は、Web SDKのバージョン2.5.0以降でサポートされています。

これは、Adobe Targetプロファイルを更新するか、Target Recommendations属性を送信する必要がある場合に役立ちます。 Targetのこれらの機能について詳しくは、こちらを参照してください。

将来は、dataオプションの下の完全なデータレイヤーを送信し、XDMサーバー側にマッピングできます。

プロファイル属性とRecommendations属性をAdobe Targetに送信する方法:

alloy("sendEvent", {
  data: {
    __adobe: {
      target: {
        "profile.gender": "female",
        "profile.age": 30,
        "entity.id" : "123",
        "entity.genre" : "Drama"
      }
    }
  }
});

eventType の設定

XDM ExperienceEventスキーマには、オプションのeventTypeフィールドがあります。 ここには、レコードのプライマリイベントタイプが表示されます。イベントタイプを設定すると、送信する様々なイベントを区別するのに役立ちます。 XDMには、使用できる定義済みのイベントタイプがいくつか用意されています。また、使用事例に合わせて独自のカスタムイベントタイプを常に作成することもできます。 XDMのドキュメントを参照して、事前定義されたすべてのイベントタイプ🔗のリストを確認してください。

これらのイベントタイプは、タグ拡張を使用する場合や、タグを使用せずに常に渡すことができる場合に、ドロップダウンに表示されます。 これらは、xdmオプションの一部として渡すことができます。

alloy("sendEvent", {
  "xdm": {
    "eventType": "commerce.purchases",
    "commerce": {
      "order": {
        "purchaseID": "a8g784hjq1mnp3",
        "purchaseOrderNumber": "VAU3123",
        "currencyCode": "USD",
        "priceTotal": 999.98
      }
    }
  }
});

または、eventType オプションを使用して、type をイベントコマンドに渡すことができます。これはバックグラウンドで XDM データに追加されます。type をオプションとして指定すると、XDM ペイロードを変更しなくても、より簡単に eventType を設定できるようになります。

var myXDMData = { ... };

alloy("sendEvent", {
  "xdm": myXDMData,
  "type": "commerce.purchases"
});

データセットIDの上書き

場合によっては、設定UIで設定されたデータセット以外のデータセットにイベントを送信する必要があります。 そのためには、sendEventコマンドにdatasetIdオプションを設定する必要があります。

var myXDMData = { ... };

alloy("sendEvent", {
  "xdm": myXDMData,
  "type": "commerce.checkout",
  "datasetId": "YOUR_DATASET_ID"
});

ID情報の追加

カスタムID情報をイベントに追加することもできます。 Experience CloudIDの取得を参照してください。

sendBeacon API の使用

Web ページのユーザーが離脱する直前にイベントデータを送信するのは、困難な場合があります。リクエストに時間がかかりすぎると、ブラウザーによってリクエストがキャンセルされる場合があります。一部のブラウザーではこの間に、データを簡単に収集できるよう、sendBeacon と呼ばれる Web 標準 API が実装されています。sendBeacon を使用する場合、ブラウザーはグローバルブラウジングコンテキストで Web リクエストをおこないます。これは、ブラウザーがバックグラウンドでビーコンリクエストをおこない、ページナビゲーションを保持しないことを意味します。Adobe Experience Platform Web SDKにsendBeaconを使用するように伝えるには、イベントコマンドにオプション"documentUnloading": trueを追加します。 次に例を示します。

alloy("sendEvent", {
  "documentUnloading": true,
  "xdm": {
    "commerce": {
      "order": {
        "purchaseID": "a8g784hjq1mnp3",
        "purchaseOrderNumber": "VAU3123",
        "currencyCode": "USD",
        "priceTotal": 999.98
      }
    }
  }
});

ブラウザーでは、sendBeacon で一度に送信できるデータの量に制限が設けられています。多くのブラウザーでは、上限は 64K です。ペイロードが大きすぎてブラウザーがイベントを拒否した場合、Adobe Experience Platform Web SDKは、通常のトランスポート方法(フェッチなど)を使用してフォールバックします。

イベントからの応答の処理

イベントからの応答を処理する場合は、次のように成功または失敗の通知を受け取ることができます。

alloy("sendEvent", {
  "renderDecisions": true,
  "xdm": {
    "commerce": {
      "order": {
        "purchaseID": "a8g784hjq1mnp3",
        "purchaseOrderNumber": "VAU3123",
        "currencyCode": "USD",
        "priceTotal": 999.98
      }
    }
  }
}).then(function(results) {
    // Tracking the event succeeded.
  })
  .catch(function(error) {
    // Tracking the event failed.
  });

イベントのグローバルな変更

イベントのフィールドをグローバルに追加、削除、または変更する場合は、onBeforeEventSend コールバックを設定できます。このコールバックは、イベントが送信されるたびに呼び出されます。このコールバックは、xdm フィールドを含むイベントオブジェクトで渡されます。content.xdmを変更して、イベントと共に送信されるデータを変更します。

alloy("configure", {
  "edgeConfigId": "ebebf826-a01f-4458-8cec-ef61de241c93",
  "orgId": "ADB3LETTERSANDNUMBERS@AdobeOrg",
  "onBeforeEventSend": function(content) {
    // Change existing values
    content.xdm.web.webPageDetails.URL = xdm.web.webPageDetails.URL.toLowerCase();
    // Remove existing values
    delete content.xdm.web.webReferrer.URL;
    // Or add new values
    content.xdm._adb3lettersandnumbers.mycustomkey = "value";
  }
});

xdm フィールドは次の順序で設定されます。

  1. イベントコマンド alloy("sendEvent", { xdm: ... }); にオプションとして渡される値
  2. 自動的に収集された値(自動情報を参照)
  3. onBeforeEventSend コールバックで加えられた変更です。

onBeforeEventSendコールバックに関する注意事項を次に示します。

  • コールバック中にイベントXDMを変更できます。 コールバックが返された後、
    content.xdmおよびcontent.dataオブジェクトは、イベントと共に送信されます。

    onBeforeEventSend: function(content){
      //sets a query parameter in XDM
      const queryString = window.location.search;
      const urlParams = new URLSearchParams(queryString);
      content.xdm.marketing.trackingCode = urlParams.get('cid')
    }
    
  • このコールバックで例外がスローされると、イベントの処理が中断され、イベントは送信されません。

  • このコールバックがfalseのブール値を返した場合、イベント処理は中断され、
    エラーがない場合、イベントは送信されません。 このメカニズムにより、特定のイベントを簡単に無視できます。
    イベントデータを調べ、イベントを送信しない場合はfalseを返す。

    メモ

    ページの最初のイベントでfalseが返されないように、注意が必要です。 最初のイベントでfalseを返すと、パーソナライゼーションに悪影響を与える可能性があります。

   onBeforeEventSend: function(content) {
     // ignores events from bots
     if (MyBotDetector.isABot()) {
       return false;
     }
   }

ブール値false以外の戻り値を使用すると、コールバックの後にイベントを処理して送信できます。

  • イベントは、イベントタイプを調べることでフィルタリングできます(イベントタイプを参照)。
    onBeforeEventSend: function(content) {  
      // augments XDM if link click event is to a partner website
      if (
        content.xdm.eventType === "web.webinteraction.linkClicks" &&
        content.xdm.web.webInteraction.URL ===
          "http://example.com/partner-page.html"
      ) {
        content.xdm.partnerWebsiteClick = true;
      }
   }

実行可能なエラーの可能性

イベントを送信する際、送信されるデータが大きすぎる(要求全体で 32KB を超える)場合は、エラーが発生する可能性があります。この場合、送信されるデータの量を減らす必要があります。

このページ