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": "2回目リカバリーメール送信",
      "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 スプレッドシートを使用して、アクティビティ登録とフォローアップを自動化
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 Maps、SendGrid、AIを使用してB2Bリード獲得とメールマーケティングを自動化
If
Set
Code
+
If
Set
Code
141 ノードEzema Kingsley Chibuzo
リード獲得
ワークフロー情報
難易度
中級
ノード数13
カテゴリー1
ノードタイプ8
難易度説明

経験者向け、6-15ノードの中程度の複雑さのワークフロー

外部リンク
n8n.ioで表示

このワークフローを共有

カテゴリー

カテゴリー: 34