Recordatorios de WhatsApp para carritos abandonados en Shopify con Rapiwa (enlace del producto incluido)

Avanzado

Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 19 nodos.Utiliza principalmente nodos como If, Code, Wait, HttpRequest, GoogleSheets. Automatización de recordatorios de abandono del carrito de compras de Shopify en WhatsApp: inclusión de enlaces de productos a través de Rapiwa

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
  • Credenciales de API de Google Sheets
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "H1rJA5MTCuWx5IFF",
  "meta": {
    "instanceId": "cb9a1e5321767b6316634728341237e564b2587ab15b74ca0a89eb02a53484d6",
    "templateCredsSetupCompleted": true
  },
  "name": "Automate Shopify Abandoned Cart WhatsApp Reminders with Product Links via Rapiwa",
  "tags": [],
  "nodes": [
    {
      "id": "4159f1ee-7b87-4320-8716-2d601b41bcd9",
      "name": "Solicitud HTTP",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -2064,
        32
      ],
      "parameters": {
        "url": "https://salebotsg.myshopify.com/admin/api/2025-07/checkouts.json",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "i9zvAj1mpabm9ci9",
          "name": "shopify-app-auth"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "53535899-1bed-495b-a12c-38f7d4b38e21",
      "name": "Disparador programado",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2400,
        32
      ],
      "parameters": {
        "rule": {
          "interval": [
            {}
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "69fbf648-32c5-42cf-8c8c-f504e3faec97",
      "name": "Rapiwa Sender",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -144,
        112
      ],
      "parameters": {
        "url": "=https://app.rapiwa.com/api/send-message",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "number",
              "value": "={{ $json.data.number }}"
            },
            {
              "name": "message_type",
              "value": "text"
            },
            {
              "name": "message",
              "value": "=Hi {{ $('Clean WhatsApp Number').item.json.customerName }},\n\nYou left items in your cart at SpaGreen Creative. Here’s a quick look:\n\n🧾 Order Details:\n• Product: {{ $('Clean WhatsApp Number').item.json.productTitle }}\n• Qty: {{ $('Clean WhatsApp Number').item.json.quantity }}\n• Total: {{ $('Clean WhatsApp Number').item.json.totalPrice }} {{ $('Clean WhatsApp Number').item.json.presentment_currency }}\n\n🎁 Use code SPAGREEN10 for 10% OFF at checkout!\n\n👉 Complete your order: {{ $('Clean WhatsApp Number').item.json.abandonedCheckoutURL }}\n\nHurry — your cart won’t wait forever!\n\n— Team SpaGreen Creative"
            },
            {
              "name": "status"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "jnaHCyYia9OAFozh",
          "name": "Rapiwa Bearer Auth"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "c925eed9-596d-4f47-a3bb-b1e7d366a14c",
      "name": "Clean WhatsApp Number",
      "type": "n8n-nodes-base.code",
      "position": [
        -1264,
        48
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\nconst updatedItems = items.map((item) => {\n  let rawNumber = item?.json[\"number\"];\n  rawNumber = rawNumber ? String(rawNumber) : \"\";\n  const cleanedNumber = rawNumber.replace(/\\D/g, \"\");\n  item.json[\"number\"] = cleanedNumber;\n  return item;\n});\nreturn updatedItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "90aa8a3d-47eb-473f-afb4-906360350cd9",
      "name": "Check valid whatsapp number Using Rapiwa1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -976,
        48
      ],
      "parameters": {
        "url": "=https://app.rapiwa.com/api/verify-whatsapp",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "number",
              "value": "={{ $json.number }}"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "jnaHCyYia9OAFozh",
          "name": "Rapiwa Bearer Auth"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a35dc547-b9c5-4a4c-9d7e-7fecd812bf71",
      "name": "Nota adhesiva10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1328,
        -352
      ],
      "parameters": {
        "color": 6,
        "width": 576,
        "height": 992,
        "content": "## Clean and Verify WhatsApp Numbers\nBefore sending messages, each WhatsApp number is cleaned (removing spaces and symbols) and checked to make sure it’s a real, active WhatsApp account. Only valid numbers will get a message, so you don’t waste time or credits.\n\n- **Node:** Clean WhatsApp Number\n\n**Purpose:** Removes extra characters (like spaces, dashes, or parentheses) from the phone number.\n\n**Why it's important:** WhatsApp only accepts clean numeric formats. This step avoids delivery errors.\n\n- **Node:** Check valid whatsapp number Using Rapiwa\n  - Checks if the WhatsApp number is real and can receive messages.\n  - Only valid numbers will get a message."
      },
      "typeVersion": 1
    },
    {
      "id": "45349501-247a-443c-b58e-1cea7f8f7e35",
      "name": "Nota adhesiva9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -736,
        -352
      ],
      "parameters": {
        "color": 5,
        "width": 432,
        "height": 992,
        "content": "## Conditional Logic\n\nThe **If** node checks whether `data.exists == true`:\n\n- **True branch (verified):**\n  - Sends a WhatsApp confirmation via Rapiwa.\n  - Appends to Google Sheets with validity: verified.\n\n- **False branch (unverified):**\n  - Appends data to the sheet with validity: unverified.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4cffcb7b-6473-4c5d-a52c-23f33c28edfd",
      "name": "Nota adhesiva12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        -352
      ],
      "parameters": {
        "color": 4,
        "width": 880,
        "height": 688,
        "content": "## Send Message via HTTP Request Using Rapiwa\n\n**Purpose:** Sends the actual message via the Rapiwa API.\n\n**How it works:** Makes a POST request to `https://app.rapiwa.com/api/send-message` with:\n- `number`: Cleaned WhatsApp number  \n- `message`: The text from the sheet\n\n**Why it's important:** This is the core of the automation — it connects your message to WhatsApp via Rapiwa.\n\n\n\n## Change State of Rows in Sent\n**Why it's important:** So you don’t accidentally resend the same message in the next cycle. Keeps track of what’s already done.\n\nTwo separate Google Sheets nodes:\n- **Verified append row in sheet** – for valid numbers.\n- **Unverified append row in sheet** – for invalid numbers.\n- **A Google Sheet** formatted like this ➤ [sample](https://docs.google.com/spreadsheets/d/1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs/edit?usp=sharing)\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d789b7a8-84ab-4143-98fc-d9b270302118",
      "name": "Nota adhesiva13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -288,
        352
      ],
      "parameters": {
        "color": 2,
        "width": 880,
        "height": 608,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Append Unverified Row to Sheet\nThis node is triggered after a phone number is checked and found to be **unverified**. It appends the form submission data to the Google Sheet with the field `validity` set to `\"unverified\"`.\n\nThis node appends data to a Google Sheet when a WhatsApp number is **unverified**.\n- **A Google Sheet** formatted like this ➤ [sample](https://docs.google.com/spreadsheets/d/1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs/edit?usp=sharing)  \n\n\n## Wait\n\n**Purpose:** Pauses for a few seconds (e.g., 5 sec) before sending the next message.\n\n**Why it's important:** Prevents sending too many messages too quickly, which could get your WhatsApp number flagged or blocked.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "6da3b3f7-8e68-41fb-b889-c62a0ca8f88b",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        -576,
        288
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "3ab8725a-9268-45fd-b91c-0e055fe6fa7c",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.data.exists }}",
              "rightValue": "=\"true\""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9ff80aa5-754b-4e07-b21d-c55ea9772a06",
      "name": "Change State of Rows in Verified & Sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        112,
        112
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('Clean WhatsApp Number').item.json.customerName }}",
            "number": "={{ $('If').item.json.data.number }}",
            "status": "sent ",
            "order id": "={{ $('Clean WhatsApp Number').item.json.checkoutId }}",
            "validity": "vaeified",
            "item link": "={{ $('Clean WhatsApp Number').item.json.abandonedCheckoutURL }}",
            "item name": "={{ $('Clean WhatsApp Number').item.json.productTitle }}",
            "total price": "={{ $('Clean WhatsApp Number').item.json.totalPrice }} {{ $('Clean WhatsApp Number').item.json.presentment_currency }}"
          },
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "order id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "order id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "item name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "coupon",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "coupon",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "item link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "total price",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "total price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "validity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "validity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs/edit?usp=drivesdk",
          "cachedResultName": "Shopify - Send WhatsApp reminder with cart items link"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "gFH3Wjq6yYqSEAei",
          "name": "Google Sheets"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "44f406aa-e919-4c6a-a3fb-3eef71d5cb23",
      "name": "Change State of Rows in Unverified & Not Sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -144,
        416
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('Clean WhatsApp Number').item.json.customerName }}",
            "number": "={{ $json.data.number }}",
            "status": "not sent",
            "order id": "={{ $('Clean WhatsApp Number').item.json.checkoutId }}",
            "validity": "unverified",
            "item link": "={{ $('Loop Over Items').item.json.abandonedCheckoutURL }}",
            "item name": "={{ $('Clean WhatsApp Number').item.json.productTitle }}",
            "total price": "={{ $('Loop Over Items').item.json.totalPrice }} {{ $('Loop Over Items').item.json.presentment_currency }}"
          },
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "number",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "order id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "order id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "item name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "coupon",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "coupon",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "item link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "item link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "total price",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "total price",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "validity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "validity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs/edit?usp=drivesdk",
          "cachedResultName": "Shopify - Send WhatsApp reminder with cart items link"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "gFH3Wjq6yYqSEAei",
          "name": "Google Sheets"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "f385eb14-50dd-4cac-82cd-30d9374adf70",
      "name": "Esperar",
      "type": "n8n-nodes-base.wait",
      "position": [
        112,
        416
      ],
      "webhookId": "6c474e54-eb3c-4fcd-b455-948322cd0121",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "965c02e8-8d9f-4edb-88b5-5cb8a509f633",
      "name": "Format HTTP Response Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -1840,
        32
      ],
      "parameters": {
        "jsCode": "const checkouts = items[0].json.checkouts;\n\nif (!Array.isArray(checkouts)) {\n  throw new Error(\"Checkouts not found or not an array\");\n}\n\nreturn checkouts.map((checkout) => {\n  const customer = checkout.customer || {};\n  const product = (checkout.line_items && checkout.line_items[0]) || {};\n\n  return {\n    json: {\n      checkoutId: checkout.id || null,\n      customerName: `${customer.first_name || ''} ${customer.last_name || ''}`.trim(),\n      number: checkout.phone || customer.phone || 'N/A',\n      productTitle: product.title || 'N/A',\n      quantity: product.quantity || 'N/A',\n      totalPrice: checkout.total_price || '0.00',\n      presentment_currency: checkout.presentment_currency,\n      abandonedCheckoutURL: checkout.abandoned_checkout_url || 'N/A'\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "01a37d2b-5e5b-4c00-ac3d-49f0fd7ce840",
      "name": "Recorrer elementos",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1584,
        32
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "a2e4b5cb-996a-4d6e-a120-4a3c1955bec8",
      "name": "Nota adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4048,
        -352
      ],
      "parameters": {
        "color": 2,
        "width": 1424,
        "height": 2752,
        "content": "# Automate Shopify Abandoned Cart WhatsApp Reminders with Product Links via Rapiwa\n\n## Overview\nThis n8n workflow automatically identifies customers who have abandoned their carts on your Shopify store, cleans and verifies their WhatsApp numbers, and sends them personalized reminders via the Rapiwa API. It also logs each interaction—whether the number was valid or not—into a connected Google Sheet. Designed for marketers, small business owners, freelancers, and support teams, this solution makes it easy to run bulk WhatsApp campaigns using just a Google Sheet and your own WhatsApp number—no need for the official WhatsApp Business API. It’s a budget-friendly, scalable, and easy-to-manage alternative for anyone looking to automate WhatsApp follow-ups without the tech hassle.\n\n## Features\n- Fetches abandoned checkouts from Shopify\n- Cleans phone numbers to WhatsApp-ready format\n- Verifies if the number is registered on WhatsApp using Rapiwa\n- Sends customized cart recovery WhatsApp messages\n- Logs status (sent/not sent) and validity (verified/unverified) in Google Sheets\n- Batches messages to avoid API rate limits or number bans\n- Automatically loops with a scheduler\n- Fully customizable messages and structure\n\n## Requirements\n- A Shopify store with abandoned checkouts\n- Rapiwa API access with Bearer token\n- Google Sheets OAuth2 credentials set up in n8n\n- WhatsApp number linked and authorized in Rapiwa\n- Google Sheet structured like this: sample sheet\n\n## Workflow Logic Breakdown\n1. Scheduled Trigger  \n   - Node: Schedule Trigger  \n   - What it does: Runs automatically based on a scheduled interval (e.g., every few hours).  \n   - Why it matters: Ensures the automation works in the background without manual input.\n\n2. Fetch Abandoned Checkouts  \n   - Node: HTTP Request  \n   - Endpoint: `https://salebotsg.myshopify.com/admin/api/2025-07/checkouts.json`  \n   - Auth: Shopify private app token via HTTP Header Auth  \n   - What it does: Pulls all active abandoned checkouts from Shopify.  \n   - Why it matters: It's the data source for your WhatsApp reminders.\n\n3. Format the API Response  \n   - Node: Format HTTP Response Data (Code Node)  \n   - What it does: Extracts customer name, phone, product title, quantity, price, and checkout URL from the raw JSON response.  \n   - Why it matters: Structures data for clean downstream use.\n\n4. Loop Through Each Checkout  \n   - Node: Loop Over Items (SplitInBatches)  \n   - What it does: Processes one checkout at a time.  \n   - Why it matters: Enables batching and individual handling.\n\n5. Clean WhatsApp Numbers  \n   - Node: Clean WhatsApp Number (Code Node)  \n   - What it does: Strips all non-numeric characters from the phone number.  \n   - Why it matters: WhatsApp requires properly formatted numbers.\n\n6. Check if Number is WhatsApp-Valid  \n   - Node: Check valid whatsapp number Using Rapiwa1  \n   - API Endpoint: `https://app.rapiwa.com/api/verify-whatsapp`  \n   - Method: POST  \n   - What it does: Validates if the number is active on WhatsApp.  \n   - Why it matters: Saves API credits and avoids errors by skipping invalid numbers.\n\n7. Conditional Logic  \n   - Node: If  \n   - Condition: `data.exists == true`  \n   - What it does: Branches based on WhatsApp validity.  \n     - True: Number is valid, send message and log as verified.  \n     - False: Number is invalid, skip sending and log as unverified.\n\n### If Number Is Verified\n\n8. Send WhatsApp Message via Rapiwa  \n   - Node: Rapiwa Sender  \n   - API Endpoint: `https://app.rapiwa.com/api/send-message`  \n   - Method: POST  \n   - Auth: Bearer Token  \n   - Message Template:\n\n```\nHi {{ customerName }},\n\nYou left items in your cart at SpaGreen Creative. Here’s a quick look:\n\nOrder Details:\n• Product: {{ productTitle }}\n• Qty: {{ quantity }}\n• Total: {{ totalPrice }} {{ presentment_currency }}\n\nUse code SPAGREEN10 for 10% OFF at checkout!\n\nComplete your order: {{ abandonedCheckoutURL }}\n\nHurry — your cart won’t wait forever!\n\n— Team SpaGreen Creative\n```\n\n9. Log Verified + Sent  \n   - Node: Change State of Rows in Verified & Sent  \n   - What it does: Appends row to Google Sheet with:\n     - `status: sent`\n     - `validity: verified`  \n   - Why it matters: Helps keep a record and prevent re-sending.\n\nIf Number Is Not Verified\n\n10. Log Unverified + Not Sent  \n    - Node: Change State of Rows in Unverified & Not Sent  \n    - What it does: Appends row to Google Sheet with:\n      - `status: not sent`\n      - `validity: unverified`  \n    - Why it matters: Logs failed entries for review and debugging.\n\n11. Wait Between Messages  \n    - Node: Wait  \n    - What it does: Pauses (e.g., 5 seconds) between each cycle.  \n    - Why it matters: Prevents Rapiwa from flagging or blocking your number.\n    - A Google Sheet formatted like this ➤ [sample](https://docs.google.com/spreadsheets/d/1zsVzniJTeiFOafCI_V0B3_7VnlAPQ2CTWQa-N30qCqs/edit?usp=sharing)\n\n| name            | number        | order id       | item name   | coupon | item link      | total price     | validity   | status   |\n|-----------------|---------------|----------------|----------------------------------------------------------------------------------------------|--------|-------------------------------------------|\n| Golam Rabbi     | 8801758152474 | 39248398811454 | S25 Ultra 5XXXXX Price Cell Phone |        | https://salebotsg.myshopify.com/946181xxxxxx&locale=en-BD | 11500.00 BDT     | unverified | not sent |\n| Shakil Ahammed  | 8801322827753 | 39248402153790 | S25 Ultra 5XXXXX Price Cell Phone |        | https://salebotsg.myshopify.com/946181xxxxxx&locale=en-BD | 11500.00 BDT     | verified   | sent     |\n| Shakil Ahammed  | 8801322827753 | 39248403431742 | S25 Ultra 5XXXXX Price Cell Phone |        | https://salebotsg.myshopify.com/946181xxxxxx&locale=en-BD | 11500.00 BDT     | verified   | sent     |\n"
      },
      "typeVersion": 1
    },
    {
      "id": "3524bc1e-7f0d-4cc2-8a45-339d60817664",
      "name": "Nota adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2496,
        -352
      ],
      "parameters": {
        "color": 4,
        "width": 256,
        "height": 656,
        "content": "## Scheduled Trigger  \n- What it does: Runs automatically based on a scheduled interval (e.g., every few hours).  \n- Why it matters: Ensures the automation works in the background without manual input."
      },
      "typeVersion": 1
    },
    {
      "id": "cbacf837-95cc-4509-aa67-75b57b045e06",
      "name": "Nota adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2224,
        -352
      ],
      "parameters": {
        "color": 5,
        "width": 528,
        "height": 656,
        "content": "## Fetch Abandoned Checkouts  \n### Node: HTTP Request  \n   - Endpoint: `https://salebotsg.myshopify.com/admin/api/2025-07/checkouts.json`  \n   - Auth: Shopify private app token via HTTP Header Auth  \n   - What it does: Pulls all active abandoned checkouts from Shopify.  \n   - Why it matters: It's the data source for your WhatsApp reminders.\n\n## Format the API Response  \n### Node: Format HTTP Response Data (Code Node)  \n   - What it does: Extracts customer name, phone, product title, quantity, price, and checkout URL from the raw JSON response.  \n   - Why it matters: Structures data for clean downstream use.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "35958d98-85da-45fb-ab7f-04057fd18f63",
      "name": "Nota adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        -352
      ],
      "parameters": {
        "color": 4,
        "width": 336,
        "height": 656,
        "content": "## Loop Through Each Checkout  \n### Node: Loop Over Items (SplitInBatches)  \n   - What it does: Processes one checkout at a time.  \n   - Why it matters: Enables batching and individual handling."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "e21de6c3-502d-4100-b905-da2afd677ada",
  "connections": {
    "6da3b3f7-8e68-41fb-b889-c62a0ca8f88b": {
      "main": [
        [
          {
            "node": "69fbf648-32c5-42cf-8c8c-f504e3faec97",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "44f406aa-e919-4c6a-a3fb-3eef71d5cb23",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTTP Request": {
      "main": [
        [
          {
            "node": "965c02e8-8d9f-4edb-88b5-5cb8a509f633",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "69fbf648-32c5-42cf-8c8c-f504e3faec97": {
      "main": [
        [
          {
            "node": "9ff80aa5-754b-4e07-b21d-c55ea9772a06",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "c925eed9-596d-4f47-a3bb-b1e7d366a14c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "HTTP Request",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c925eed9-596d-4f47-a3bb-b1e7d366a14c": {
      "main": [
        [
          {
            "node": "90aa8a3d-47eb-473f-afb4-906360350cd9",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "965c02e8-8d9f-4edb-88b5-5cb8a509f633": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9ff80aa5-754b-4e07-b21d-c55ea9772a06": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "90aa8a3d-47eb-473f-afb4-906360350cd9": {
      "main": [
        [
          {
            "node": "6da3b3f7-8e68-41fb-b889-c62a0ca8f88b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "44f406aa-e919-4c6a-a3fb-3eef71d5cb23": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿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?

Avanzado - Creación de contenido, IA Multimodal

¿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

Envío automático de mensajes de agradecimiento y cupones de lealtad de WhatsApp para Shopify (usando la API de Rapiwa)
Envío automático de mensajes de agradecimiento y cupones de fidelización de WhatsApp desde Shopify con Rapiwa
If
Code
Wait
+
If
Code
Wait
17 NodosSpaGreen Creative
Creación de contenido
Cumplimiento de pedidos de Shopify y envío de enlaces de seguimiento por WhatsApp con la API de Rapiwa
Automatización de las notificaciones de cumplimiento de pedidos de Shopify a través de WhatsApp
If
Code
Wait
+
If
Code
Wait
17 NodosSpaGreen Creative
Creación de contenido
Envío automatizado de mensajes de bienvenida de WhatsApp desde Google Sheets con API de Rapiwa
Envío automatizado de mensajes de bienvenida de WhatsApp para leads con Google Sheets y Rapiwa
If
Code
Wait
+
If
Code
Wait
17 NodosSpaGreen Creative
Nutrición de leads
Flujo de extracción y contacto de datos de Apollo 1 ✅
Generación automática de prospectos usando Apollo, análisis con IA y seguimiento de correos programados
If
Code
Wait
+
If
Code
Wait
39 NodosDeniz
Creación de contenido
WordPress Blog Automation Pro (Investigación profunda) v2.1 Marketplace
Usar GPT-4o, Perplexity AI y soporte multilingüe para automatizar la creación de blogs optimizados para SEO
If
Set
Xml
+
If
Set
Xml
125 NodosDaniel Ng
Creación de contenido
Generación por lotes de contenido SEO y creación de borradores de Webflow con imágenes de IA (plantilla)
Generación masiva de contenido SEO utilizando GPT, imágenes de Gemini y borradores de Webflow
If
Set
Code
+
If
Set
Code
54 NodosDahiana
Creación de contenido
Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos19
Categoría2
Tipos de nodos8
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
SpaGreen Creative

SpaGreen Creative

@spagreen

SpaGreen Creative is a leading software company specializing in SaaS solutions, AI automation, and Laravel/Vue.js development. With 800+ eCommerce platforms and 8,000+ global clients, we deliver powerful tools for OTT, CRM, ERP, and WhatsApp marketing. We combine innovation and tech to build scalable digital products.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34