Skip to content

カスタムESP

INFO

注: このドキュメントはまだ作成中であり、変更される可能性があります。

概要

このドキュメントでは、FanplayrのESPストリームインターフェースでサポートされるイベントを表す汎用データ構造を提供する新しいカスタムESP統合の提案について説明します。

エンドポイント設定

このESPは、FanplayrポータルのStreams > Endpointsセクションから設定できます。以下に、利用可能になる可能性のある設定オプションの例を示します。

投稿URL

FanplayrがHTTP POSTメソッドを介してペイロードをストリーミングするURL。リクエストボディには、このドキュメントで後述するJSONデータ構造が含まれます。

  • 型: string

APIキー

認証目的で使用できる、URLへのPOSTリクエストに含まれるオプションのAPIキー。

ストリーム設定

定義したエンドポイントにデータを送信するには、キャプチャしたいイベントによってトリガーされ、そのエンドポイントにデータを送信するアクションを持つストリームを作成する必要があります。

以下の例は、「Session Expiry」イベントでトリガーされます。

ペイロード構造

以下は、カスタムESP統合を使用する際に送信されるペイロード構造の例です。この構造は以下に使用されます。

json5
{
  "version": "2022-01-01",
  "eventType": "addContact" | "abandonedSession" | "abandonedCart" | "order",
  "sessionKey": "",
  "domain": "",
  "siteCustomerId": "",
  "subscriberEmail": "",
  "subscriberKey": "",
  "date": "2022-01-01T00:00:00Z",
  "customData": {
    "key1": "value1",
    "key2": "value2"
  },
  "abandonedCart": {
    "gross": 0,
    "discount": 0,
    "discountCode": "",
    "shipping": 0,
    "tax": 0,
    "products": [
      {
        "id": "",
        "sku": "",
        "name": "",
        "url": "",
        "image": "",
        "quantity": 0,
        "category": ""
      }
    ]
  },
  "orderDetails": {
    "id": "",
    "gross": 0,
    "discount": 0,
    "discountCode": "",
    "shipping": 0,
    "tax": 0,
    "products": [
      {
        "id": "",
        "sku": "",
        "name": "",
        "url": "",
        "image": "",
        "quantity": 0,
        "category": ""
      }
    ]
  },
  "productsViewed": [
    {
      "id": "",
      "sku": "",
      "name": "",
      "url": "",
      "image": "",
      "category": ""
    }
  ],
  "relatedProducts": [
    {
      "id": "",
      "sku": "",
      "name": "",
      "url": "",
      "image": "",
      "category": ""
    }
  ]
}

version

ペイロード構造の形式を表します。

  • 型: string

eventType

このペイロードが表すイベントタイプを指定します。

  • 型: string

  • 詳細:

    イベントタイプは、以下のいずれかの値になります。

    • addContact - ユーザーの新しいメールアドレスが取得されたときにトリガーされます。
    • abandonedSession - ユーザーがショッピングカートに商品がなく、注文しなかった閲覧セッションの終了時にトリガーされます。
    • abandonedCart - ユーザーがカートに少なくとも1つの商品を保持し、それを放棄して注文しなかった閲覧セッションの終了時にトリガーされます。
    • order - 注文がキャプチャされたときにトリガーされます。

domain

ユーザーがFanplayrセッション中に閲覧したウェブサイトのドメイン名。

  • 型: string

siteCustomerId

利用可能な場合、ウェブサイトのログインユーザー識別子を表します。この値は、FanplayrのページトラッキングcustomerIdプロパティ、またはID管理機能を使用した$siteCustomerIdIDから割り当てられます。

  • 型: string | undefined

subscriberEmail

この値は、現在のセッション中、または以前のセッション中にFanplayrウィジェットを介してFanplayrがユーザーにメールアドレスを関連付けた場合に設定されます。

  • 型: string | undefined

subscriberKey

FanplayrのID管理機能を使用する際のユーザーのIDを表します。

  • 型: string | undefined

date

イベントが作成された日付(GMT、ISO 8601形式)。

  • 型: string

sessionKey

Fanplayr閲覧セッションIDを表す一意の識別子。

  • 型: string

customData

イベントをトリガーおよび制御するために使用されたFanplayrストリームを介してイベントに添付されたカスタムデータのキーと値のペアを含むオブジェクト。

