로거 삽입 가이드

로거 삽입 가이드

레코벨 시스템을 사용하기 위해서 아래와 같은 정보들이 필요하다.

  • 상품정보 / 컨텐츠 정보
  • 사용자 이력 (상품, 컨텐츠 클릭)
  • 사용자 이력 (검색)
  • 사용자 이력 (전환) : 쇼핑몰의 경우에는 상품의 주문이며, 회원가입, 1:1 문의 등

이 문서는 사용자의 이력을 수집하는 방법 중 하나인 JavaScript 를 고객사의 사이트에 추가하는 방법에 대해 설명한다.

위 컨텐츠들 중에서 사용하는 서비스에 따라서 아래 페이지들을 보면 된다.

  • 레코벨 추천서비스
    • 상품 상세 페이지
    • 결제 완료 페이지
    • 검색 페이지
  • Keyword7
    • 공통 스크립트
    • 결제 완료 페이지
    • 검색 페이지
    • 기타 페이지 추적 (미리 합의된 경우에 한해서)

스크립트 위치

레코벨 스크립트는 body 의 어느 부분에 위치해도 된다.

(공통 스크립트와 타 스크립트 간의 위치도 신경쓸 필요가 없다.)

<!DOCTYPE html>
<html>
	<head>
		// .. <meta> , <script>
	</head>
	<body>
		..
		<!-- 레코벨 스크립트 -->
		<script type="text/javascript">
			..
		</script>
		<!-- 레코벨 스크립트 끝 -->
		..
	</body>
</html>

공통스크립트 (Keyword7)

Keyword7 의 경우 모든 페이지 공통적으로 아래 스크립트를 삽입함으로써 사이트로 유입되는 키워드를 찾고자 한다.

이 스크립트의 경우 사이트 모든 페이지에 적용되어야하기 때문에 일반적으로 '헤더'/'푸터'에 일괄적으로 삽입하는 것이 좋다.

한 페이지에 두 개 이상의 레코벨 로거가 삽입되더라도 오작동은 없다.

<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','userId','{$userId}']); // optional
  _rblq.push(['track','visit']);
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>

각 변수는 아래와 같다.

  • {$cuid} : 레코벨에서 발급한 고객사 사이트 ID. 계약 후에 발급된다.
  • {$device} : 현재 방문한 페이지의 분류. 아래 4가지 값 중 하나를 지정하며, 임의의 값 지정도 가능하다.
    • PW : 피씨 웹사이트의 경우
    • MW : 모바일 웹사이트의 경우
    • MI : 아이폰 하이브리드 앱의 웹뷰
    • MA : 안드로이드 하이브리드 앱의 웹뷰
  • {$userId} : 방문한 사용자의 로그인 아이디 (optional) 개인정보 보호 이슈로 인해 HASH 등으로 변환된 값을 지정한다.

상품 상세 페이지 (추천서비스)

상품ID 추적

상품상세페이지와 같이 사용자가 클릭하여 방문하는 페이지를 "view" 로 추적할 수 있다.

"view" 를 추적하는 스크립트는 아래와 같다.

<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','itemId','{$itemId}']);
  _rblq.push(['setVar','userId','{$userId}']); // optional
  _rblq.push(['setVar','searchTerm','{$searchTerm}']);
  _rblq.push(['track','view']);	
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>

각 변수는 아래와 같다.

  • {$cuid} : 레코벨에서 발급한 고객사 사이트 ID. 계약 후에 발급된다.
  • {$device} : 현재 방문한 페이지의 분류. 아래 4가지 값 중 하나를 지정하며, 임의의 값 지정도 가능하다.
    • PW : 피씨 웹사이트의 경우
    • MW : 모바일 웹사이트의 경우
    • MI : 아이폰 하이브리드 앱의 웹뷰
    • MA : 안드로이드 하이브리드 앱의 웹뷰
  • {$userId} : 방문한 사용자의 로그인 아이디 (optional) 개인정보 보호 이슈로 인해 HASH 등으로 변환된 값을 지정한다.
  • {$itemId} : 현재 방문한 상품 아이디, 고객사의 상품ID(상품코드)를 넣는다.
  • {$searchTerm} : 사이트 내부에서 검색을 통해서 상품상세 페이지로 들어 온 경우, 검색 키워드를 추적하기 위해 지정한다.

