8
n8n 한국어amn8n.com

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)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수13
카테고리1
노드 유형8
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34