Función de recuperación de carritos abandonados con análisis usando Gmail y Google Sheets
Este es unSocial Mediaflujo de automatización del dominio deautomatización que contiene 13 nodos.Utiliza principalmente nodos como If, Set, Code, Wait, Gmail. Función de recuperación de carritos abandonados usando Gmail y análisis de Google Sheets
- •Cuenta de Google y credenciales de API de Gmail
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •Credenciales de API de Google Sheets
Nodos utilizados (13)
Categoría
{
"nodes": [
{
"id": "1",
"name": "Carrito Abandonado Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
240,
300
],
"parameters": {
"path": "cart-abandoned",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 1
},
{
"id": "2",
"name": "Nota Adhesiva",
"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": "Configuración de Recuperación",
"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": "Calificar Carrito",
"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": "Generar Datos de Recuperación",
"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": "Esperar 1 Hora",
"type": "n8n-nodes-base.wait",
"position": [
1040,
200
],
"parameters": {
"unit": "hours",
"amount": 1
},
"typeVersion": 1
},
{
"id": "7",
"name": "Enviar Primer Correo de Recuperación",
"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": "Esperar 23 Horas Más",
"type": "n8n-nodes-base.wait",
"position": [
1440,
200
],
"parameters": {
"unit": "hours",
"amount": 23
},
"typeVersion": 1
},
{
"id": "9",
"name": "Enviar Segundo Correo de Recuperación",
"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": "Esperar 48 Horas Más",
"type": "n8n-nodes-base.wait",
"position": [
1840,
200
],
"parameters": {
"unit": "hours",
"amount": 48
},
"typeVersion": 1
},
{
"id": "11",
"name": "Enviar Correo de Recuperación Final",
"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": "Nota Adhesiva 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": "Iniciar Seguimiento de Recuperación",
"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
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Intermedio - Redes sociales
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Rodrigue
@gbadouCompartir este flujo de trabajo