상품 정보 추적

상세페이지와 함께 레코벨로 상품 정보를 전달하고자 할 경우, <meta> 태그를 통해 필요한 정보를 기술하고, 이를 스크립트가 읽어 레코벨 서버로 전송한다.

일반적으로 'view' 추적을 하고 있는 페이지에서 _rblq.push(['track','product']); 의 추가를 통해 이 동작을 수행한다.

<meta> 태그는 다음과 같다.

<meta property="rb:type" content="product" />
<meta property="rb:cuid" content="" />
<meta property="rb:itemId" content="" />
<meta property="rb:itemName" content="" />
<meta property="rb:itemImage" content="" />
<meta property="rb:itemUrl" content="" />
<meta property="rb:originalPrice" content="" />
<meta property="rb:salePrice" content="" />
<meta property="rb:category1" content="" />
<meta property="rb:category2" content="" />
<meta property="rb:category3" content="" />
<meta property="rb:brandId" content="" />
<meta property="rb:brandName" content="" />
<meta property="rb:regDate" content="" />
<meta property="rb:updateDate" content="" />
<meta property="rb:stock" content="" />
<meta property="rb:state" content="" />
<meta property="rb:description" content="" />
<meta property="rb:extraImage" content="" />
<meta property="rb:locale" content="" />


<meta> 태그가 나타난 페이지에서 다음 스크립트를 통해 이 정보를 서버로 전송한다.

<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','itemId','{$product_no}']);
  _rblq.push(['setVar','userId','{$user_id}']);
  _rblq.push(['setVar','searchTerm','{$searchTerm}']);  
  _rblq.push(['track','view']);
  _rblq.push(['track','product']);  /* -- IMPORTANT -- */
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>


meta 태그의 property 는 변수의 이름을 의미하며, content 에 적절한 값을 넣어야한다. 각 변수의 의미는 아래와 같다.

Field NameJava Data TypeColumn NameMySql Data TypeNullableE-commerce Descriptionmedia Description
cuidString


Client Unique IdentifierClient Unique Identifier
typeString


productCONTENTS
itemIdStringitem_idvarchar(100)NOT NULL상품ID컨텐츠 ID
itemNameStringitem_namevarchar(500)NOT NULL상품명컨텐츠 제목
itemImageStringitem_imagetextNULL상품 이미지 URL컨텐츠 이미지 URL
itemUrlStringitem_urltextNULL상품 ladning URL컨텐츠 landing URL
originalPricedoubleoriginal_pricedecimal(16,6)NOT NULL제품가격-
salePricedoublesale_pricedecimal(16,6)NOT NULL판매가격-
category1Stringcategory1varchar(50)NOT NULL카테고리 (대)섹션 (대)
category2Stringcategory2varchar(50)NOT NULL카테고리 (중)섹션 (중)
category3Stringcategory3varchar(50)NULL카테고리 (소)섹션 (소)
category4Stringcategory4varchar(50)NULL카테고리 (세)섹션 (세)
category5Stringcategory5varchar(50)NULL카테고리 (세세)섹션 (세세)
brandIdStringbrand_idvarchar(100)NULL브랜드 ID-
brandNameStringbrand_namevarchar(500)NULL브랜드명-
regDateStringreg_datedatetimeNULL상품 등록일, ex) 2015-06-25T05:43:18Z컨텐츠 게재일
updateDateStringupdate_datedatetimeNULL상품 갱신일, ex) 2015-06-25T05:43:18Z컨텐츠 변경일
expireDateStringexpire_datedatetimeNULL상품 만료일, ex) 2015-06-25T05:43:18Z컨텐츠 만료일
stockintstockintNULL재고-
stateStringstatevarchar(100)NULL상품 상태 기술 필드. e.g. available / soldout, pause, stop, ready-
descriptionStringdescriptionSttextNULL상품 설명컨텐츠 내용
extraImageStringextra_imagetextNULL상품 추가 이미지. 다수의 이미지 가능. 필드 구분자로 구분.컨텐츠 추가 이미지
localeStringlocalevarchar(20)NULL지역 코드. 화폐나 상품명이 적용받음. e.g., KR, US, ...컨텐츠 지역 코드


