장바구니 이탈 복구
장바구니 이탈 복구
지능형 다단계 이메일 시퀀스로 손실된 판매를 복구합니다. 이 스킬은 장바구니 이탈을 모니터링하고 개인화된 복구 이메일을 자동으로 발송하여 고객을 다시 불러옵니다.
개요
| 속성 | 값 |
|---|---|
| 카테고리 | Email Marketing |
| 상태 | Stable |
| 버전 | 3.0 |
| 트리거 | cart_abandoned, cart_recovered |
| 평균 복구율 | 10-15% |
작동 방식
graph TD A[Customer adds to cart] -->|Leaves site| B{Cart abandoned?} B -->|No checkout in 30min| C[Trigger: cart_abandoned] C --> D[Wait 1 hour] D --> E{Purchased?} E -->|No| F[Send Email #1] F --> G[Wait 24 hours] G --> H{Purchased?} H -->|No| I[Send Email #2 + Discount] I --> J[Wait 48 hours] J --> K{Purchased?} K -->|No| L[Send Email #3 - Final] E -->|Yes| M[Stop sequence] H -->|Yes| M K -->|Yes| M L --> N[Mark as lost]구성
기본 설정
skills: abandoned-cart: enabled: true
# Cart abandonment detection detection: inactivity_threshold: 30m # Minutes before cart is abandoned min_cart_value: 25 # Minimum cart value to trigger exclude_logged_out: false # Include guest carts
# Email sequence sequence: - delay: 1h template_id: 101 subject: "Forgot something?"
- delay: 24h template_id: 102 subject: "Your cart is waiting" include_discount: true discount_percent: 10
- delay: 48h template_id: 103 subject: "Last chance - items selling fast" include_discount: true discount_percent: 15 discount_expiry: 24h
# Stop conditions stop_on: - cart_recovered - order_placed - unsubscribe고급 구성
skills: abandoned-cart: # Segment-specific timing timing: vip_customers: first_email: 30m discount_threshold: 0 # Always include discount new_customers: first_email: 2h discount_threshold: 50 # Discount only if cart > $50 repeat_customers: first_email: 1h discount_threshold: 100
# A/B testing ab_testing: enabled: true variants: - name: "urgency" subject: "Items in your cart are selling fast!" weight: 50 - name: "friendly" subject: "Did you forget something?" weight: 50
# Exclusions exclude: - email_domain: ["temp-mail.com", "disposable.com"] - customer_tag: ["wholesale", "staff"] - product_category: ["gift-cards"]트리거
cart_abandoned
장바구니가 구성된 임계값 동안 비활성 상태일 때 발생합니다.
이벤트 데이터
| Parameter | Type | Description |
|---|---|---|
cart_id required | string | 고유 장바구니 식별자 |
customer_email required | string | 고객의 이메일 주소 |
items required | array | name, price, quantity, image_url을 포함한 장바구니 항목 배열 |
total required | number | 장바구니 총액 |
currency optional | string | 통화 코드(예: USD, EUR) |
recovery_url required | string | 장바구니를 복구할 URL |
abandoned_at required | datetime | 장바구니가 이탈된 시점 |
페이로드 예시:
{ "event": "cart_abandoned", "timestamp": "2024-01-15T14:30:00Z", "data": { "cart_id": "cart_abc123", "items": [ { "id": "prod_123", "name": "Premium Headphones", "price": 199.99, "quantity": 1, "image_url": "https://cdn.example.com/headphones.jpg", "variant": "Black" }, { "id": "prod_456", "name": "Phone Case", "price": 29.99, "quantity": 2, "image_url": "https://cdn.example.com/case.jpg" } ], "subtotal": 259.97, "shipping": 0, "tax": 20.80, "total": 280.77, "currency": "USD", "recovery_url": "https://store.example.com/cart/recover/abc123", "abandoned_at": "2024-01-15T14:00:00Z" }}cart_recovered
고객이 돌아와 결제를 완료할 때 발생합니다.
{ "event": "cart_recovered", "timestamp": "2024-01-15T16:45:00Z", "data": { "cart_id": "cart_abc123", "order_id": "order_789", "recovered_via": "email_1", // Which email triggered recovery "time_to_recover": "2h15m" }}이메일 템플릿
템플릿 변수
Brevo 이메일 템플릿에서 다음 변수를 사용하세요.
| 변수 | 설명 | 예시 |
|---|---|---|
params.FIRSTNAME | 고객의 이름 | Jane |
params.CART_URL | 장바구니 복구 URL | https://… |
params.CART_TOTAL | 포맷된 장바구니 총액 | $280.77 |
params.ITEM_COUNT | 항목 수 | 3 |
params.ITEMS | 항목의 JSON 배열 | […] |
params.DISCOUNT_CODE | 생성된 할인 코드 | SAVE10-ABC |
params.DISCOUNT_PERCENT | 할인율 | 10 |
params.EXPIRY_DATE | 할인 만료일 | Jan 17, 2024 |
권장 이메일 시퀀스
이메일 1 (1시간): 부드러운 리마인더
- 제목: “뭔가 잊으셨나요, {{ params.FIRSTNAME }}?”
- 초점: 장바구니 내용 알림
- 아직 할인 없음
이메일 2 (24시간): 긴급성 + 인센티브 추가
- 제목: “장바구니가 기다리고 있어요 + 10% 할인”
- 초점: 기간 한정 할인
- 할인 코드 포함
이메일 3 (48시간): 마지막 푸시
- 제목: “마지막 기회 - 15% 할인 곧 만료”
- 초점: 희소성 + 더 강력한 할인
- 24시간 할인 만료
코드 예제
장바구니 이탈 스킬 활성화
import { TajoClient } from '@tajo/sdk';
const tajo = new TajoClient({ apiKey: process.env.TAJO_API_KEY, brevoApiKey: process.env.BREVO_API_KEY});
await tajo.skills.enable('abandoned-cart', { detection: { inactivityThreshold: '30m', minCartValue: 25 }, sequence: [ { delay: '1h', templateId: 101 }, { delay: '24h', templateId: 102, discountPercent: 10 }, { delay: '48h', templateId: 103, discountPercent: 15 } ]});장바구니 이탈 추적
// Call this when cart activity is detectedawait tajo.events.track('cart_updated', { cartId: 'cart_abc123', items: cartItems, total: 280.77});
// Call this when customer leaves without checkout// (typically from a beforeunload event or session timeout)await tajo.events.track('cart_abandoned', { cartId: 'cart_abc123', items: cartItems, total: 280.77, recoveryUrl: 'https://store.example.com/cart/recover/abc123'});할인 코드 생성
// Generate a unique discount codeconst discount = await tajo.discounts.create({ type: 'percentage', value: 10, expiresIn: '7d', usageLimit: 1, prefix: 'SAVE10'});
// discount.code => "SAVE10-ABC123"애널리틱스
장바구니 이탈 복구 성과를 추적합니다.
| 지표 | 설명 |
|---|---|
| 이탈률 | 이탈된 장바구니의 % |
| 복구율 | 복구된 이탈 장바구니의 % |
| 복구된 매출 | 복구된 장바구니의 총 매출 |
| 이메일 오픈율 | 열린 복구 이메일의 % |
| 이메일 CTR | 복구 이메일의 클릭률 |
| 복구 소요 시간 | 이탈부터 구매까지의 평균 시간 |
const stats = await tajo.skills.getStats('abandoned-cart', { period: '30d'});
console.log(stats);// {// abandonmentRate: 68.5,// recoveryRate: 12.3,// revenueRecovered: 15420.50,// emailsSent: 2340,// emailOpenRate: 45.2,// emailCtr: 8.7,// avgTimeToRecovery: '4h32m'// }모범 사례
타이밍이 중요합니다
이탈 후 1-2시간 이내에 첫 이메일을 발송하세요. 24시간 후에는 복구율이 크게 떨어집니다.
- 제목 줄 개인화 - 고객 이름과 장바구니 내용을 사용하세요
- 장바구니 내용 표시 - 이메일에 제품 이미지를 포함하세요
- 긴급성 조성 - 재고 부족 또는 기간 한정 할인을 언급하세요
- 복구를 쉽게 만들기 - 원클릭 장바구니 복구 링크를 제공하세요
- 시퀀스 테스트 - 타이밍, 제목 줄, 할인에 대해 A/B 테스트하세요
- 수신 거부 존중 - 수신 거부 시 시퀀스를 즉시 중단하세요
관련 스킬
다음 단계
- 플랫폼에 장바구니 추적 설정
- Brevo에서 이메일 템플릿 생성
- 할인 코드 통합 구성
- 대시보드에서 성과 모니터링