typescript
interface CustomData {
  [key: string]: string;
}

json5
{
  key1: 'value1',
  key2: 'value2'
}

abandonedCart

セッション終了時に1つ以上の商品がカートに残っている場合のショッピングカートの最終状態を表すオブジェクト。

typescript
interface CartDetails {
  // カート内の全アイテムの合計グロス金額を表す通貨値。
  gross: number;
  // カートに適用された合計割引額を表す通貨値。
  discount: number;
  // 適用された割引コード。複数のコードがある場合はカンマで区切られます。
  discountCode?: string;
  // 送料を表す通貨値。
  shipping: number;
  // 税金を表す通貨値。
  tax: number;
  // すべての通貨値のISO 4217通貨コードを表します。
  currencyCode: string;
  // カートに追加された商品の配列。
  products: CartProduct[];
}

interface CartProduct {
  // 商品バリアント識別子。
  id: string;
  // 商品グループ識別子。
  sku: string;
  // 商品表示名。
  name: string;
  // ウェブサイト上の商品への完全なURL。
  url: string;
  // 利用可能な場合、商品の主要画像への完全なURL。
  image?: string;
  // カートに追加された商品の数量。
  quantity: number;
  // 利用可能な場合、商品のカテゴリ名。
  category?: string;
}

例:

json5
{
  gross: 120.0,
  discount: 10,
  discountCode: '10OFF',
  shipping: 0,
  tax: 0,
  currencyCode: 'USD',
  products: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      quantity: 2,
      category: 'Accessories'
    }
  ]
}

productsViewed

セッション中に閲覧された商品の詳細を表すオブジェクトの配列。

  • 型: ViewedProduct[]
typescript
interface ViewedProduct {
  // 商品バリアント識別子。
  id: string;
  // 商品グループ識別子。
  sku: string;
  // 商品表示名。
  name: string;
  // ウェブサイト上の商品への完全なURL。
  url: string;
  // 利用可能な場合、商品の主要画像への完全なURL。
  image?: string;
  // 利用可能な場合、商品のカテゴリ名。
  category?: string;
}

例:

json5
[
  {
    id: 'RDB1-A2',
    sku: 'RDB1',
    name: 'Rifiano Duffel Bag',
    url: 'https://store.com/products/rdb1',
    image: 'https://cdn.store.com/products/rdb1-01.jpg',
    category: 'Accessories'
  },
  {
    id: 'VDD-1',
    sku: 'VDD',
    name: 'Vintage Denim Dress',
    url: 'https://store.com/products/vdd1',
    image: 'https://cdn.store.com/products/vdd1-01.jpg',
    category: 'Womens > Clothing'
  }
]

relatedProducts

イベントに関連する商品の詳細を表すオブジェクトの配列。

  • 型: RelatedProduct[]

  • 詳細:

    このプロパティは、商品レコメンデーションがイベントに追加された場合(ストリームを介して設定)、ペイロードにのみ存在します。

typescript
interface RelatedProduct {
  // 商品バリアント識別子。
  id: string;
  // 商品グループ識別子。
  sku: string;
  // 商品表示名。
  name: string;
  // ウェブサイト上の商品への完全なURL。
  url: string;
  // 利用可能な場合、商品の主要画像への完全なURL。
  image?: string;
  // 利用可能な場合、商品のカテゴリ名。
  category?: string;
}

例:

json5
[
  {
    id: 'BFF-3',
    sku: 'BFF',
    name: 'Bali Flip Flop',
    url: 'https://store.com/products/bff',
    image: 'https://cdn.store.com/products/bff-01.jpg',
    category: 'Womens > Shoes'
  }
]

orderDetails

キャプチャされた注文の取引詳細を表すオブジェクト。これらの詳細は「order」イベントタイプでのみ利用可能です。

typescript
interface OrderDetails {
  // 統合によって提供される一意の注文識別子。
  id: string;
  // カート内の全アイテムの合計グロス金額を表す通貨値。
  gross: number;
  // カートに適用された合計割引額を表す通貨値。
  discount: number;
  // 適用された割引コード。複数のコードがある場合はカンマで区切られます。
  discountCode?: string;
  // 送料を表す通貨値。
  shipping: number;
  // 税金を表す通貨値。
  tax: number;
  // すべての通貨値のISO 4217通貨コードを表します。
  currencyCode: string;
  // 注文に含まれる商品の配列。
  products: OrderProduct[];
}