결제완료페이지 
(추천서비스, Keyword7)

결제완료 후 사용자가 주문 내용과 구입한 상품들은 "order" 를 통해 추적할 수 있다.

구입한 상품이 여러개인 경우가 일반적이기 때문에, 상품 마다 그 정보를 추가하는 부분이 필요하다. (뉴스 등의 미디어의 경우는 제외)

상품 정보를 추가하는 스크립트는 다음과 같다.


<script type="text/javascript">
  window._rblq = window._rblq || [];
  /* STAR LOOP: 구매한 모든 상품에 대해 */
  _rblq.push(['addVar', 'orderItems', {itemId:'{$itemId}', price:'{$productPrice}', quantity:'{$productQuantity}'}]);
  /* END LOOP */
</script>

각 변수는 아래와 같다.

  • {$itemId} : 구입한 상품 ID (상품코드). 이때의 상품ID는 상품상세 페이지(view)에서 추적한 상품ID와 동일해야 한다.
  • {$productPrice} : 결제된 상품의 개당 가격
  • {$productQuantity} : 결제된 상품의 수


구입한 상품에 대한 정보를 추가하는 스크립트가 수행 된 후 다음 스크립트를 통해 주문 정보와 함께 서버로 전송한다.

<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','orderId','{$orderId}']);
  _rblq.push(['setVar','orderPrice','{$orderPrice}']);
  _rblq.push(['setVar','userId','{$userId}']); // optional
  _rblq.push(['track','order']);
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>

각 변수는 아래와 같다.

  • {$cuid} : 레코벨에서 발급한 고객사 사이트 ID. 계약 후에 발급된다.
  • {$device} : 현재 방문한 페이지의 분류. 아래 4가지 값 중 하나를 지정하며, 임의의 값 지정도 가능하다.
    • PW : 피씨 웹사이트의 경우
    • MW : 모바일 웹사이트의 경우
    • MI : 아이폰 하이브리드 앱의 웹뷰
    • MA : 안드로이드 하이브리드 앱의 웹뷰
  • {$userId} : 방문한 사용자의 로그인 아이디 (optional) 개인정보 보호 이슈로 인해 HASH 등으로 변환된 값을 지정한다.
  • {$orderId} : 주문번호
  • {$orderPrice} : 총 결제 금액

결제완료 페이지 예시

아래와 같이 상품을 샀다고 가정하면,

주문번호 : 20170101-12345

상품명상품 ID갯수단가
레코벨 패딩PO22222100,000
YX 원피스PO5555150,000
키워드7 달력PO777763,000
쿠폰할인

-2,000

배송비2,500
합계268,500

아래처럼 스크립트가 작성되어야한다.

<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['addVar', 'orderItems', {itemId:'PO2222', price:'100000', quantity:'2'}]); // 레코벨 패딩
  _rblq.push(['addVar', 'orderItems', {itemId:'PO5555', price:'50000', quantity:'1'}]); // YX 원피스
  _rblq.push(['addVar', 'orderItems', {itemId:'PO7777', price:'3000', quantity:'6'}]); // 키워드7 달력
</script>
<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','12345667']); // cuid = 12345667
  _rblq.push(['setVar','device','PW']); // PC 인 경우
  _rblq.push(['setVar','orderId','20170101-12345']);
  _rblq.push(['setVar','orderPrice','268500']);
  _rblq.push(['track','order']);
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>


검색 페이지 (추천서비스, Keyword7)

검색추천을 위해 사용자의 검색 이력을 "search" 를 통해 추적한다.

"search" 를 추적하는 스크립트는 다음과 같다.

