Envoyer automatiquement des factures WooCommerce sur WhatsApp via l'API Rapiwa

Intermédiaire

Ceci est unCRMworkflow d'automatisation du domainecontenant 15 nœuds.Utilise principalement des nœuds comme If, Code, Wait, HttpRequest, GoogleSheets. Envoyer automatiquement des factures WooCommerce via WhatsApp avec l'API Rapiwa

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Informations d'identification Google Sheets API

Catégorie

Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "ze5g8DGP9lpajRcO",
  "meta": {
    "instanceId": "cb9a1e5321767b6316634728341237e564b2587ab15b74ca0a89eb02a53484d6"
  },
  "name": "Send WooCommerce Invoices on WhatsApp Automatically Using Rapiwa API",
  "tags": [],
  "nodes": [
    {
      "id": "5f97a4ae-506f-4eeb-b65b-7387d6db9d37",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        1600,
        784
      ],
      "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": "54f3f8ff-50f7-455d-8cbc-ba13df739240",
      "name": "Attendre",
      "type": "n8n-nodes-base.wait",
      "position": [
        2096,
        864
      ],
      "webhookId": "6c474e54-eb3c-4fcd-b455-948322cd0121",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "61f4a6bc-43fd-44f9-a1bf-09ad7fb8cc78",
      "name": "Boucler sur les éléments",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        624,
        768
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "bff871ca-9ae6-4988-ada1-6d5f5ea9f959",
      "name": "Clean Déclencheur Webhooks Response Data",
      "type": "n8n-nodes-base.code",
      "position": [
        192,
        768
      ],
      "parameters": {
        "jsCode": "return $input.all().map(item => {\n  const body = item.json;\n\n  const customer = {\n    first_name: body.billing.first_name,\n    last_name: body.billing.last_name,\n    name: body.billing.first_name + ' ' + body.billing.last_name,\n    email: body.billing.email,\n    phone: body.billing.phone,\n    address: {\n      address_1: body.billing.address_1,\n      address_2: body.billing.address_2,\n      city: body.billing.city,\n      state: body.billing.state,\n      postcode: body.billing.postcode,\n      country: body.billing.country\n    }\n  };\n\n  const products = body.line_items.map(product => ({\n    name: product.name,\n    product_id: product.product_id,\n    variation_id: product.variation_id,\n    quantity: product.quantity,\n    total: `${body.currency} ${product.total}`, // for currency here\n    price: product.price,\n    currency: body.currency,\n    image: product.image?.src || null,\n    size: product.meta_data?.find(meta => meta.key === \"size\")?.value || null\n  }));\n\n  return {\n    json: {\n      data: {\n        customer,\n        products,\n        invoice_link: body.payment_url\n      }\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bde660f4-cf63-4d5e-bff2-65f8c77f3342",
      "name": "Clean WhatsApp Number",
      "type": "n8n-nodes-base.code",
      "position": [
        1024,
        784
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\n\nconst updatedItems = items.map((item) => {\n  const waNo = item?.json?.[\"number\"];\n  const waNoStr = typeof waNo === 'string'\n    ? waNo\n    : (waNo !== undefined && waNo !== null ? String(waNo) : \"\");\n\n  const cleanedNumber = waNoStr.replace(/\\D/g, \"\"); // Remove non-digit characters\n\n  item.json[\"number\"] = cleanedNumber;\n\n  return item;\n});\n\nreturn updatedItems;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bbda923c-2c75-4f33-9b78-d0b895f91ac7",
      "name": "Check valid whatsapp number Using Rapiwa",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1264,
        784
      ],
      "parameters": {
        "url": "=https://app.rapiwa.com/api/verify-whatsapp",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "number",
              "value": "={{ $json.data.customer.phone }}"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "jnaHCyYia9OAFozh",
          "name": "Rapiwa Bearer YOUR_TOKEN_HERE"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "688ab63d-8a18-4596-8354-9faaec7ac854",
      "name": "Send Message Using Rapiwa",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1856,
        672
      ],
      "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": "=Hey *{{ $('Clean WhatsApp Number').item.json.data.customer.name }}*,\n\nThank you for your recent order from *SpaGreen Creative*!\nWe truly appreciate your support.\n\n🛍️ *Order Summary:*\n• *Product:* {{ $('Clean WhatsApp Number').item.json.data.products[0].name }}\n• *Size:* {{ $('Clean WhatsApp Number').item.json.data.products[0].size }}\n• *Quantity:* {{ $('Clean WhatsApp Number').item.json.data.products[0].quantity }}\n• *Product ID:* {{ $('Clean WhatsApp Number').item.json.data.products[0].product_id }}\n• *Price per item:* {{ $('Clean WhatsApp Number').item.json.data.products[0].price }}\n• *Total Price:* {{ $('Clean WhatsApp Number').item.json.data.products[0].total }} \n\n📦 *Shipping Address:* {{ $('Clean WhatsApp Number').item.json.data.customer.address.address_1 }}\n\n🖼️ *Product Preview:* {{ $('Clean WhatsApp Number').item.json.data.products[0].image }}\n\n🧾 *Invoice:* {{ $('Clean WhatsApp Number').item.json.data.invoice_link }}\n\nIf you have any questions or need help, feel free to reach out.\n\n– Team *SpaGreen Creative*\n"
            }
          ]
        },
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "id": "jnaHCyYia9OAFozh",
          "name": "Rapiwa Bearer YOUR_TOKEN_HERE"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "77e7e43e-79ca-48bd-a85d-7be61344a3bd",
      "name": "Append Rows in Sheet Verified & Sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2080,
        672
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('Clean WhatsApp Number').item.json.data.customer.name }}",
            "size": "={{ $('Clean WhatsApp Number').item.json.data.products[0].size }}",
            "email": "={{ $('Clean WhatsApp Number').item.json.data.customer.email }}",
            "number": "={{ $json.to }}",
            "status": "sent",
            "address1": "={{ $('Clean WhatsApp Number').item.json.data.customer.address.address_1 }}",
            "quantity": "={{ $('Clean WhatsApp Number').item.json.data.products[0].quantity }}",
            "validity": "verified",
            "productId": "={{ $('Clean WhatsApp Number').item.json.data.products[0].product_id }}",
            "totalPrice": "={{ $('Clean WhatsApp Number').item.json.data.products[0].total }}",
            "invoiceLink": "={{ $('Clean WhatsApp Number').item.json.data.invoice_link }}",
            "productImage": "={{ $('Clean WhatsApp Number').item.json.data.products[0].image }}",
            "productTitle": "={{ $('Clean WhatsApp Number').item.json.data.products[0].name }}"
          },
          "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": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address1",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "address1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "productTitle",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "productTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "productId",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "productId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "size",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "size",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "totalPrice",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "totalPrice",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "productImage",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "productImage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "invoiceLink",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "invoiceLink",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "validity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "validity",
              "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/1NVYsvOg3mzsAGlzJiL7-2mtkN-5gsmqd3fG8hboE3vk/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1NVYsvOg3mzsAGlzJiL7-2mtkN-5gsmqd3fG8hboE3vk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NVYsvOg3mzsAGlzJiL7-2mtkN-5gsmqd3fG8hboE3vk/edit?usp=drivesdk",
          "cachedResultName": "WooCommerce - Send WhatsApp invoice link"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "gFH3Wjq6yYqSEAei",
          "name": "Google Sheets"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "ffac664e-9c0c-48e8-aa24-2256cfbbaca2",
      "name": "WooCommerce Trigger",
      "type": "n8n-nodes-base.wooCommerceTrigger",
      "position": [
        -64,
        768
      ],
      "webhookId": "3aa9eb89-094d-49ba-904a-5c2d43015db8",
      "parameters": {
        "event": "order.updated"
      },
      "credentials": {
        "wooCommerceApi": {
          "id": "BZ5Lp9IB4Phney4R",
          "name": "WooCommerce (get customer)"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9ed7e611-af93-4329-a39c-992cbdc51b33",
      "name": "Append Rows in Sheet Unverified & Not sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1872,
        864
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('Clean WhatsApp Number').item.json.data.customer.name }}",
            "size": "={{ $('Clean WhatsApp Number').item.json.data.products[0].size }}",
            "email": "={{ $('Clean WhatsApp Number').item.json.data.customer.email }}",
            "number": "={{ $json.data.number }}",
            "status": "not sent",
            "address1": "={{ $('Clean WhatsApp Number').item.json.data.customer.address.address_1 }}",
            "quantity": "={{ $('Clean WhatsApp Number').item.json.data.products[0].quantity }}",
            "validity": "unverified",
            "productId": "={{ $('Clean WhatsApp Number').item.json.data.products[0].product_id }}",
            "totalPrice": "={{ $('Clean WhatsApp Number').item.json.data.products[0].total }}",
            "invoiceLink": "={{ $('Clean WhatsApp Number').item.json.data.invoice_link }}",
            "productImage": "={{ $('Clean WhatsApp Number').item.json.data.products[0].image }}",
            "productTitle": "={{ $('Clean WhatsApp Number').item.json.data.products[0].name }}"
          },
          "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": "email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address1",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "address1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "productTitle",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "productTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "productId",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "productId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "size",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "size",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "quantity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "quantity",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "totalPrice",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "totalPrice",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "productImage",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "productImage",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "invoiceLink",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "invoiceLink",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "validity",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "validity",
              "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/1NVYsvOg3mzsAGlzJiL7-2mtkN-5gsmqd3fG8hboE3vk/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1NVYsvOg3mzsAGlzJiL7-2mtkN-5gsmqd3fG8hboE3vk",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1NVYsvOg3mzsAGlzJiL7-2mtkN-5gsmqd3fG8hboE3vk/edit?usp=drivesdk",
          "cachedResultName": "WooCommerce - Send WhatsApp invoice link"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "gFH3Wjq6yYqSEAei",
          "name": "Google Sheets"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "7f93c1a4-5703-4edd-976f-fecf168023e4",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1392,
        480
      ],
      "parameters": {
        "width": 1216,
        "height": 1072,
        "content": "# Send WooCommerce Invoices on WhatsApp Automatically Using Rapiwa API\n\n## Overview\nThis workflow listens for new or updated WooCommerce orders, cleans and structures the order data, processes orders in batches, and standardizes WhatsApp phone numbers. It verifies phone numbers via the Rapiwa API, sends invoice links or messages to verified numbers, and logs results into separate Google Sheets tabs for verified and unverified numbers. Throttling and looping are managed using batch processing and wait delays.\n\n\n## Features\n- Extracts customer, address, product, and invoice_link from order payloads.\n- Batch processing for controlled throughput.\n- WhatsApp verification step prior to sending messages.\n- Conditional branching based on verification result (`$json.data.exists == \"true\"`).\n- Personalized message templates using product and customer fields.\n- Logging to Google Sheets with distinct columns for verified and unverified flows.\n\n\n## Google Sheet Required Columns\n**A Google Sheet** formatted like this ➤ [Sample](https://docs.google.com/spreadsheets/d/1NVYsvOg3mzsAGlzJiL7-2mtkN-5gsmqd3fG8hboE3vk/edit?usp=sharing)\n\n\n## How to Use This Workflow\n1. Configure credentials:\n   - Add Rapiwa Bearer YOUR_TOKEN_HERE to the `Rapiwa Bearer YOUR_TOKEN_HERE` credential.\n   - Add Google Sheets OAuth2 credential and ensure the spreadsheet ID is accessible.\n   - Configure WooCommerce credentials for the trigger (or replace the trigger with a Shopify webhook and set Shopify credentials).\n2. Verify the Google Sheet has the required columns listed above.\n4. Watch the execution path: webhook → mapping → batch loop → number cleaning → verify → IF → send or log → append sheet → wait → continue.\n\n## Customization Ideas\n- Replace WooCommerce trigger with a Shopify webhook trigger and adapt the mapping code.\n- Change the message template to include different product or customer fields.\n- Add filters in the mapping code to target customers (e.g., `total_spent > 5000`, order count, or tags).\n- Add fallback channels (SMS or email) for unverified numbers before marking as 'not sent'.\n- Send an admin summary (Slack or email) after each run.\n- Enrich customer data with external lookups (CRM/loyalty service) before sending.\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"
      },
      "typeVersion": 1
    },
    {
      "id": "ffb8f162-d281-4700-a655-9c67cd3db51d",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1504,
        176
      ],
      "parameters": {
        "width": 848,
        "height": 912,
        "content": "## If (Condition)\n- Purpose: Branch the workflow based on Rapiwa verification response.\n- It's route to `Send Message Using Rapiwa` or `Unverified & Not sent`.\n\n\n## Send Message Using Rapiwa\n- Purpose: Send a personalized WhatsApp message (text) via Rapiwa to the verified number.\n- URL: `https://app.rapiwa.com/api/send-message`\n- Credentials: `httpBearerAuth` (Rapiwa Bearer YOUR_TOKEN_HERE)\n\n\n## Append Rows in Sheet Verified & Sent\n- Purpose: Append a row for each successful send with `status: sent` and `validity: verified`.\n\n\n## Append Rows in Sheet Unverified & Not sent\n- Purpose: Append a row for unverified numbers with `validity: unverified` and `status: not sent`.\n\n## Wait\n- Purpose: Delay between processing cycles and re-enter the `Loop Over Items` chain."
      },
      "typeVersion": 1
    },
    {
      "id": "da93b6ea-eabe-49f2-82e1-74bfc22921cc",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        832,
        416
      ],
      "parameters": {
        "width": 656,
        "height": 672,
        "content": "## 1. Clean WhatsApp Number\n- Purpose: Ensure the `number` field is a string and remove non-digit characters.\n- Why it matters: Ensures Rapiwa receives a consistent numeric-only phone number.\n\n\n## 2. Check valid whatsapp number Using Rapiwa\n- Purpose: Verify whether the cleaned number is registered on WhatsApp via Rapiwa.\n- HTTP method: POST\n- URL: `https://app.rapiwa.com/api/verify-whatsapp` (set in the node as an expression)"
      },
      "typeVersion": 1
    },
    {
      "id": "3b65cf78-cfc1-417b-8a45-3719a25efbf0",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        480
      ],
      "parameters": {
        "width": 624,
        "height": 608,
        "content": "## 1. WooCommerce Trigger\n- Trigger event: `order. complete`\n- Purpose: Entry point for the workflow. Receives order complete from WooCommerce.\n- Credentials: `wooCommerceApi` (example name: \"WooCommerce (get customer)\").\n\n## 2. Clean Webhooks Response Data\n- Purpose: Transform the incoming order payload into a compact structure \n- Why it matters: Normalizes different incoming payload shapes into a single downstream contract.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "8e38d72a-772a-4203-8d71-4953684bcc8e",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        1104
      ],
      "parameters": {
        "color": 7,
        "width": 2512,
        "height": 448,
        "content": "## How to Use — Step-by-step Setup\n1) Configure credentials in n8n\n   - Rapiwa: add your Bearer YOUR_TOKEN_HERE to an HTTP Bearer YOUR_TOKEN_HERE (`Rapiwa Bearer YOUR_TOKEN_HERE`).\n   - Google Sheets: connect OAuth2 credentials (`Google Sheets`).\n   - WooCommerce: add WooCommerce API credentials for the trigger (`WooCommerce (get customer)`), or configure Shopify credentials if adapting.\n\n3) Configure nodes\n   - Trigger: `WooCommerce Trigger` (event: `order.updated`) or a Shopify webhook.\n   - Code: `Clean Webhooks Response Data` — map incoming order into `{ data: { customer, products, invoice_link } }`.\n   - Code: `Clean WhatsApp Number` — remove non-digit characters and normalize numbers.\n   - HTTP Request: `Check valid whatsapp number Using Rapiwa` — POST `https://app.rapiwa.com/api/verify-whatsapp` with `{ number }`.\n   - HTTP Request: `Send Message Using Rapiwa` — POST `https://app.rapiwa.com/api/send-message` with `{ number, message_type, message }`.\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "bbe634d2-4b6c-45a8-b76d-78e29d6e7ebd",
  "connections": {
    "5f97a4ae-506f-4eeb-b65b-7387d6db9d37": {
      "main": [
        [
          {
            "node": "688ab63d-8a18-4596-8354-9faaec7ac854",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "9ed7e611-af93-4329-a39c-992cbdc51b33",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "bde660f4-cf63-4d5e-bff2-65f8c77f3342",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ffac664e-9c0c-48e8-aa24-2256cfbbaca2": {
      "main": [
        [
          {
            "node": "Clean Webhooks Response Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bde660f4-cf63-4d5e-bff2-65f8c77f3342": {
      "main": [
        [
          {
            "node": "bbda923c-2c75-4f33-9b78-d0b895f91ac7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "688ab63d-8a18-4596-8354-9faaec7ac854": {
      "main": [
        [
          {
            "node": "77e7e43e-79ca-48bd-a85d-7be61344a3bd",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean Webhooks Response Data": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "77e7e43e-79ca-48bd-a85d-7be61344a3bd": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bbda923c-2c75-4f33-9b78-d0b895f91ac7": {
      "main": [
        [
          {
            "node": "5f97a4ae-506f-4eeb-b65b-7387d6db9d37",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9ed7e611-af93-4329-a39c-992cbdc51b33": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

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

Intermédiaire - CRM

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.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds15
Catégorie1
Types de nœuds8
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34