interface OrderProduct {
  // 商品バリアント識別子。
  id: string;
  // 商品グループ識別子。
  sku: string;
  // 商品表示名。
  name: string;
  // ウェブサイト上の商品への完全なURL。
  url: string;
  // 利用可能な場合、商品の主要画像への完全なURL。
  image?: string;
  // 注文に含まれる商品の数量。
  quantity: number;
  // 利用可能な場合、商品のカテゴリ名。
  category?: string;
}

例:

json5
{
  id: '34783495',
  gross: 120.0,
  discount: 10,
  discountCode: '10OFF',
  shipping: 0,
  tax: 0,
  currencyCode: 'USD',
  products: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      quantity: 2,
      category: 'Accessories'
    }
  ]
}

ペイロードの例

コンタクト追加イベント

以下は、ユーザーのメールアドレスが取得されたことを表すペイロード構造の例です。

  • actionプロパティは、新しいメールが取得されたことを表すためにaddContactに設定されます。
  • subscriberKeyは、取得されたメールアドレスと等しくなります。
  • ユーザーの閲覧セッション中に閲覧された商品などの追加データも存在する場合があります。
javascript
{
  "version": "2022-01-01",
  "eventType": "addContact",
  "sessionKey": "02941605ef4048c832f272b13b1a2d4e",
  "domain": "store.com",
  "subscriberKey": "email@domain.com",
  "date": "2022-01-01T00:00:00Z",
  "productsViewed": [
    {
      "id": "RDB1-A2",
      "sku": "RDB1",
      "name": "Rifiano Duffel Bag",
      "url": "https://store.com/products/rdb1",
      "image": "https://cdn.store.com/products/rdb1-01.jpg",
      "category": "Accessories"
    }
  ]
}

セッション放棄イベント

ユーザーがセッション終了時にショッピングカートに商品を追加していない場合のセッション放棄イベントの例。

json5
{
  version: '2022-01-01',
  eventType: 'abandonedSession',
  sessionKey: '02941605ef4048c832f272b13b1a2d4e',
  domain: 'store.com',
  date: '2022-01-01T00:00:00Z',
  productsViewed: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      category: 'Accessories'
    }
  ]
}

カート放棄イベント

json5
{
  version: '2022-01-01',
  eventType: 'abandonedCart',
  sessionKey: '02941605ef4048c832f272b13b1a2d4e',
  domain: 'store.com',
  date: '2022-01-01T00:00:00Z',
  productsViewed: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      category: 'Accessories'
    }
  ],
  abandonedCart: {
    gross: 120.0,
    discount: 10,
    discountCode: '10OFF',
    shipping: 0,
    tax: 0,
    products: [
      {
        id: 'RDB1-A2',
        sku: 'RDB1',
        name: 'Rifiano Duffel Bag',
        url: 'https://store.com/products/rdb1',
        image: 'https://cdn.store.com/products/rdb1-01.jpg',
        quantity: 2,
        category: 'Accessories'
      }
    ]
  }
}

注文イベント

「Order Received」ストリームトリガーを介してトリガーされる注文イベントの例。

json5
{
  version: '2022-01-01',
  eventType: 'order',
  sessionKey: '02941605ef4048c832f272b13b1a2d4e',
  domain: 'store.com',
  date: '2022-01-01T00:00:00Z',
  productsViewed: [
    {
      id: 'RDB1-A2',
      sku: 'RDB1',
      name: 'Rifiano Duffel Bag',
      url: 'https://store.com/products/rdb1',
      image: 'https://cdn.store.com/products/rdb1-01.jpg',
      category: 'Accessories'
    }
  ],
  order: {
    id: '234897349',
    gross: 120.0,
    discount: 10,
    discountCode: '10OFF',
    currencyCode: 'USD',
    shipping: 0,
    tax: 0,
    products: [
      {
        id: 'RDB1-A2',
        sku: 'RDB1',
        name: 'Rifiano Duffel Bag',
        url: 'https://store.com/products/rdb1',
        image: 'https://cdn.store.com/products/rdb1-01.jpg',
        quantity: 2,
        category: 'Accessories'
      }
    ]
  }
}