<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','userId','{$userId}']); // optional
  _rblq.push(['setVar','searchTerm','{$searchTerm}']);
  _rblq.push(['track','search']);
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>

각 변수는 아래와 같다.

  • {$cuid} : 레코벨에서 발급한 고객사 사이트 ID. 계약 후에 발급된다.
  • {$device} : 현재 방문한 페이지의 분류. 아래 4가지 값 중 하나를 지정하며, 임의의 값 지정도 가능하다.
    • PW : PC Web
    • MW : Mobile Web
    • MI : Mobile iOS
    • MA : Mobile Android
  • {$userId} : 방문한 사용자의 로그인 아이디 (optional) 개인정보 보호 이슈로 인해 HASH 등으로 변환된 값을 지정한다.
  • {$searchTerm} : 현재 검색 결과가 나타난 페이지의 '검색어'

사용자 로그인 정보

사용자의 로그인 또는 사용자의 추가적인 정보를 전달하는 경우 "user" 를 통해 추적한다.

추적 스크립트는 다음과 같다.

<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','userId','{$userId}']);
  _rblq.push(['setVar','gender','{$gender}']);
  _rblq.push(['setVar','age','{$age}']);
  _rblq.push(['track','user']);	
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>

각 변수는 아래와 같다.

  • {$cuid} : 레코벨에서 발급한 고객사 사이트 ID. 계약 후에 발급된다.
  • {$device} : 현재 방문한 페이지의 분류. 아래 4가지 값 중 하나를 지정하며, 임의의 값 지정도 가능하다.
    • PW : 피씨 웹사이트의 경우
    • MW : 모바일 웹사이트의 경우
    • MI : 아이폰 하이브리드 앱의 웹뷰
    • MA : 안드로이드 하이브리드 앱의 웹뷰
  • {$userId} : 방문한 사용자의 로그인 아이디 (optional) 개인정보 보호를 위해 HASH 등으로 변환된 값을 지정한다.
  • {$gender} : 사용자의 성별 (optional) 개인정보 보호를 위해  M/F 보다는 A/B 와 같은 형식으로 변환된 값으로 넣는 것을 추천한다.
  • {$age} : 유저의 나이대, (optional) 개인정보 보호 및 적절한 모수 확보를 위해 나이를 직접 넣지 않고, 20,30,40,50,60 형태의 구간으로 변환된 값으로 넣어야 한다.

콘텐츠 노출 로그 수집 (Exposure)

동기 방식

아래의 두 JS 파일을 html 파일에 포함시킵니다.

// in <head> or <body>, before target <{tag}>
<script type="text/javascript" src="//assets.recobell.io/rblc/js/rblc-apne1.min.js">
<script type="text/javascript" src="//assets.recobell.io/rblc/js/rblexposure.min.js">


메타 태그를 이용해서 cuid, device, userId를 설정해 줍니다. cuid, device는 필수이며, userId는 설정하지 않아도 무방합니다.

<meta property="rb:cuid" content="{$cuid}">
<meta property="rb:device" content="{$device}">
<meta property="rb:userId" content="{$userId}"> //optional


노출 로그를 수집할 콘텐츠가 포함된 최상위 DOM의 class에 rb-exposure를 추가하고, 수집될 정보를 rb-id 혹은 rb-data에 포함시켜 줍니다.

// for single id
<div class="rb-exposure" rb-id="{$exposedItemId}"></div>
<img class="rb-exposure" rb-id="{$exposedItemId}">
<div class="rb-exposure-slide" rb-id="{$exposedItemId}"></div> // slide item for Goodoc
// for json
<div class="rb-exposure" rb-data="{$jsonString}"></div>
<img class="rb-exposure" rb-data="{$jsonString}">
<div class="rb-exposure-slide" rb-data="{$jsonString}"></div> // slide item for Goodoc

...


콘텐츠를 모두 표시한 다음에는 아래의 함수를 호출하여 콘텐츠가 노출되었을 때 노출 로그가 서버로 전송될 수 있도록 합니다.

...
<script type="text/javascript">
rblc.exposure(); // bind event
</script>

