Cumplimiento de pedidos de Shopify y envío de enlaces de seguimiento por WhatsApp con la API de Rapiwa
Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 17 nodos.Utiliza principalmente nodos como If, Code, Wait, HttpRequest, GoogleSheets. Automatización de las notificaciones de cumplimiento de pedidos de Shopify a través de WhatsApp
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Credenciales de API de Google Sheets
- •Credenciales de API de Admin de Shopify
Nodos utilizados (17)
Categoría
{
"id": "qIxpz1WNuNQMj4Hq",
"meta": {
"instanceId": "cb9a1e5321767b6316634728341237e564b2587ab15b74ca0a89eb02a53484d6",
"templateCredsSetupCompleted": true
},
"name": "Shopify Order Fulfillment & Send Tracking Link via WhatsApp Using Rapiwa API",
"tags": [],
"nodes": [
{
"id": "bb285dab-fc99-4d5b-8b3b-36959d591a4f",
"name": "obtener todos los datos del cliente",
"type": "n8n-nodes-base.httpRequest",
"position": [
-112,
896
],
"parameters": {
"url": "=https://your_domain.myshopify.com/admin/api/2025-07/orders/{{ $json.order_id }}.json",
"method": "=GET",
"options": {},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "X-Shopify-Access-Token",
"value": "your_shopify_accesstoken like this➡️shpat_57xx78xxxxx90fxxx67"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "357f157e-ebd1-4865-8384-c2202c69461a",
"name": "Bucle sobre elementos",
"type": "n8n-nodes-base.splitInBatches",
"position": [
80,
896
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "0e597ab7-be2c-45fd-8b2b-6a34989b3b9a",
"name": "Shopify Trigger",
"type": "n8n-nodes-base.shopifyTrigger",
"position": [
-624,
896
],
"webhookId": "a8c45cbe-04b8-4c78-8418-1e50b9b8fd06",
"parameters": {
"topic": "fulfillments/create",
"authentication": "accessToken"
},
"credentials": {
"shopifyAccessTokenApi": {
"id": "cWoMnmp2EszIQYpj",
"name": "Shopify Access Token account"
}
},
"typeVersion": 1
},
{
"id": "e9854c40-304b-49a8-a3e2-f3aae6a0996a",
"name": "Formatear datos de respuesta Webhook",
"type": "n8n-nodes-base.code",
"position": [
-448,
896
],
"parameters": {
"jsCode": "const result = $input.all().map(item => {\n const body = item.json;\n\n return {\n customer_id: body.id,\n fulfillment_id: body.id,\n order_id: body.order_id,\n status: body.status,\n created_at: body.created_at,\n updated_at: body.updated_at,\n tracking_company: body.tracking_company,\n tracking_number: body.tracking_number,\n tracking_url: body.tracking_url,\n product_title: body.line_items?.[0]?.title || '',\n customer_name: body.destination?.name || '',\n country: body.destination?.country || '',\n shop_domain: item.json.headers?.['x-shopify-shop-domain'] || '',\n };\n});\n\nreturn result;"
},
"typeVersion": 2
},
{
"id": "9df911dd-af84-4a81-8b15-4c758ed36c9e",
"name": "Limpiar número",
"type": "n8n-nodes-base.code",
"position": [
304,
992
],
"parameters": {
"jsCode": "const items = $input.all();\n\nconst updatedItems = items.map((item) => {\n const customer = item?.json?.order?.customer || {};\n\n const rawPhone = customer?.phone || \"\";\n const phoneStr = typeof rawPhone === 'string' ? rawPhone : String(rawPhone || \"\");\n const cleanedPhone = phoneStr.replace(/\\D/g, \"\");\n\n // Combine first and last name into full name\n const firstName = customer.first_name || \"\";\n const lastName = customer.last_name || \"\";\n const fullName = `${firstName} ${lastName}`.trim();\n\n return {\n json: {\n customer_id: customer.id || \"\",\n name: fullName,\n email: customer.email || \"\",\n phone: cleanedPhone\n }\n };\n});\n\nreturn updatedItems;\n"
},
"typeVersion": 2
},
{
"id": "9c7f6119-154c-4abf-8336-3ebe8133f479",
"name": "fila verificada anexar en hoja",
"type": "n8n-nodes-base.googleSheets",
"position": [
1184,
1008
],
"parameters": {
"columns": {
"value": {
"email": "={{ $('Clean Number').item.json.email }}",
"name ": "={{ $('Clean Number').item.json.name }}",
"number": "={{ $('Clean Number').item.json.phone }}",
"status": "verified",
"customer_id": "={{ $('Clean Number').item.json.customer_id }}",
"tracking_url": "={{ $('Format Webhook Response Data').item.json.tracking_url }}",
"product_title": "={{ $('Format Webhook Response Data').item.json.product_title }}",
"tracking_number": "={{ $('Format Webhook Response Data').item.json.tracking_number }}",
"tracking_company": "={{ $('Format Webhook Response Data').item.json.tracking_company }}"
},
"schema": [
{
"id": "customer_id",
"type": "string",
"display": true,
"required": false,
"displayName": "customer_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "name ",
"type": "string",
"display": true,
"required": false,
"displayName": "name ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email",
"type": "string",
"display": true,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "number",
"type": "string",
"display": true,
"required": false,
"displayName": "number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tracking_company",
"type": "string",
"display": true,
"required": false,
"displayName": "tracking_company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tracking_number",
"type": "string",
"display": true,
"required": false,
"displayName": "tracking_number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tracking_url",
"type": "string",
"display": true,
"required": false,
"displayName": "tracking_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "product_title",
"type": "string",
"display": true,
"required": false,
"displayName": "product_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vxocktoY-y-PYBZNxmUDuQv02b5F8QKhbQ0yLHjwjBY/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1vxocktoY-y-PYBZNxmUDuQv02b5F8QKhbQ0yLHjwjBY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vxocktoY-y-PYBZNxmUDuQv02b5F8QKhbQ0yLHjwjBY/edit?usp=drivesdk",
"cachedResultName": "Shopify - Send tracking link via WhatsApp"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gFH3Wjq6yYqSEAei",
"name": "Google Sheets"
}
},
"typeVersion": 4.6
},
{
"id": "ed921c20-60e1-4c65-a946-cd477658d7e1",
"name": "Enviar mensaje usando Rapiwa",
"type": "n8n-nodes-base.httpRequest",
"position": [
960,
1008
],
"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 {{ $('Loop Over Items').item.json.name }},\nGood news! Your order has just been fulfilled.\n\nTracking Number: *{{ $('Format Webhook Response Data').item.json.tracking_number }}*\n\nTrack your package here: *{{ $('Format Webhook Response Data').item.json.tracking_url }}*\n\nThank you for shopping with us. \n-Team SpaGreen Creative\n"
}
]
},
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "jnaHCyYia9OAFozh",
"name": "Rapiwa Bearer Auth"
}
},
"typeVersion": 4.2
},
{
"id": "53198fba-bd3b-4169-bfed-647f13caa22a",
"name": "Esperar",
"type": "n8n-nodes-base.wait",
"position": [
1184,
1216
],
"webhookId": "6c474e54-eb3c-4fcd-b455-948322cd0121",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "af670da1-14e9-4a4d-9d06-6e8d2bcbe051",
"name": "Verificar número whatsapp válido usando Rapiwa",
"type": "n8n-nodes-base.httpRequest",
"position": [
528,
992
],
"parameters": {
"url": "=https://app.rapiwa.com/api/verify-whatsapp",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "number",
"value": "={{ $json.phone }}"
}
]
},
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "jnaHCyYia9OAFozh",
"name": "Rapiwa Bearer Auth"
}
},
"typeVersion": 4.2
},
{
"id": "63985bfb-4fcd-427a-b6f5-ca56972dfa4a",
"name": "Si",
"type": "n8n-nodes-base.if",
"position": [
720,
1120
],
"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": "ef4e6f6f-5c3b-4598-ace3-bb47d91882fe",
"name": "fila verificada anexar en hoja1",
"type": "n8n-nodes-base.googleSheets",
"position": [
976,
1216
],
"parameters": {
"columns": {
"value": {
"email": "={{ $('Clean Number').item.json.email }}",
"name ": "={{ $('Clean Number').item.json.name }}",
"number": "={{ $('Clean Number').item.json.phone }}",
"status": "unverified",
"customer_id": "={{ $('Clean Number').item.json.customer_id }}",
"tracking_url": "={{ $('Format Webhook Response Data').item.json.tracking_url }}",
"product_title": "={{ $('Format Webhook Response Data').item.json.product_title }}",
"tracking_number": "={{ $('Format Webhook Response Data').item.json.tracking_number }}",
"tracking_company": "={{ $('Format Webhook Response Data').item.json.tracking_company }}"
},
"schema": [
{
"id": "customer_id",
"type": "string",
"display": true,
"required": false,
"displayName": "customer_id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "name ",
"type": "string",
"display": true,
"required": false,
"displayName": "name ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email",
"type": "string",
"display": true,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "number",
"type": "string",
"display": true,
"required": false,
"displayName": "number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tracking_company",
"type": "string",
"display": true,
"required": false,
"displayName": "tracking_company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tracking_number",
"type": "string",
"display": true,
"required": false,
"displayName": "tracking_number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tracking_url",
"type": "string",
"display": true,
"required": false,
"displayName": "tracking_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "product_title",
"type": "string",
"display": true,
"required": false,
"displayName": "product_title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "status",
"type": "string",
"display": true,
"required": false,
"displayName": "status",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vxocktoY-y-PYBZNxmUDuQv02b5F8QKhbQ0yLHjwjBY/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1vxocktoY-y-PYBZNxmUDuQv02b5F8QKhbQ0yLHjwjBY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1vxocktoY-y-PYBZNxmUDuQv02b5F8QKhbQ0yLHjwjBY/edit?usp=drivesdk",
"cachedResultName": "Shopify - Send tracking link via WhatsApp"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gFH3Wjq6yYqSEAei",
"name": "Google Sheets"
}
},
"typeVersion": 4.6
},
{
"id": "92e8dfd3-a657-49a7-8c6f-f9a77e467b72",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2576,
192
],
"parameters": {
"color": 4,
"width": 1728,
"height": 3536,
"content": "# Shopify Order Fulfillment & Send Tracking Link via WhatsApp Using Rapiwa API\n\n\n# Overview\nThis **n8n workflow** automatically sends **WhatsApp notifications** to customers when their **Shopify orders are fulfilled**. It extracts order details, validates customer phone numbers for WhatsApp compatibility using the **Rapiwa API**, sends tracking information via WhatsApp, and logs all interactions in **Google Sheets** with appropriate verification status.\n---\n## Features\n- Listens to **Shopify fulfillment creation** via webhook\n- Retrieves detailed **order and customer information** from Shopify\n- **Cleans and formats** customer phone numbers\n- **Validates WhatsApp numbers** using Rapiwa's verification API\n- Sends **automated WhatsApp messages** with tracking details to verified numbers\n- Logs customer data in **Google Sheets** with verification status\n- Includes **Wait node** to space out API calls and prevent rate limiting\n- Handles both **verified and unverified** numbers with appropriate branching\n---\n## Requirements\n### Tools & Services\n- **Shopify store** with API access\n- **Google Sheet** formatted with required columns\n- **Rapiwa API account** with:\n - Valid **Bearer Token**\n - Access to `verify-whatsapp` and `send-message` endpoints\n - Connected WhatsApp number\n- **Active Rapiwa subscription** (~$5/month)\n### n8n Credentials\n- **Shopify Access Token API** credentials\n- **Rapiwa Bearer Auth** credentials\n- **Google Sheets OAuth2** credentials\n### Google Sheet Required Columns:\n- `customer_id`\n- `name ` (note the trailing space)\n- `email`\n- `number`\n- `tracking_company`\n- `tracking_number`\n- `tracking_url`\n- `product_title`\n- `status` (either `verified` or `unverified`)\n> **Note:** Field `name ` contains a trailing space. Keep it as-is.\n---\n## Nodes Used in the Workflow\n- **Shopify Trigger** (webhook for fulfillment creation)\n- **Format Webhook Response Data** (code node for data extraction)\n- **get all customer data** (HTTP request to Shopify API)\n- **Clean Number** (code node for phone number formatting)\n- **Loop Over Items** (split in batches node)\n- **Check valid whatsapp number Using Rapiwa** (HTTP request)\n- **If** (conditional branching based on verification)\n- **Send Message Using Rapiwa** (HTTP request for WhatsApp messaging)\n- **verified append row in sheet** (Google Sheets node)\n- **verified append row in sheet1** (Google Sheets node for unverified)\n- **Wait** (delay node)\n---\n## How to Use This Workflow\n### 1. Trigger: New Fulfillment Created\n- **Node**: `Shopify Trigger`\n- **Event**: `fulfillments/create`\n- **Function**: Shopify sends payload when a new fulfillment is created.\n### 2. Format Webhook Response\n- **Node**: `Format Webhook Response Data`\n- **Function**: Extracts key information including:\n - `order_id`, `fulfillment_id`, `status`\n - `tracking_company`, `tracking_number`, `tracking_url`\n - `product_title`, `customer_name`, `country`\n - `shop_domain`\n### 3. Retrieve Customer Data\n- **Node**: `get all customer data`\n- **Method**: `GET`\n- **URL**: `https://your_domain.myshopify.com/admin/api/2025-07/orders/{{ $json.order_id }}.json`\n- **Headers**: Includes Shopify access token\n- **Function**: Retrieves complete order and customer information\n### 4. Clean Phone Numbers\n- **Node**: `Clean Number`\n- **Function**: \n - Extracts phone number from customer data\n - Removes all non-numeric characters\n - Combines first and last name into full name\n - Formats customer data for downstream processing\n### 5. Process in Batches\n- **Node**: `Loop Over Items`\n- **Function**: Processes customers one at a time\n### 6. Verify WhatsApp Number\n- **Node**: `Check valid whatsapp number Using Rapiwa`\n- **Method**: `POST`\n- **URL**: `https://app.rapiwa.com/api/verify-whatsapp`\n- **Authentication**: Bearer token\n- **Function**: Checks if the phone number is active on WhatsApp\n### 7. Branch Based on Verification\n- **Node**: `If`\n- **Condition**: If `data.exists === \"true\"`, then verified\n- **Function**: Routes to appropriate path based on verification status\n### 8. Send WhatsApp Message (if verified)\n- **Node**: `Send Message Using Rapiwa`\n- **Method**: `POST`\n- **URL**: `https://app.rapiwa.com/api/send-message`\n- **Authentication**: Bearer token\n- **Function**: Sends tracking information via WhatsApp\n#### Message Template:\n```\nHi [Customer Name],\nGood news! Your order has just been fulfilled.\nTracking Number: [Tracking Number]\nTrack your package here: [Tracking URL]\nThank you for shopping with us.\n-Team SpaGreen Creative\n```\n### 9. Log to Google Sheets\n- **Node**: `verified append row in sheet` → Logs verified users\n- **Node**: `verified append row in sheet1` → Logs unverified users\n- **Node**: `Wait` → Adds delay to avoid API rate limits\n---\n## Google Sheet Column\n**A Google Sheet** formatted like this ➤ [Sample](https://docs.google.com/spreadsheets/d/1vxocktoY-y-PYBZNxmUDuQv02b5F8QKhbQ0yLHjwjBY/edit?usp=sharing)\n| customer_id | name | email | number | tracking_company | tracking_number | tracking_url | product_title | status |\n|---------------|-----------------|--------------------------------|---------------|------------------|-----------------|---------------------------------------------|----------------------------------------|------------|\n| 8986XXXX06 | Abdul Mannan | contact@spagreen.net | 8801322827799 | Amazon Logistics | SG-OT-02 | https://traxxxG-OT-02 | S25 Ultra 5G Smartphone | verified |\n| 883XXX7982 | Abdul Mannan | contact@spagreen.net | 8801322827799 | Amazon Logistics | SG-OT-N03 | https://traxxxGOT-N03| Samsung Galaxy S24 Ultra | verified |\n\n> **Note**: The `name ` column includes a **trailing space**. Do not remove it.\n---\n## Customization Ideas\n- Modify the WhatsApp message template to include additional order details\n- Add product images to the WhatsApp messages\n- Create separate sheets for different product categories or regions\n- Extend logic to send follow-up messages after delivery\n- Add notifications to store administrators for failed message deliveries\n---\n## Notes & Warnings\n- Ensure your Rapiwa account has a valid, connected WhatsApp number\n- Google Sheets credentials must allow write access to the specified sheet\n- The Wait node helps prevent rate limiting but may need adjustment based on volume\n- The workflow uses the Shopify API version 2025-07, which may need updating in the future\n- Rapiwa is an unofficial WhatsApp API and delivery rates are not guaranteed\n- Make sure to comply with WhatsApp's terms of service and customer privacy regulations\n\n## Useful Links\n- **Dashboard:** [https://app.rapiwa.com](https://app.rapiwa.com/login)\n- **Official Website:** [https://rapiwa.com](https://rapiwa.com/)\n- **Documentation:** [https://docs.rapiwa.com](https://docs.rapiwa.com/)\n\n## Support & Help\n- **WhatsApp**: [Chat on WhatsApp](https://wa.me/8801322827799)\n- **Discord**: [SpaGreen Community](https://discord.gg/SsCChWEP)\n- **Facebook Group**: [SpaGreen Support](https://www.facebook.com/groups/spagreenbd)\n- **Website**: [https://spagreen.net](https://spagreen.net)\n- **Developer Portfolio**: [Codecanyon SpaGreen](https://codecanyon.net/user/spagreen/portfolio)\n"
},
"typeVersion": 1
},
{
"id": "9242aaa7-3458-4bba-8965-4ee434a92421",
"name": "Nota adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-768,
192
],
"parameters": {
"color": 4,
"width": 592,
"height": 1056,
"content": "## 1. Node: Shopify Trigger\n**Purpose:** \nThis node monitors your Shopify store for the `fulfillments/create` webhook event. It automatically triggers when an order is marked as fulfilled.\n\n**When it’s Triggered:** \nWhenever an order is fulfilled (i.e., shipped or marked as complete) in your Shopify store.\n\n**Webhook Event:** \n`fulfillments/create`\n\n## 2. Node: Format Webhook Response Data\n**Purpose:** \nThis node takes the raw data from the Shopify webhook and extracts the key information you need. It organizes the data in a cleaner format for further processing or use.\n\n**Data Extracted Includes:**\n\n- Order ID \n- Tracking number and tracking link \n- Total Price\n- Per Product Price\n- Product Image link\n- Customer’s name and country \n- Product title(s)\n"
},
"typeVersion": 1
},
{
"id": "21e5181e-236e-47aa-aec2-a90b8980972d",
"name": "Nota adhesiva2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-160,
192
],
"parameters": {
"color": 5,
"width": 384,
"height": 1232,
"content": "## 1. Node: get all customer data\n**Purpose:**\n- Uses the `order_id` to make a Shopify API request and get full customer details for that order.\n\n\n## 2. Node: Loop Over Items\n**Purpose:**\n- Loops through each item (e.g., fulfillment) in the workflow — useful if multiple fulfillments come through at once."
},
"typeVersion": 1
},
{
"id": "0b192c42-a681-458e-9c04-b327c8c1d3fe",
"name": "Nota adhesiva3",
"type": "n8n-nodes-base.stickyNote",
"position": [
256,
192
],
"parameters": {
"color": 6,
"width": 432,
"height": 1232,
"content": "## 1. Node: Check Valid WhatsApp Number Using Rapiwa\n**Purpose:**\nThis node uses [Rapiwa’s API](https://rapiwa.com) to verify whether a given phone number is registered and active on WhatsApp.\n\n\n## 2. Node: Clean Number\n**Purpose:**\n- Extracts and cleans up the customer’s phone number.\n- Formats full name from first and last name.\n- Prepares `customer_id`, email, phone, and name.\n"
},
"typeVersion": 1
},
{
"id": "28edb9e1-79e8-4519-940b-17fba681a694",
"name": "Nota adhesiva4",
"type": "n8n-nodes-base.stickyNote",
"position": [
704,
192
],
"parameters": {
"color": 4,
"width": 656,
"height": 1232,
"content": "## 1. Node: If\n**Purpose:**\nChecks the result of the WhatsApp verification:\nIf number exists (i.e., valid WhatsApp number), go one way.\nIf number does not exist, go another way.\n\n## 2. Node: Send Message Using Rapiwa\n**Purpose:**\nSends a personalized WhatsApp message to the customer using Rapiwa, with tracking details and a thank-you note.\n\n## 3. Node: verified append row in sheet\n**Purpose:**\nLogs customer and tracking info to Google Sheets with the status verified (i.e., they have WhatsApp and message was sent).\n\n## 4. Node: verified append row in sheet1\n**Purpose:**\nLogs the same data to Google Sheets, but with the status unverified (i.e., customer doesn't have WhatsApp, so message wasn't sent).\n\n## 5. Node: Wait\n**Purpose:**\nPauses briefly before processing the next item — helps to avoid rate-limiting or API overload.\n"
},
"typeVersion": 1
},
{
"id": "0cd9fd3c-ef9a-4ff3-bbdb-d6be4ac3a962",
"name": "Nota adhesiva5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-768,
-96
],
"parameters": {
"color": 3,
"width": 2112,
"height": 272,
"content": "# Workflow Summary\n- Webhook receives new Order Fulfillment event from Shopify\n- Retrieves full customer details using the Shopify API\n- Extracts and formats customer data (name, phone, product, tracking info)\n- Cleans and verifies the customer's phone number\n- Checks if the number is valid on WhatsApp using Rapiwa\n- Sends personalized WhatsApp message with tracking details (if verified)\n- Logs all fulfillment and contact info in Google Sheets\n- Marks contacts as verified or unverified based on WhatsApp status\n- Fully automated, with batching and throttling to prevent overload\n"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a4f318ef-c966-4231-8931-721438e6c92f",
"connections": {
"63985bfb-4fcd-427a-b6f5-ca56972dfa4a": {
"main": [
[
{
"node": "ed921c20-60e1-4c65-a946-cd477658d7e1",
"type": "main",
"index": 0
}
],
[
{
"node": "ef4e6f6f-5c3b-4598-ace3-bb47d91882fe",
"type": "main",
"index": 0
}
]
]
},
"53198fba-bd3b-4169-bfed-647f13caa22a": {
"main": [
[
{
"node": "357f157e-ebd1-4865-8384-c2202c69461a",
"type": "main",
"index": 0
}
]
]
},
"9df911dd-af84-4a81-8b15-4c758ed36c9e": {
"main": [
[
{
"node": "af670da1-14e9-4a4d-9d06-6e8d2bcbe051",
"type": "main",
"index": 0
}
]
]
},
"357f157e-ebd1-4865-8384-c2202c69461a": {
"main": [
[],
[
{
"node": "9df911dd-af84-4a81-8b15-4c758ed36c9e",
"type": "main",
"index": 0
}
]
]
},
"0e597ab7-be2c-45fd-8b2b-6a34989b3b9a": {
"main": [
[
{
"node": "e9854c40-304b-49a8-a3e2-f3aae6a0996a",
"type": "main",
"index": 0
}
]
]
},
"bb285dab-fc99-4d5b-8b3b-36959d591a4f": {
"main": [
[
{
"node": "357f157e-ebd1-4865-8384-c2202c69461a",
"type": "main",
"index": 0
}
]
]
},
"ed921c20-60e1-4c65-a946-cd477658d7e1": {
"main": [
[
{
"node": "9c7f6119-154c-4abf-8336-3ebe8133f479",
"type": "main",
"index": 0
}
]
]
},
"e9854c40-304b-49a8-a3e2-f3aae6a0996a": {
"main": [
[
{
"node": "bb285dab-fc99-4d5b-8b3b-36959d591a4f",
"type": "main",
"index": 0
}
]
]
},
"9c7f6119-154c-4abf-8336-3ebe8133f479": {
"main": [
[
{
"node": "53198fba-bd3b-4169-bfed-647f13caa22a",
"type": "main",
"index": 0
}
]
]
},
"ef4e6f6f-5c3b-4598-ace3-bb47d91882fe": {
"main": [
[
{
"node": "53198fba-bd3b-4169-bfed-647f13caa22a",
"type": "main",
"index": 0
}
]
]
},
"af670da1-14e9-4a4d-9d06-6e8d2bcbe051": {
"main": [
[
{
"node": "63985bfb-4fcd-427a-b6f5-ca56972dfa4a",
"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?
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
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.
Compartir este flujo de trabajo