Rappels WhatsApp pour les paniers abandonnés Shopify avec Rapiwa (liens de produits inclus)
Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 19 nœuds.Utilise principalement des nœuds comme If, Code, Wait, HttpRequest, GoogleSheets. Automatiser les rappels Shopify pour les paniers abandonnés sur WhatsApp : inclusion des liens de produits via Rapiwa
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Informations d'identification Google Sheets API
Nœuds utilisés (19)
Catégorie
{
"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": "Requête 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": "Déclencheur planifié",
"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": "Note adhésive10",
"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": "Note adhésive9",
"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": "Note adhésive12",
"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": "Note adhésive13",
"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": "Attendre",
"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": "Boucler sur les éléments",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-1584,
32
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "a2e4b5cb-996a-4d6e-a120-4a3c1955bec8",
"name": "Note adhésive",
"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": "Note adhésive1",
"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": "Note adhésive2",
"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": "Note adhésive3",
"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
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Création de contenu, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
SpaGreen Creative
@spagreenSpaGreen 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.
Partager ce workflow