비동기 방식

노출 로그를 수집할 콘텐츠가 포함된 최상위 DOM의 class에 rb-exposure를 추가하고, 수집될 정보를 rb-id 혹은 rb-data에 포함시켜 줍니다.

// for single id
<div class="rb-exposure" rb-id="{$exposedItemId}"></div>
<img class="rb-exposure" rb-id="{$exposedItemId}">
<div class="rb-exposure-slide" rb-id="{$exposedItemId}"></div> // slide item for Goodoc
// for json
<div class="rb-exposure" rb-data="{$jsonString}"></div>
<img class="rb-exposure" rb-data="{$jsonString}">
<div class="rb-exposure-slide" rb-data="{$jsonString}"></div> // slide item for Goodoc

...


메타 태그를 이용해서 cuid, device, userId를 설정해 줍니다. cuid, device는 필수이며, userId는 설정하지 않아도 무방합니다.

<meta property="rb:cuid" content="{$cuid}">
<meta property="rb:device" content="{$device}">
<meta property="rb:userId" content="{$userId}"> //optional


아래의 코드를 HTML 파일의 아래 부분에 삽입하여 노출 로그가 수집될 수 있도록 합니다.

<script type="text/javascript">
window._rblq = window._rblq || [];
_rblq.push(['exposure']);
(function(s,x){s=document.createElement('script');s.type='text/javascript';
s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
'://assets.recobell.io/rblc/js/rblc-apne1.min.js';
x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(t, x);})();
</script>

기타 페이지 추적

위 범주에 속하지 않는 사용자가 정의한 정보를 추적할 수 있다.

아래 지정된 변수 외에 필요에 따라 다른 값을 지정할 수 있으며, 이 경우 모든 지정된 정보를 포함하여 서버로 전송한다.

아래 예시에서 _rblq.push(['track','page']); 로 지정되어 있는 부분은 'page'  외에 다른 값으로 지정 가능하다.


<script type="text/javascript">
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','userId','{$userId}']); // optional
  _rblq.push(['setVar','url']); // optional if url is neeeded.
  _rblq.push(['setVar','referrer']); // optional if referrer is needed.
  _rblq.push(['track','{$logType}']);
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>

각 변수는 아래와 같다.

  • {$cuid} : 레코벨에서 발급한 고객사 사이트 ID. 계약 후에 발급된다.
  • {$device} : 현재 방문한 페이지의 분류. 아래 4가지 값 중 하나를 지정하며, 임의의 값 지정도 가능하다.
    • PW : 피씨 웹사이트의 경우
    • MW : 모바일 웹사이트의 경우
    • MI : 아이폰 하이브리드 앱의 웹뷰
    • MA : 안드로이드 하이브리드 앱의 웹뷰
  • {$userId} : 방문한 사용자의 로그인 아이디 (optional) 개인정보 보호 이슈로 인해 HASH 등으로 변환된 값을 지정한다.
  • {$logType} : 사전에 정의된 로그 타입을 사용한다.

레코벨 Logger 에 정보를 전달하는 방법

추천영역이 삽입되고, 그 추천영역에서의 기여도를 레코벨 Logger 에서 보고싶다면 아래와 같은 Query Parameter 를 상품상세로 가는 href 에 추가하면 된다.

<a href="상품링크?foo=bar&rccode={$parameterValue}">link</a>

{$parameterValue} 는 임의의 값으로 지정한다.

예를 들면, rccode=recobell_pc_detail 또는 rccode=pc_main_rec1 와 같은 형태이다.

내부 검색 키워드 정보를 전달하는 방법

내부 검색 이후 상품상세페이지를 방문했을 때 어떠한 검색어를 검색한 후 상품상세페이지를 방문했는지에 대한 정보를 전달하기 위해서는 rbst 라는 Query Parameter에 해당 검색어를 넣으면 된다.

<a href="상품링크?foo=bar&rbst={$searchTerm}">link</a>

예를 들어, 의자라는 검색어를 (내부)검색한 후, 특정 상품의 상세페이지를 방문했을 경우 rbst=의자 를 넣어주면 된다.

