앱 설치, 웹 방문, 구독, 구매, 예약 등 다양한 유저 행동이 디지털 환경에서 발생합니다. 에어브릿지는 이러한 행동 중에서 에어브릿지 이벤트로 정의된 유저 행동만 수집할 수 있습니다. 에어브릿지 이벤트를 정의하기 위해서는 필요한 구성요소를 정의해야 합니다.
에어브릿지 이벤트 구성요소에는 카테고리(Event Category), 액션(Event Action), 라벨(Event Label), 밸류(Event Value), 어트리뷰트(Attribute), 트리거(Trigger)가 있습니다.
이벤트 구성요소 | 데이터 형식 | 설명 |
---|---|---|
카테고리 | string | - 필수 구성 요소입니다. - 에어브릿지 이벤트 이름으로 사용합니다. 또한 포스트백 전송 기준입니다. - 스탠다드 이벤트는 미리 정한 카테고리를 사용합니다. |
액션, 라벨 | string | - 액션, 라벨은 카테고리 외에 추가로 데이터를 수집하는 속성입니다. - 에어브릿지 리포트에서 확인할 수 있습니다. |
밸류 | float | - 밸류로 수집한 데이터를 계산에 활용할 수 있습니다. |
어트리뷰트 | 어트리뷰트마다 다름 | - 액션, 라벨 외에 추가로 데이터를 수집할 수 있습니다. - 에어브릿지 리포트에서 확인할 수 없습니다. - 시맨틱 어트리뷰트, 커스텀 어트리뷰트가 있습니다. 시맨틱 어트리뷰트는 에어브릿지가 미리 준비한 어트리뷰트입니다. |
트리거 | - | - 필수 구성 요소입니다. - 에어브릿지 이벤트가 발생하는 시점입니다. 해당 시점은 각 구성요소를 수집하는 시점과 동일합니다. |
카테고리는 에어브릿지 이벤트를 정의하기 위해 반드시 사용해야 하는 필수 구성요소입니다. 카테고리 이름은 에어브릿지 이벤트 이름으로 사용됩니다. 또한 카테고리를 기준으로 광고 채널에 전송하는 포스트백을 선택할 수 있습니다.
에어브릿지 이벤트는 카테고리 사전 정의 여부에 따라 스탠다드 이벤트와 커스텀 이벤트으로 나뉩니다. 스탠다드 이벤트는 에어브릿지가 정한 카테고리를 사용한 이벤트입니다. 커스텀 이벤트는 에어브릿지 사용자가 새로 만든 카테고리를 사용합니다.
카테고리로 사용하는 이름은 아래 규칙을 지켜야 합니다.
모든 이벤트 이름은 영문의 대소문자를 구분합니다.
스탠다드 이벤트는 에어브릿지에서 미리 정한 국문 이름과 영문 이름을 사용합니다.
커스텀 이벤트 이름에는 영문과 숫자만 사용할 수 있습니다. airbridge.
로 시작할 수 없습니다. 특수 문자로 _
를 사용하는 것을 권장합니다. 최대 길이는 128자입니다.
카테고리로 수집한 데이터에 따라 아래 제한사항이 적용됩니다.
데이터 형식에 맞지 않는 데이터가 있는 이벤트는 수집되지 않습니다. 카테고리의 데이터 형식은 string입니다.
수집한 데이터가 최대 길이를 벗어나면 데이터를 최대 길이까지 수집합니다. 카테고리 최대 길이는 128자입니다.
에어브릿지 이벤트가 발생한 횟수는 카테고리와 같은 이름의 메트릭을 선택하면 에어브릿지 리포트 또는 원본 데이터에서 조회할 수 있습니다. 또는 그룹바이, 필터, 프로퍼티로 Event Category를 선택하면 카테고리로 수집한 데이터를 에어브릿지 리포트 또는 원본 데이터에서 확인할 수 있습니다.
에어브릿지 이벤트에서 추가로 확인하고 싶은 속성은 액션과 라벨을 통해 최대 2개까지 정의할 수 있습니다. 액션과 라벨로 수집한 데이터는 에어브릿지 리포트에서 확인할 수 있습니다.
액션과 라벨로 수집할 수 있는 속성
액션과 라벨로 속성을 자유롭게 수집할 수 있습니다. 액션과 라벨이라는 단어가 가진 뜻과 수집할 수 있는 속성은 관계 없습니다. 예를 들어 액션은 유저 행동에 관련된 속성만 수집할 수 있는 구성요소가 아닙니다.
액션, 라벨로 사용하는 이름은 아래 규칙을 지켜야 합니다.
영문과 숫자 그리고 국문을 사용할 수 있습니다. 최대 길이는 128자입니다.
영문의 대소문자를 구분합니다. 공백과 특수 문자(?
, !
, ,
, .
, /
, &
, (
, )
, -
, _
)를 지원합니다. 특수 문자로 _
만 사용하는 것을 권장합니다.
액션, 라벨로 수집한 데이터에 따라 아래 제한사항이 적용됩니다.
데이터 형식에 맞지 않는 데이터가 있는 이벤트는 수집되지 않습니다. 액션, 라벨의 데이터 형식은 string입니다.
수집한 데이터가 최대 길이를 벗어나면 데이터를 최대 길이까지 수집합니다. 액션, 라벨의 최대 길이는 128자입니다.
액션과 라벨로 수집한 데이터는 에어브릿지 리포트에서 그룹바이 Event Action, Event Label'을 선택하면 확인할 수 있습니다.
밸류는 에어브릿지 이벤트가 수집한 숫자를 계산에 이용하기 위해서 선택해야 하는 구성요소입니다. 에어브릿지 이벤트의 밸류로 수집된 숫자만 계산에 이용할 수 있습니다. 밸류로 소수점 9자리 이하 숫자까지 수집할 수 있습니다.
예를 들어 레비뉴 리포트(Revenue Report)에서 판매한 제품의 가격을 더해 전체 판매 가격을 계산하거나 디지털 서비스의 구독료를 전부 합해서 전체 구독료를 확인하기 위해서는 밸류를 반드시 이벤트 구성요소로 사용해야 합니다.
밸류로 수집된 데이터는 밸류로 수집된 다른 데이터와 계산할 수 있습니다. 액션이나 라벨로 수집된 데이터는 계산에 활용할 수 없습니다. 그러나 이벤트 발생 횟수는 밸류 사용 여부와 상관없이 확인할 수 있습니다.
구매 완료 이벤트로 아래와 같이 데이터를 수집합니다.
카테고리 | 액션 | 라벨 | 밸류 |
---|---|---|---|
| 1,000 | 100 | 10,000 |
| 1,000 | 200 | 20,000 |
밸류로 수집한 데이터는 더할 수 있습니다. 따라서 구매 완료 이벤트의 밸류로 수집한 데이터를 더해서 30,000이라는 수치를 얻을 수 있습니다.
액션과 라벨로 수집한 데이터는 더할 수 없습니다. 대신 발생한 횟수는 확인할 수 있습니다. 따라서 구매 완료 이벤트의 액션 중에서 1,000이라는 속성이 2번 발생한 것을 에어브릿지 리포트에서 확인할 수 있습니다. 또한 라벨 중에서 100과 200이라는 속성이 각 1번 발생한 것을 에어브릿지 리포트에서 확인할 수 있습니다.
밸류로 수집한 데이터에 따라 아래 제한사항이 적용됩니다.
데이터 형식에 맞지 않는 데이터가 있는 이벤트는 수집되지 않습니다. 밸류의 데이터 형식은 float입니다.
수집한 데이터가 최대 길이를 벗어나면 데이터를 최대 길이까지 수집합니다. 밸류는 소수점 9자리 이하 숫자까지 수집합니다.
주의하세요
어트리뷰트로 수집한 데이터는 에어브릿지 리포트에서 확인할 수 없습니다. 액션과 라벨을 활용하면 에어브릿지 리포트에서 확인할 수 있는 데이터를 수집할 수 있습니다.
어트리뷰트는 액션, 라벨 외에 에어브릿지 이벤트의 추가적인 속성을 정의하고 수집하기 위해 사용하는 구성요소입니다. 어트리뷰트로 수집된 속성 데이터는 액션, 라벨과 달리 에어브릿지 리포트가 아닌 원본 데이터 추출에서만 확인할 수 있습니다.
어트리뷰트에는 시맨틱 어트리뷰트(Semantic Attribute)와 커스텀 어트리뷰트(Custom Attribute)가 있습니다.
시맨틱 어트리뷰트: 에어브릿지가 수집하는 데이터를 미리 정한 어트리뷰트
커스텀 어트리뷰트: 에어브릿지 사용자가 수집하기 위해서 새롭게 정의한 어트리뷰트
시맨틱 어트리뷰트는 에어브릿지가 수집하는 데이터를 미리 정한 어트리뷰트입니다. 에어브릿지가 지원하는 시맨틱 어트리뷰트 목록과 예시를 참고해 주세요.
에어브릿지에서 지원하는 시맨틱 어트리뷰트입니다.
이름 | 데이터 형식 | 키 | 설명 |
---|---|---|---|
Currency | string |
| 에어브릿지에 설정한 환율 기준 3자리 국가 통화 코드. |
Currency (Original) | string |
| 원본 데이터 환율 기준 3자리 국가 통화 코드. |
Product List | array |
| 상품 리스트. 예시를 확인해 주세요. |
Product ID | string |
| 제품 리스트에 있는 첫 번째 상품의 ID. |
Product Name | string |
| 상품 리스트에 있는 첫 번째 상품의 이름. |
Product Price | float |
| 상품 리스트에 있는 첫 번째 상품의 가격. 음수를 지원합니다. 환불 또는 교환에 사용할 수 있습니다. |
Product Quantity | int |
| 상품 리스트에 있는 첫 번째 상품의 개수. |
Product Currency | string |
| 상품 리스트에 있는 첫 번째 상품의 가격에 사용하는 3자리 화폐 단위. |
Product Position | int |
| 상품 리스트에 있는 첫 번째 상품이 있는 위치. |
Product Category ID | string |
| 상품 리스트에 있는 첫 번째 상품이 포함된 카테고리 ID. |
Product Category Name | string |
| 상품 리스트에 있는 첫 번째 상품이 포함된 카테고리 이름. |
Product Brand ID | string |
| 상품 리스트에 있는 첫 번째 상품의 브랜드 ID. |
Product Brand Name | string |
| 상품 리스트에 있는 첫 번째 상품의 브랜드 이름. |
Period | string |
| 기간. ISO 8601 형식입니다. 예시) P7D, P1M, P6M, P1Y |
Is Renewal Event | boolean |
| 갱신 여부. |
Renewal Count | int |
| 갱신 횟수. |
Product List ID | string |
| 상품 리스트 ID |
Cart ID | string |
| 장바구니 ID |
Transaction ID | string |
| 거래 ID |
Transaction Type | string |
| 거래 유형. 각 고객사가 설정한 거래 유형을 제공합니다. 단, 거래가 취소되면 항상 cancel로 기록됩니다. |
Transaction Paired Event Category | string |
| 거래 관련 이벤트의 카테고리. 구매 취소 이벤트가 발생하면 관련 구매 이벤트의 정보를 확인할 수 있습니다 |
Transaction Paired Event Timestamp | int |
| 거래 관련 이벤트가 발생한 시각. 13자리 타임스탬프(ms)입니다 |
Total Quantity | int |
| 전체 수량. 별도로 정의하지 않아도 상품 리스트에서 수집한 수량의 합계가 자동으로 수집됩니다. |
Search Query | string |
| 유저가 요청한 쿼리 |
In App Purchased | boolean |
| 인앱 구매 여부 - true: 인앱 구매입니다. - false: 인앱 구매가 아닙니다. |
Contribution Margin | float |
| 에어브릿지에 설정한 환율 기준 공헌이익 매출액. 공헌이익 매출액은 구매액에서 변동비를 제외한 금액입니다. 에어브릿지에서 계산하지 않습니다. |
Contribution Margin (Original) | float |
| 원본 데이터 환율 기준 공헌이익 매출액. 공헌이익 매출액은 구매액에서 변동비를 제외한 금액입니다. 에어브릿지에서 계산하지 않습니다. |
List ID | string |
| 리스트 ID |
Rate ID | string |
| 평점 ID |
Rate | float |
| 평점 |
Max Rate | float |
| 최고 평점 |
Achievement ID | string |
| 과제 ID |
Shared Channel | string |
| 공유 채널 |
Date Time | string |
| 날짜와 시간. ISO-8601 형식입니다. |
Description | string |
| 상세 설명 |
Is Revenue Event | boolean |
| 매출 관련 이벤트 여부 - true : 매출과 관련된 이벤트입니다. - false : 매출과 관련된 이벤트가 아닙니다. |
Place | string |
| 장소 |
Schedule ID | string |
| 일정 ID |
Type | string |
| 유형 |
Level | string |
| 레벨 |
Score | float |
| 점수 |
아래 예시 코드를 참고해 주세요.
// Example code for semanticAttributes
airbridge.events.send("purchase_card", {
semanticAttributes: {
transactionID: '1458132a-0d09-4944-a686-fcbee81b74f7',
products: [{
productID: "1234",
name: "Nike 1",
price: 55,
currency: "USD",
quantity: 1
}, {
productID: "1235",
name: "Nike 2",
price: 44,
currency: "USD",
quantity: 1
}]
}
});
#import <AirBridge/ABInAppEvent.h>
ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:@"purchase_card"];
NSDictionary* semantics = @{
@"transactionID": @"1458132a-0d09-4944-a686-fcbee81b74f7",
@"products": @[@{
@"productID": @"1234",
@"name": @"Nike 1",
@"price": @55,
@"currency": @"USD",
@"quantity": @1,
}, @{
@"productID": @"1235",
@"name": @"Nike 2",
@"price": @44,
@"currency": @"USD",
@"quantity": @1,
}],
};
[event setSemantics:semantics];
[event send];
let event = ABInAppEvent()
event?.setCategory("purchase_card")
let semantics: [String: Any] = [
"transactionID": "1458132a-0d09-4944-a686-fcbee81b74f7",
"products": [[
"productID": "1234",
"name": "Nike 1",
"price": 55,
"currency": "USD",
"quantity": 1,
], [
"productID": "1235",
"name": "Nike 2",
"price": 44,
"currency": "USD",
"quantity": 1,
]]
]
event?.setSemantics(semantics)
event?.send()
Map<String, Object> product1 = new HashMap<>();
product1.put("productID", "1234");
product1.put("name", "Nike 1");
product1.put("price", 55);
product1.put("currency", "USD");
product1.put("quantity", 1);
Map<String, Object> product2 = new HashMap<>();
product1.put("productID", "1235");
product1.put("name", "Nike 2");
product1.put("price", 44);
product1.put("currency", "USD");
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("product", products);
Airbridge.trackEvent(
"purchase_card", // Category
null, // Action
null, // Label
null, // Value
null, // Custom Attributes
semanticAttributes // Semantic Attributes
);
Airbridge.trackEvent(
category = "purchase_card",
semanticAttributes = mapOf(
"transactionID" to "1458132a-0d09-4944-a686-fcbee81b74f7",
"products" to mapOf(
"product" to listOf(
mapOf(
"productID" to "1234",
"name" to "Nike 1",
"price" to 55,
"currency" to "USD",
"quantity" to 1
),
mapOf(
"productID" to "1235",
"name" to "Nike 2",
"price" to 44,
"currency" to "USD",
"quantity" to 1
)
)
)
)
)
아래와 같이 상품 리스트를 전송할 수 있습니다.
airbridge.events.addedToCart({
products: [
{
productID: "1",
name: "MacBook Pro",
price: 1500000,
quantity: 3
},
{
productID: "2",
name: "MacBook Air",
price: 1500000,
quantity: 2
}
],
cartID: "73926365"
});
에어브릿지에는 아래와 같이 수집됩니다. 상품 리스트에 quantity를 수집하면 totalQuantity는 자동으로 quantity에 수집된 값의 합계로 수집됩니다.
{
"totalQuantity": 5, // Total quantity of items are automatically summed
"cartID": "73926365",
"products": [
{
"quantity": 3,
"productID": "1",
"price": 1500,
"name": "MacBook Pro",
"currency": "USD",
"position": 1
},
{
"quantity": 2,
"productID": "2",
"price": 1500,
"name": "MacBook Air",
"currency": "USD",
"position": 2
}
]
}
커스텀 어트리뷰트는 에어브릿지 사용자가 디지털 서비스나 이벤트 수집 목적에 따라 새로운 이름을 붙여 정의한 어트리뷰트입니다. 커스텀 어트리뷰트는 원본 데이터 추출에서 수집된 모든 속성 데이터가 같은 칼럼에 담긴 상태로 확인할 수 있습니다.
예를 들어 유저의 랭킹과 아이템 유형을 정의한 커스텀 어트리뷰트로 1과 sword(칼)를 수집하면 1과 sword는 하나의 칼럼에 모두 포함됩니다.
커스텀 어트리뷰트로 수집된 데이터는 하나의 칼럼에 수집됩니다.
//Example code for customAttributes
airbridge.events.send("purchase_card", {
"customAttributes": {
"userRank": "1",
"itemType": "sword"
}
})
#import <AirBridge/ABInAppEvent.h>
ABInAppEvent* event = [[ABInAppEvent alloc] init];
[event setCategory:@"purchase_card"];
NSDictionary* customs = @{
@"userRank": @"1",
@"itemType": @"sword"
};
[event setCustoms:customs];
[event send];
let event = ABInAppEvent()
event?.setCategory("purchase_card")
let customs : [String: Any] = [
"userRank": "1",
"itemType": "sword"
]
event?.setCustoms(customs)
event?.send()
Map<String, Object> customAttributes = new HashMap<>();
customAttributes.put("userRank", "1");
customAttributes.put("itemType", "sword");
Airbridge.trackEvent(
"purchase_card", // Category
null, // Action
null, // Label
null, // Value
customAttributes, // Custom Attributes
null, // Semantic Attributes
);
Airbridge.trackEvent(
category = "purchase_card",
customAttributes = mapOf(
"userRank" to "1",
"itemType" to "sword"
)
)
어트리뷰트로 수집한 데이터에 따라 아래 제한사항이 적용됩니다.
시맨틱 어트리뷰트의 데이터 형식에 맞지 않는 데이터는 수집되지 않습니다. 다른 이벤트 데이터와 데이터 형식에 맞는 시맨틱 어트리뷰트는 수집됩니다.
커스텀 어트리뷰트의 데이터 형식에 맞지 않는 데이터가 있는 이벤트는 수집되지 않습니다. 커스텀 어트리뷰트마다 데이터 형식이 다르기 때문에 주의해야 합니다.
수집한 데이터가 각 시맨틱 어트리뷰트가 지원하는 최대 길이를 벗어나면 데이터를 최대 길이까지 수집합니다. 데이터 형식이 string인 시맨틱 어트리뷰트는 최대 1024자입니다. 데이터 형식이 int, float인 시맨틱 어트리뷰트는 최대 64비트입니다.
수집한 데이터가 커스텀 어트리뷰트가 지원하는 최대 길이를 벗어나면 ERROR_MAX_LENGTH_EXCEEDED
가 수집됩니다.
트리거는 에어브릿지 이벤트를 수집하는 시점입니다. 이벤트를 수집하는 시점에 따라 동일한 에어브릿지 이벤트가 다르게 집계될 수 있습니다. 이벤트를 수집하는 목적이 명확해야 원하는 이벤트를 수집할 수 있습니다.
트리거에 따라 집계되는 수치가 달라질 수 있습니다.
예를 들어 구매완료 이벤트를 ‘구매’ 버튼을 클릭하는 시점에 수집하면 잔액 부족과 같은 이유로 구매가 실패해도 구매완료 이벤트로 집계됩니다. 대신 구매 완료 이벤트를 구매 완료 페이지가 나오는 시점에 수집하면 앞선 경우보다 더 정확하게 구매완료 이벤트를 수집할 수 있습니다.
도움이 되었나요?