브라우저 SDK (sdk-web)

브라우저에서 회원가입·리드·커스텀 전환 이벤트를 전송하는 @edgelinkapp/sdk-web 사용법

@edgelinkapp/sdk-web은 고객 사이트의 브라우저에서 회원가입·리드·커스텀 이벤트를 Edgelink로 전송하는 5KB(gzip) 미만의 경량 SDK입니다.

설치

CDN 스크립트 태그가 표준 설치 방식입니다. 별도 npm 설치는 필요하지 않습니다.

<script
  async
  src="https://cdn.edgelink.me/sdk/v1/edgelink.iife.js"
  data-publishable-key="pk_live_xxxxxxxxxxxx"
></script>

data-publishable-key 속성에 발급받은 publishable 키(pk_live_* 또는 pk_test_*)를 넣습니다. live와 test를 분리해 발급받아 스테이징·프로덕션에서 각각 사용하세요.

주요 동작

스크립트가 로드되면 SDK는 자동으로 다음 작업을 수행합니다:

  1. URL의 ?el_cid= 파라미터를 감지하여 _el_cid 쿠키에 저장 (90일, SameSite=Lax)
  2. GPC/DNT 신호 감지. 신호가 있으면 모든 이벤트를 no-op 처리
  3. window.edgelink 함수 노출. 스니펫보다 먼저 호출된 큐(stub)는 자동 drain

이벤트 전송

회원가입 추적

<script>
  edgelink('track', 'signup', {
    externalUserId: 'user-1234',
    customerEmailHash: 'hashed-email-or-null',
  })
</script>
필드타입설명
이벤트명string자유 식별자. 예: signup, subscribe
externalUserIdstring?고객사 측 user ID. 후속 이벤트와 동일 사용자 매칭에 사용
customerEmailHashstring?이메일 SHA-256 해시(lowercase). 평문 금지
externalEventIdstring?멱등키. 동일 키 재전송 시 중복 저장 안 됨

커스텀 이벤트

<script>
  edgelink('track', 'video-completed', { videoId: 'intro-2026' })
</script>

metadata는 자동 분리되어 저장됩니다. 8KB를 초과하면 거부됩니다.

사용자 식별 (identify)

회원가입 직후 클릭과 사용자를 묶어 두면, 사용자가 다른 기기로 로그인해도 매칭이 유지됩니다(후속 spec).

<script>
  edgelink('identify', 'user-1234', { plan: 'pro' })
</script>

에러 처리

SDK는 4xx 응답을 즉시 폐기하고 console에 경고만 표시합니다. 5xx·network 에러는 localStorage 큐로 백오프 재시도합니다(최대 24시간).

응답동작
200정상 처리
400 INVALID_PAYLOAD즉시 폐기 + console.warn
401 INVALID_KEY즉시 폐기 + console.error
401 ORIGIN_NOT_ALLOWED즉시 폐기 + console.error (allowedOrigins 점검 필요)
403 CONVERSION_TRACKING_NOT_ENABLED즉시 폐기 + console.error (Pro 플랜 활성 필요)
410 CLICK_EXPIRED즉시 폐기
429 RATE_LIMITEDRetry-After 헤더 존중하여 재큐잉
5xx지수 백오프 재시도

허용 Origin 설정

publishable 키 발급 시 허용 Origin 목록을 설정합니다. Origin 헤더가 일치하지 않으면 ORIGIN_NOT_ALLOWED 에러로 거부됩니다.

https://myshop.com
https://*.myshop.com   (단일 서브도메인)
  • live 모드 키는 허용 Origin을 1개 이상 등록해야 발급되고, 허용 Origin이 비어 있는 live 키의 요청은 거부됩니다. 키가 노출되더라도 등록하지 않은 사이트에서는 이벤트를 보낼 수 없습니다.
  • *, https://*.com, 스킴이 없는 값(myshop.com), 경로가 붙은 값(https://myshop.com/shop)은 등록할 수 없습니다.
  • localhost / 127.0.0.1 / *.local은 test 모드 키에서 자동 허용되므로, test 모드 키는 허용 Origin을 비워 둘 수 있습니다.

다음 단계

자주 묻는 질문

sdk-web으로 sale(매출) 이벤트도 보낼 수 있나요?

보낼 수 없습니다. publishable 키 + 브라우저 환경에서는 매출 위변조 우려가 있어 `sale` 이벤트가 거부됩니다(`SALE_REQUIRES_SECRET_KEY`). 매출은 서버에서 sdk-node로 전송하세요.

광고 차단기를 사용하는 사용자도 이벤트가 전송되나요?

주요 차단기에서 `/api/v1/track` 엔드포인트가 차단될 수 있습니다. SDK는 `sendBeacon` → `fetch keepalive` → `localStorage` 큐 백오프 순으로 폴백하지만, 차단되면 결국 도달하지 않을 수 있습니다.

GPC/DNT 신호가 있는 사용자도 추적되나요?

추적되지 않습니다. SDK는 Sec-GPC=1 또는 navigator.doNotTrack=1 신호를 감지하면 모든 이벤트를 no-op 처리합니다. PIPA·GDPR 컴플라이언스를 위한 기본값입니다.

쿠키 없이도 사용할 수 있나요?

사용할 수 있지만 권장하지 않습니다. _el_cid 쿠키 없이 호출 시 `externalUserId`를 명시적으로 전달해야 하며, 매칭률이 크게 떨어집니다.