장애 대비 사항

레코벨 로거 스크립트는 스크립트를 불러오지 못하거나 서버의 응답이 없을 경우에 다음과 같이 동작하도록 되어 있다.

  • 모든 JavaScript 코드는 비동기(asynchronous)로 동작한다.
  • 로그는 데이터 전송에 GET을 사용하고 그 응답으로 1x1 image 를 받는 것으로 동작하며, 이는 IE8 등의 과거 브라우저에서도 동작한다.
  • 응답으로 image 로드가 2초이상 걸릴 경우, 요청을 중지(abort) 한다.

최근 클릭 상품 이용 방법

"view" 추적이 동작할 때 사용자의 최근 클릭 상품 정보를 사용자의 브라우저에 저장한다.

사용자의 브라우저의 localStorage 에 사용자가 클릭한 상품의 상품번호를 최근 순서대로 최대 10개까지 저장하고 있다.

localStorage 의 RB_VIEWED_ITEMS 항목에 콤마(,)로 구분된 형식으로 저장이 된다.

localStorage 를 활용할 수 없는 환경의 경우, 아래 코드 중 _rblconf.useCookieStorage 설정으로 Cookie 에도 추가적으로 최근클릭 상품정보를 저장한다.

쿠키에 저장되는 RB_VIEWED_ITEMS 항목은 urlencode된 콤마(,), 즉 %2C로 구분된 형식으로 저장이 된다.


<script type="text/javascript">
  window._rblconf = window._rblconf || {};
  _rblconf.useCookieStorage = true;
  window._rblq = window._rblq || [];
  _rblq.push(['setVar','cuid','{$cuid}']);
  _rblq.push(['setVar','device','{$device}']);
  _rblq.push(['setVar','itemId','{$itemId}']);
  _rblq.push(['setVar','userId','{$userId}']); // optional
  _rblq.push(['setVar','searchTerm','{$searchTerm}']);
  _rblq.push(['track','view']);	
  (function(s,x){s=document.createElement('script');s.type='text/javascript';
  s.async=true;s.defer=true;s.src=(('https:'==document.location.protocol)?'https':'http')+
  '://assets.recobell.io/rblc/js/rblc-apne1.min.js';
  x=document.getElementsByTagName('script')[0];x.parentNode.insertBefore(s, x);})();
</script>

동기화 추적

위 방식은 비동기(asynchronous) 방식으로, Array 에 동작을 저장한 후, 스크립트가 로딩됨과 동시에 추적이 수행되는 방식이다.

이와 다르게 동기화된 추적이 필요할 경우, 사전에 스크립트 로딩 후 함수 호출을 사용하여 스크립트를 구성할 수 있다.

<body>
	<script type='text/javascript' src='//assets.recobell.io/rblc/js/rblc-apne1.min.js'></script>
	<script type='text/javascript'>
		// Product 는 cuid 만 설정 후 track 함수 호출
		rblc.op('setVar','cuid','{$cuid}');
		rblc.op('track','product');
	</script>

	<script type='text/javascript'>
		// 그 외의 페이지
		rblc.op('setVar','cuid','{$cuid}');
		rblc.op('setVar','device','{$device}');
		rblc.op('setVar','itemId','{$itemId}');
		rblc.op('setVar','userId','{$userId}'); //optional
		rblc.op('setVar','searchTerm','{$searchTerm}');
		rblc.op('track','view');
	</script>
</body>

Order 동기화 추적

위와 같은 방식으로 동작. 고객이 주문한 각 상품에 대한 정보를 orderItems 배열에 저장하는 반복문 실행.  차례로 cuid, device, orderid, orderPrice(총 주문금액), userId(optional)을 작성하고 track함수를 호출해 order 로그 전송.

