購入取り消しイベント収集とチャンネル別実際の購入成果分析

インストールしたあるアプリから購入が発生したとしても、それをすぐ実際の成果とするのは難しいです。それはいろんな理由で購入を払い戻すケースがあるからです。各チャンネルで実際に発生した購入成果を分析するためには、購買取り消しイベントを集める必要があります。 購入完了イベント数から購入取り消しイベント数を差し引くと、実際の購入成果が確認することができます。

1. 購入取り消しイベント収集

購入取り消しイベント(airbridge.ecommerce.order.canceled)は、Airbridgeが基本イベントとして提供している[スタンダードイベント]の一つです。アクチュアルズレポートやローデータ抽出などで購入取り消しイベントを確認できます。

一方、購入取り消しイベントは、購入完了イベントが発生しないと発生できない後続イベントです。つまり、購入完了イベントと購入取り消しイベントは、お互い複数の情報が同じである必要があります。 たとえば、購入をキャンセルした製品は、購入済みの製品と同じである必要があります。

購入完了イベントと購入取り消しイベントをマッチングするためには、購入取り消しイベントTransaction IDにマッチングして送信しなければなりません。購入取り消しイベントの詳細な設定については、下記のセマンティックアトリビュートをご参照ください。

購入取り消イベントのセマンティックアトリビュート以下のように設定してください。

下記の例コードをご参照ください。Airbridge SDKで購入取りイベントを収集できます。

1234567891011121314151617181920
airbridge.events.send("airbridge.ecommerce.order.canceled", {
  semanticAttributes: {
    transactionID: '1458132a-0d09-4944-a686-fcbee81b74f7',
    transactionPairedEventTimestamp: 1599186193324,
    totalValue: 99000,
    products: [{
      productID: "1234",
      name: "Nike 1",
      price: 55000,
      currency: "KRW",
      quantity: 1
    }, {
      productID: "1235",
      name: "Nike 2",
      price: 44000,
      currency: "KRW",
      quantity: 1
    }]
  }
});
123456789101112131415161718192021
Map < String, Object > product1 = new HashMap < > ();
product1.put("productID", "1234");
product1.put("name", "Nike 1");
product1.put("price", 55000);
product1.put("currency", "KRW");
product1.put("quantity", 1);
Map < String, Object > product2 = new HashMap < > ();
product1.put("productID", "1235");
product1.put("name", "Nike 2");
product1.put("price", 44000);
product1.put("currency", "KRW");
product1.put("quantity", 1);
List < Map < String, Object >> products = new ArrayList < > ();
products.add(product1);
products.add(product2);
Map < String, Object > semanticAttributes = new HashMap < > ();
semanticAttributes.put("transactionID", "1458132a-0d09-4944-a686-fcbee81b74f7");
semanticAttributes.put("transactionPairedEventTimestamp", 1599186193324 L);
semanticAttributes.put("totalValue", 99000);
semanticAttributes.put("product", products);
Airbridge.trackEvent("airbridge.ecommerce.order.canceled", // Category null, // Action null, // Label null, // Value null, // Custom Attributes semanticAttributes // Semantic Attributes );
123456789101112131415161718192021222324252627282930
Airbridge.trackEvent(
  category = "airbridge.ecommerce.order.canceled",
  semanticAttributes =
    mapOf(
      "transactionID" to "1458132a-0d09-4944-a686-fcbee81b74f7",
      "transactionPairedEventTimestamp" to 1599186193324L,
      "totalValue" to 99000,
      "products" to
        mapOf(
          "totalValue" to 99000,
          "product" to
            listOf(
              mapOf(
                "productID" to "1234",
                "name" to "Nike 1",
                "price" to 55000,
                "currency" to "KRW",
                "quantity" to 1
              ),
              mapOf(
                "productID" to "1235",
                "name" to "Nike 2",
                "price" to 44000,
                "currency" to "KRW",
                "quantity" to 1
              )
          )
       )
    )
)
1234567891011121314151617181920212223
#import <AirBridge / ABInAppEvent.h>
ABInAppEvent * event = [[ABInAppEvent alloc] init];
[event setCategory: @ "airbridge.ecommerce.order.canceled"];
NSDictionary * semantics = @ {
  @"transactionID": @"1458132a-0d09-4944-a686-fcbee81b74f7",
  @"transactionPairedEventTimestamp": @1599186193324,
  @"totalValue": @99000,
  @ "products": @[@{
    @"productID": @"1234",
    @"name": @"Nike 1",
    @"price": @55000,
    @"currency": @"KRW",
    @"quantity": @1,
  }, @{
    @"productID": @"1235",
    @"name": @"Nike 2",
    @"price", @44000,
    @"currency": @"KRW",
    @"quantity": @1,
  }],
};
[event setSemantics: semantics];
[event send];
12345678910111213141516171819202122232425
let event = ABInAppEvent ()
event?.setCategory ("airbridge.ecommerce.order.canceled")
let semantics : [String: Any]= [
  "transactionID" : "1458132a-0d09-4944-a686-fcbee81b74f7",
  "transactionPairedEventTimestamp" : 1599186193324,
  "totalValue" : 99000,
  "products" : [
    [
      "productID" : "1234",
      "name" : "Nike 1",
      "price" : 55000,
      "currency" : "KRW",
      "quantity" : 1,
    ],
    [
      "productID" : "1235",
      "name" : "Nike 2",
      "price" : 44000,
      "currency" : "KRW",
      "quantity" : 1,
    ]
  ]
]
event?.setSemantics (semantics)
event?.send ()

購入取り消し以外の取り消しイベント定義

他にも、予約取り消しや見積もり取り消しなどの取り消しイベントをカスタムイベントとして定義し、それを収集することができます。 ただ、取り消しイベントは、すでに収集されたイベントをキャンセルする時に限って発生するイベントです。 たとえば、予約取り消しイベントは、収集された予約イベントが取り消された場合発生します。

  • semanticAttributes.transactionTypeにcancelを入力してください。

  • semanticAttributes.transactionPairedEventCategoryに予約など収集されたイベントのうち、キャンセルするイベントのカテゴリを入力してください。

12345678
airbridge.events.send("reservation_cancel", {
  semanticAttributes: { 
    transactionID: '1458132a-0d09-4944-a686-fcbee81b74f7', 
    transactionType: 'cancel', 
    transactionPairedEventCategory: 'reservation', 
    transactionPairedEventTimestamp: 1599186193324,
  },
});

購入取り消しイベントは、カスタムイベントとして定義された取り消しイベントとは異なり、以下のように必要な値を自動に満たします。

  • semanticAttributes.transactionType("cancel")

  • semanticAttributes.transactionPairedEventCategory("airbridge.ecommerce.order.completed")

取り消しイベントに関する広告成果計測可否

airbridge.ecommerce.order.canceledイベントカテゴリやsemanticAttributes.transactionTypeにcancelがあるイベントのアトリビューションは未貢献(unattributed)です.

2. 実際の購入成果分析

ローデータ抽出(Raw Data Export)で購入完了イベントと購入取り消しイベントを抽出します。抽出したデータのTransaction IDをマッチングすることで、実際の成果をチャンネル別に分析することができます。