본문으로 건너뛰기

Event Collection API

OPM (Omnicommerce Performance Management) 에서 위해 사용자의 event 데이터를 수집하기 위한 RestAPI 입니다.
Javascript SDK 를 활용하면, 웹 또는 모바일 웹 기반의 대부분의 사이트에서 손쉽게 사용자의 event 데이터를 수집할 수 있습니다.

API Endpoint

기본 API Endpoint는 아래와 같으며, 현재 최신 버전은 2023-01 입니다.

https://opm.kr.omnicommerce.ai

주의

Event Collection API는 다른 OMNICOMMERCE API 와 다른 Endpoint 및 버전 정책을 따릅니다. 사용시 유의해주세요.


API key 조회

인증 키

OMNICOMMERCE 의 모든 API 는 HTTP 기반의 REST API이며, 사용하기 위해서는 인증키가 필요합니다.

  • 인증키는 company 별로 발급됩니다.
  • API Key에는 외부에 노출되지 않도록 주의가 필요합니다.

옴니커머스에서 인증키를 확인하는 방법은 아래 링크를 참고하세요.

workspace 및 solution 확인 방법

정확한 수집을 위해서 각각의 이벤트가 발생한 workspace와 solution 정보를 함께 수집하는 것을 권장합니다. Workspace와 solution 확인 방법은 아래 링크를 참고하세요.


이벤트 수집 API

GET /2023-01/validation/: api key 인증 확인

Request Header

NameRequiredTypeDescription
X-Api-Key필수StringAPI Key

Response

200 ok

Example Responses

validation 실패

{
"errors": "User is not authorized to access this resource with an explicit deny"
}

POST /2023-01/events/: 고객 이벤트 데이터 전송

Request Header

NameRequiredTypeDescription
X-Api-Key필수StringAPI Key (참조: API 인증 가이드)
Content-Type필수String요청 Type. Application/json 만 지원합니다.

Request Body

주의

data는 EventObject 의 Array 형으로 보내야 하며, 최대 100개까지 전송 가능합니다.

NameRequiredTypeDescription
data필수List[EventObject]event json body list.

EventObject

주의

timestamp 는 Unix Timestamp (millisecond 기준) 형식입니다. (예: 1680688317472 )

NameRequiredTypeDescription
timestamp필수DoubleEvent 발생 시간. Unix Timestamp (millisecond 기준)
(예: 1680688317472 )
event필수StringEvent 종류. 대/소문자 구분 없음.
deviceId필수String고객 device ID
transactionId필수Stringevent의 고유 ID (ULID 를 권장합니다.)
sdkVersion선택StringClient SDK의 Version (예: 0.0.0)
sdkName선택StringClient SDK의 이름
osName선택StringOS 이름
platformName필수String브라우저 이름 (Chrome, Safari, Firefox 등)
prevTranId선택StringTracking 용 이벤트와 연관된 이전 transaction id
userId선택String식별 가능한 고객 id
userAge선택String고객의 나이대
userGender선택String고객의 성별
workspaceId선택String추천에 사용할 omnicommerce workspace id
solutionId선택String사용한 omnicommerce 제품
[CSRCH, VRCMD, SRCMD, TAGG, IMMOD, PRCMD] 중 하나
productId선택String상품 id
productName선택String상품 이름
brandName선택String상품 브랜드명
productPrice선택double상품 할인가(할인 중이 아닐 경우 원가)
productGender선택String상품 성별
suggestQueryId선택StringOmnicommerce의 추천 쿼리 결과 id
(예: Recommendation API 응답의 id 값, Camera Search API 응답의 transactionId 값)
suggestProductIds선택List[String]Omnicommerce 추천 쿼리 결과 상품들의 상품 id 값의 배열
placement선택String이벤트가 발생한 페이지
(메인 페이지, 상품 상세 페이지, 상품 리스트 페이지 등)
label선택String이벤트 추적 혹은 분석을 위한 키워드
productLikeCount선택double상품 좋아요 숫자
productReviewCount선택double상품 리뷰 카운트
productReviewScore선택double상품 리뷰 평점
strategy선택string추천 알고리즘
extra선택Object추가로 넣고자 하는 데이터를 추가할 수 있는 key-value 형태의 object

Solution ID

현재 아래와 같은 Solution ID를 지원하고 있습니다. (참조: workspace 및 solution 확인 방법)

NameDescription
CSRCHCamera Search
VRCMDVisual Recommendations
SRCMDStyling Recommendations
TAGGAutomated Product Tagging
IMMODImage Moderation
PRCMDPersonalized Recommendations

Request Example

{
"data": [
{
"event": "result_load",
"deviceId": "42ed9720-5168-418f-b1ab-b2a0485cd435",
"timestamp": 1677487420217,
"transactionId": "01GT90NCSSG3WPJT2QRTCV6M92",
"osName": "Mac OS",
"platformName": "Chrome",
"suggestQueryId": "95826402-b04f-4829-a0ce-f60021d67794",
"workspaceId": "test_workspace",
"suggestProductIds": [
"MSC3PP2504CH",
...
],
"solutionId": "CSRCH",
"placement" : "메인",
"tag": "패션"
"extra":{
"productUrl": "https://test.com/123456",
...
}
},
{
"event": "recommend_view",
"deviceId": "42ed9720-5168-418f-b1ab-b2a0485cd435",
"timestamp": 1677487420237,
"transactionId": "01GT90NCTDGP6J2MATKZNNF719",
"osName": "Chrome",
"platformName": "Mac OS",
"sdkVersion": "0.0.0",
"sdkName": "sdk bot",
"suggestQueryId": "95826402-b04f-4829-a0ce-f60021d67794",
"workspaceId": "test_workspace",
"solutionId": "CSRCH",
"prevTranId": "01GT90NCSSG3WPJT2QRTCV6M92",
"productId": "MSC3PP2504CH"
}
]
}

Response

주의

이벤트 단건에 대한 수집 실패 여부는 FailedRecordCount로 알 수 있습니다.

NameTypeDescription
FailedRecordCountIntegerevent list 중 수집에 실패한 record의 갯수
RecordsList[Object]event record 응답 list
├ Records.ErrorCodeStringRecord 수집 실패 사유. 수집 성공시에는 비어있는 json body가 return 됩니다.

Example Responses

200 OK

모든 이벤트 수집 성공

{
"FailedRecordCount": 0,
"Records": [
{},
{},
...
]
}

특정 이벤트 수집 실패

{
"FailedRecordCount": 1,
"Records": [
{},
{
"ErrorCode": "ProvisionedThroughputExceededException"
},
...
]
}

400 Bad Request

Event json 필수 값 누락

{
"errors": "Invalid request body"
}