<body>
	...
	...
	...
    <script type='text/javascript' src='//assets.recobell.io/rblc/js/rblc-apne1.min.js'></script>
    <script type="text/javascript">
    /* STAR LOOP: 구매한 모든 상품에 대해 */
      rblc.op('addVar', 'orderItems', {itemId:'{$itemId}', price:'{$productPrice}', quantity:'{$productQuantity}'});
    /* END LOOP */
    </script>
    <script type='text/javascript'>
        rblc.op('setVar','cuid','{$cuid}');
        rblc.op('setVar','device','{$device}');
        rblc.op('setVar','orderId','{$orderId}');
        rblc.op('setVar','orderPrice','{$orderPrice}');
        rblc.op('setVar','userId','{$userId}'); // optional
        rblc.op('track','order');
    </script>
</body>

A-B 테스트를 이용한 초기화면 PCID 강제 생성 스크립트

A-B 테스트를 실시할 경우 초기화면에 로거가 없을 경우 PCID가 생성되지 않을 수 있다. 이에 초기화면에 PCID를 강제 생성하는 스크립트를 삽입하는 것을 권장한다.


POST 를 이용한 직접 입력

레코벨 로거는 POST 를 지원한다.

  • URL : http(s)://rblogger-receiver-apne1.recobell.io/rest/logs
  • Content-Type :  application/json
  • Body : 아래와 같이 사용이 가능하다.

    {
    	"cuid": "{$cuid}",
    	"type": "{$type}"
    	"device": "{$device}",
    	"pcId": "{$pcId}",
        "sessionId": "{$sessionId}"
    }


     view

    {
        "cuid": "{$cuid}",
        "type": "view"
        "device": "{$device}",
        "itemId": "{$itemId}",
        "userId": "{$userId}",
        "searchTerm": "{$searchTerm}",
        "pcId": "{$pcId}",
        "sessionId": "{$sessionId}"
    }

    product

    {
        "cuid": "{$cuid}",
        "type": "product"
        "itemId": "{$itemId}",
        "itemName": "{$itemName}",
        "itemUrl": "{$itemUrl}",
        "originalPrice": "{$originalPrice }",
        "salePrice":"{$salePrice}",
        "category1":"{$category1}",
        "category2":"{$category2}",
        "category3":"{$category3}",
        "brandId":"{$brandId}",
        "brandName":"{$brandName}",
        "regDate":"{$regDate}",
        "updateDate":"{$updateDate}",
        "stock":"{$stock}",
        "state":"{$state}",
        "description": "{$description}",
        "extraImage": "{$extraImage}",
        "locale": "{$locale}",
        "pcId": "{$pcId}",
        "sessionId": "{$sessionId}"
    }

    order

    {
        "cuid": "{$cuid}",
        "type": "order"
        "device": "{$device}",
        "orderId": "{$orderId}",
        "orderPrice": "{$orderPrice}",
        "userId ": "{$userId}",
        "pcId": "{$pcId}",
        "sessionId": "{$sessionId}"
    }

    visit (**visit은 모든페이지에 적용되도록 작업해주세요.)

    {
        "cuid": "{$cuid}",
        "type": "visit"
        "device": "{$device}",
        "itemId": "{$itemId}",
        "userId": "{$userId}",
        "pcId": "{$pcId}",
        "sessionId": "{$sessionId}"
    }

    user

    {
        "cuid": "{$cuid}",
        "type": "user"
        "device": "{$device}",
        "userId ": "{$userId}",
        "gender": "{$gender}",
        "age": "{$age}",
        "pcId": "{$pcId}",
        "sessionId": "{$sessionId}"
    }
    • 이 때 pcId 값은 웹뷰를 사용할 경우 쿠키 중 RB_PCID 값으로, sessionId 값은 쿠키 중 RB_SSID 값으로 설정을 하면 된다.
    • 웹뷰를 사용하지 않을 경우 
      • pcId 값은 ms 단위의 타임스탬프 값과 100000에서 999999 사이의 무작위 6자리 숫자를 이어붙인 값으로 설정하고,
      • sessionId 값은 10자리의 무작위 알파벳대소문자+숫자의 조합으로 설정을 하되, 세션이 끊기거나, 30분 이상 활성화가 되지 않을 경우 새로운 값으로 변경을 하면 된다