Gmail 및 Google 스프레드시트 분석을 사용한 버려진 장바구니 복구 기능
중급
이것은Social Media분야의자동화 워크플로우로, 13개의 노드를 포함합니다.주로 If, Set, Code, Wait, Gmail 등의 노드를 사용하며. 사용Gmail및Google表格분석의废弃购物车恢复功能
사전 요구사항
- •Google 계정 및 Gmail API 인증 정보
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •Google Sheets API 인증 정보
카테고리
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"nodes": [
{
"id": "1",
"name": "장바구니 포기됨 Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
240,
300
],
"parameters": {
"path": "cart-abandoned",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"id": "2",
"name": "메모지",
"type": "n8n-nodes-base.stickyNote",
"position": [
140,
180
],
"parameters": {
"width": 240,
"height": 160,
"content": "## Cart Recovery Config\n\n⚙️ **Customize these settings:**\n- Recovery sequence timing\n- Discount percentages\n- Email templates\n- Exclusion rules"
},
"typeVersion": 1
},
{
"id": "3",
"name": "복구 설정",
"type": "n8n-nodes-base.set",
"position": [
440,
300
],
"parameters": {
"values": {
"number": [
{
"name": "firstDiscount",
"value": 10
},
{
"name": "secondDiscount",
"value": 15
},
{
"name": "finalDiscount",
"value": 20
}
],
"string": [
{
"name": "fromEmail",
"value": "sales@your-store.com"
},
{
"name": "baseUrl",
"value": "https://your-store.com"
}
]
}
},
"typeVersion": 1
},
{
"id": "4",
"name": "장바구니 자격 확인",
"type": "n8n-nodes-base.if",
"position": [
640,
300
],
"parameters": {
"conditions": {
"options": {
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $json.cart_value }}",
"rightValue": 50
},
{
"operator": {
"type": "string",
"operation": "isNotEmpty"
},
"leftValue": "={{ $json.customer_email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "5",
"name": "복구 데이터 생성",
"type": "n8n-nodes-base.code",
"position": [
840,
300
],
"parameters": {
"jsCode": "// Generate discount codes for recovery sequence\nconst cartId = $json.cart_id;\nconst customerEmail = $json.customer_email;\nconst timestamp = Date.now();\n\n// Create unique discount codes\nconst codes = {\n firstCode: `SAVE${$node['Recovery Settings'].json.firstDiscount}-${cartId.slice(-4)}`,\n secondCode: `SAVE${$node['Recovery Settings'].json.secondDiscount}-${cartId.slice(-4)}`,\n finalCode: `SAVE${$node['Recovery Settings'].json.finalDiscount}-${cartId.slice(-4)}`\n};\n\n// Calculate recovery schedule\nconst schedules = {\n firstEmail: new Date(timestamp + 1 * 60 * 60 * 1000).toISOString(), // 1 hour\n secondEmail: new Date(timestamp + 24 * 60 * 60 * 1000).toISOString(), // 24 hours\n finalEmail: new Date(timestamp + 72 * 60 * 60 * 1000).toISOString() // 72 hours\n};\n\nreturn {\n ...codes,\n ...schedules,\n cartData: $json,\n recoveryId: `recovery_${cartId}_${timestamp}`\n};"
},
"typeVersion": 1
},
{
"id": "6",
"name": "1시간 대기",
"type": "n8n-nodes-base.wait",
"position": [
1040,
200
],
"parameters": {
"unit": "hours",
"amount": 1
},
"typeVersion": 1
},
{
"id": "7",
"name": "첫 번째 복구 이메일 전송",
"type": "n8n-nodes-base.gmail",
"position": [
1240,
200
],
"parameters": {
"sendTo": "={{ $node['Generate Recovery Data'].json.cartData.customer_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; border-radius: 10px; padding: 30px; }\n .header { text-align: center; margin-bottom: 30px; }\n .product-item { border: 1px solid #eee; padding: 20px; margin: 10px 0; border-radius: 8px; }\n .cta-button { background: #007bff; color: white; padding: 15px 30px; text-decoration: none; border-radius: 5px; display: inline-block; margin: 20px 0; }\n .discount { background: #28a745; color: white; padding: 10px; text-align: center; margin: 20px 0; border-radius: 5px; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h2>Your cart is waiting for you! 🛒</h2>\n <p>Hello {{ $node['Generate Recovery Data'].json.cartData.customer_name }},</p>\n <p>You left some items in your cart. Don't let them get away!</p>\n </div>\n \n {{#each $node['Generate Recovery Data'].json.cartData.items}}\n <div class=\"product-item\">\n <h3>{{ this.name }}</h3>\n <p>Price: {{ this.price }} €</p>\n <p>Quantity: {{ this.quantity }}</p>\n </div>\n {{/each}}\n \n <div class=\"discount\">\n <h3>🎉 Special offer - 10% discount!</h3>\n <p>Code: <strong>{{ $node['Generate Recovery Data'].json.firstCode }}</strong></p>\n </div>\n \n <div style=\"text-align: center;\">\n <a href=\"{{ $node['Recovery Settings'].json.baseUrl }}/cart/{{ $node['Generate Recovery Data'].json.cartData.cart_id }}\" class=\"cta-button\">\n Complete my order\n </a>\n </div>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n This offer expires in 24 hours. Hurry up!\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "You forgot something in your cart 🛒"
},
"typeVersion": 1
},
{
"id": "8",
"name": "23시간 추가 대기",
"type": "n8n-nodes-base.wait",
"position": [
1440,
200
],
"parameters": {
"unit": "hours",
"amount": 23
},
"typeVersion": 1
},
{
"id": "9",
"name": "두 번째 복구 이메일 전송",
"type": "n8n-nodes-base.gmail",
"position": [
1640,
200
],
"parameters": {
"sendTo": "={{ $node['Generate Recovery Data'].json.cartData.customer_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; border-radius: 10px; padding: 30px; }\n .header { text-align: center; margin-bottom: 30px; }\n .urgency { background: #dc3545; color: white; padding: 15px; text-align: center; margin: 20px 0; border-radius: 5px; }\n .cta-button { background: #28a745; color: white; padding: 15px 30px; text-decoration: none; border-radius: 5px; display: inline-block; margin: 20px 0; }\n .discount { background: #ffc107; color: #212529; padding: 15px; text-align: center; margin: 20px 0; border-radius: 5px; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h2>🚨 Your cart expires soon!</h2>\n <p>Hello {{ $node['Generate Recovery Data'].json.cartData.customer_name }},</p>\n </div>\n \n <div class=\"urgency\">\n <h3>⏰ Only a few hours left!</h3>\n <p>Your cart will be automatically deleted soon</p>\n </div>\n \n <div class=\"discount\">\n <h3>🎁 Exceptional offer - 15% discount!</h3>\n <p>Code: <strong>{{ $node['Generate Recovery Data'].json.secondCode }}</strong></p>\n <p>Valid only for the next 24 hours</p>\n </div>\n \n <div style=\"text-align: center;\">\n <a href=\"{{ $node['Recovery Settings'].json.baseUrl }}/cart/{{ $node['Generate Recovery Data'].json.cartData.cart_id }}\" class=\"cta-button\">\n I'll recover my cart now\n </a>\n </div>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n Your cart total: {{ $node['Generate Recovery Data'].json.cartData.cart_value }} €\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "Last chance - Your discount is waiting! 💸"
},
"typeVersion": 1
},
{
"id": "10",
"name": "48시간 추가 대기",
"type": "n8n-nodes-base.wait",
"position": [
1840,
200
],
"parameters": {
"unit": "hours",
"amount": 48
},
"typeVersion": 1
},
{
"id": "11",
"name": "최종 복구 이메일 전송",
"type": "n8n-nodes-base.gmail",
"position": [
2040,
200
],
"parameters": {
"sendTo": "={{ $node['Generate Recovery Data'].json.cartData.customer_email }}",
"message": "=<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background-color: #f8f9fa; }\n .container { max-width: 600px; margin: 0 auto; background: white; border-radius: 10px; padding: 30px; }\n .header { text-align: center; margin-bottom: 30px; }\n .final-offer { background: linear-gradient(45deg, #ff6b6b, #ffa500); color: white; padding: 20px; text-align: center; margin: 20px 0; border-radius: 10px; }\n .cta-button { background: #dc3545; color: white; padding: 20px 40px; text-decoration: none; border-radius: 5px; display: inline-block; margin: 20px 0; font-size: 18px; }\n .testimonial { background: #e9ecef; padding: 15px; margin: 20px 0; border-radius: 5px; font-style: italic; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <div class=\"header\">\n <h2>🔥 Final offer - Don't miss this chance!</h2>\n <p>{{ $node['Generate Recovery Data'].json.cartData.customer_name }}, this is really your last chance...</p>\n </div>\n \n <div class=\"final-offer\">\n <h2>🎯 EXCLUSIVE OFFER</h2>\n <h3>20% DISCOUNT</h3>\n <p>Code: <strong>{{ $node['Generate Recovery Data'].json.finalCode }}</strong></p>\n <p>⏰ Expires in 24 hours - Definitely!</p>\n </div>\n \n <div class=\"testimonial\">\n <p>\"I loved my purchases on this site! Fast delivery and quality products.\" - Sarah M.</p>\n </div>\n \n <div style=\"text-align: center;\">\n <a href=\"{{ $node['Recovery Settings'].json.baseUrl }}/cart/{{ $node['Generate Recovery Data'].json.cartData.cart_id }}\" class=\"cta-button\">\n I'll take advantage now!\n </a>\n </div>\n \n <p style=\"color: #666; font-size: 14px; margin-top: 30px;\">\n If you no longer want to receive these emails, <a href=\"#\">click here</a>.\n </p>\n </div>\n</body>\n</html>",
"options": {
"contentType": "html"
},
"subject": "Absolutely last chance - 20% discount! 🔥"
},
"typeVersion": 1
},
{
"id": "12",
"name": "메모지1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1940,
60
],
"parameters": {
"width": 240,
"height": 160,
"content": "## Recovery Analytics\n\n📊 **Track performance:**\n- Recovery conversion rates\n- Revenue generated\n- Email open rates\n- Best performing sequences"
},
"typeVersion": 1
},
{
"id": "13",
"name": "복구 추적 시작",
"type": "n8n-nodes-base.googleSheets",
"position": [
1040,
400
],
"parameters": {
"values": {
"values": [
"={{ $node['Generate Recovery Data'].json.recoveryId }}",
"={{ $node['Generate Recovery Data'].json.cartData.customer_email }}",
"={{ $node['Generate Recovery Data'].json.cartData.cart_value }}",
"={{ new Date().toISOString() }}",
"sequence_started"
]
},
"resource": "sheet",
"operation": "appendRow",
"sheetName": "Cart Recovery Tracking",
"documentId": "your-google-sheet-id"
},
"typeVersion": 1
}
],
"connections": {
"1": {
"main": [
[
{
"node": "3",
"type": "main",
"index": 0
}
]
]
},
"3": {
"main": [
[
{
"node": "4",
"type": "main",
"index": 0
}
]
]
},
"4": {
"main": [
[
{
"node": "5",
"type": "main",
"index": 0
}
]
]
},
"5": {
"main": [
[
{
"node": "6",
"type": "main",
"index": 0
},
{
"node": "13",
"type": "main",
"index": 0
}
]
]
},
"6": {
"main": [
[
{
"node": "7",
"type": "main",
"index": 0
}
]
]
},
"7": {
"main": [
[
{
"node": "8",
"type": "main",
"index": 0
}
]
]
},
"8": {
"main": [
[
{
"node": "9",
"type": "main",
"index": 0
}
]
]
},
"9": {
"main": [
[
{
"node": "10",
"type": "main",
"index": 0
}
]
]
},
"10": {
"main": [
[
{
"node": "11",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
중급 - 소셜 미디어
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
Gmail 알림과 Google 스프레드시트를 사용한 이벤트 등록 및 후속 자동화
Gmail 알림과 Google Sheets를 사용한 이벤트 등록 및 후속 조치 자동화
If
Set
Code
+
If
Set
Code
14 노드Rodrigue
소셜 미디어
AI 평점과 Gmail을 사용하여 소셜 미디어 인플루언서 활동을 홍보 관리
AI 평점과 Gmail 프로모션을 통해 소셜 미디어 인플루언서 활동 관리
If
Set
Code
+
If
Set
Code
15 노드Rodrigue
소셜 미디어
GPT-4 점수 매기기 및 Gmail 알림을 사용한 후보자 평가 자동화
GPT-4 점수 매기기와 Gmail 알림을 사용한 후보자 평가 자동화
If
Set
Code
+
If
Set
Code
12 노드Rodrigue
인사
공급업체 위험 점수 자동화
D&B, NewsAPI 및 Gmail 알림을 사용한 공급업체 위험 점수 자동화
If
Set
Code
+
If
Set
Code
16 노드Rodrigue
기타
HubSpot 연락처와 SharePoint에 AI 작성된 뉴스레터와 자료 생성
GPT-4o, AI 이미지, 비디오를 통해 HubSpot과 SharePoint으로 양어 뉴스 레이터 생성
If
Set
Code
+
If
Set
Code
49 노드plemeo
소셜 미디어
리드 생성 및 이메일 워크플로
Google 지도, SendGrid 및 AI를 사용한 B2B 잠재 고객 개발 및 이메일 마케팅 자동화
If
Set
Code
+
If
Set
Code
141 노드Ezema Kingsley Chibuzo
리드 생성