AutomationFlowsSlack & Telegram › Send Woocommerce Discount Coupons to Customers via Whatsapp Using Rapiwa API

Send Woocommerce Discount Coupons to Customers via Whatsapp Using Rapiwa API

ByRapiwa @rapiwa on n8n.io

This workflow is ideal for WooCommerce store owners who want to automatically send promotional WhatsApp messages to their customers when new coupons are created. It’s designed for marketers and eCommerce managers looking to boost engagement, streamline coupon sharing, and track…

Event trigger★★★★☆ complexity16 nodesWoo Commerce TriggerGoogle SheetsWooCommerceN8N Nodes Rapiwa
Slack & Telegram Trigger: Event Nodes: 16 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #10140 — we link there as the canonical source.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Send WooCommerce Discount Coupons to Customers via WhatsApp Using Rapiwa API",
  "nodes": [
    {
      "id": "70fcfcfc-a653-4d5b-92db-01951eb416da",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        160,
        224
      ],
      "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": "1830de6f-7291-4150-8d02-3b88bed4a49a",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        688,
        320
      ],
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "2a78cc95-9c6f-484d-913a-de3d708bc35e",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -560,
        208
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "3a8e2e8e-faa4-4f84-ad98-855f22d74a52",
      "name": "WooCommerce Trigger",
      "type": "n8n-nodes-base.wooCommerceTrigger",
      "position": [
        -1280,
        208
      ],
      "parameters": {
        "event": "coupon.created"
      },
      "credentials": {
        "wooCommerceApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e421bbaa-b283-417d-8dc3-c8715c855518",
      "name": "Clean WhatsApp Number",
      "type": "n8n-nodes-base.code",
      "position": [
        -304,
        224
      ],
      "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": "13e94fe4-66dd-42d2-85a8-e291fb7dee28",
      "name": "Save State of Rows in Verified & Sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        672,
        96
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('Clean WhatsApp Number').item.json.first_name }} {{ $('Clean WhatsApp Number').item.json.first_name }}",
            "email": "={{ $('Clean WhatsApp Number').item.json.billing.email }}",
            "number": "={{ $('Clean WhatsApp Number').item.json.billing.phone }}",
            "status": "sent",
            "address1": "={{ $('Clean WhatsApp Number').item.json.billing.address_1 }}",
            "validity": "verified",
            "couponCode": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].couponCode }}",
            "couponType": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].discountType }}",
            "createDate": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].dateCreate }}",
            "expireDate": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].dateExpires }}",
            "couponTitle": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].description }}",
            "aouponAmount": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].discountAmount }}"
          },
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address1",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "address1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "couponCode",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "couponCode",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "couponTitle",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "couponTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "couponType",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "couponType",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "aouponAmount",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "aouponAmount",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "createDate",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "createDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "expireDate",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "expireDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "validity",
              "type": "string",
              "display": true,
              "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": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "14UclmcZ7TGU4Qaag89yaZLVFee1IQNA6t-uhgN8_TAE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14UclmcZ7TGU4Qaag89yaZLVFee1IQNA6t-uhgN8_TAE/edit?usp=drivesdk",
          "cachedResultName": "Send WooCommerce Promo Codes via WhatsApp with Rapiwa API"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "bdd3c281-cc39-441c-8275-e0b95390429b",
      "name": "Format WooCommerce Trigger Response Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -1040,
        208
      ],
      "parameters": {
        "jsCode": "// Access the input data (from previous node)\nconst coupons = items[0].json;\n\n// If input is not an array, wrap it\nconst couponsArray = Array.isArray(coupons) ? coupons : [coupons];\n\n// Format coupon data\nconst formattedCoupons = couponsArray.map(coupon => {\n  const amountWithSymbol = coupon.discount_type === \"percent\" \n    ? coupon.amount + \"%\" \n    : coupon.amount;\n\n  return {\n    couponCode: coupon.code,\n    discountAmount: amountWithSymbol,\n    discountType: coupon.discount_type,\n    description: coupon.description,\n    dateCreate: coupon.date_modified,\n    dateExpires: coupon.date_expires,\n    freeShipping: coupon.free_shipping,\n  };\n});\n\n// Return as a **single item** with the array in a `coupons` field\nreturn [\n  {\n    json: {\n      data: {\n        coupons: formattedCoupons\n      }\n    }\n  }\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "e87d5c95-b176-4062-897d-3eb15bd6c5e1",
      "name": "Get many customers",
      "type": "n8n-nodes-base.wooCommerce",
      "position": [
        -752,
        208
      ],
      "parameters": {
        "filters": {},
        "resource": "customer",
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "wooCommerceApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8e804acd-a932-4849-bc42-428c478808cd",
      "name": "Save State of Rows in Unerified & Not sent",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        464,
        320
      ],
      "parameters": {
        "columns": {
          "value": {
            "name": "={{ $('Clean WhatsApp Number').item.json.first_name }} {{ $('Clean WhatsApp Number').item.json.first_name }}",
            "email": "={{ $('Clean WhatsApp Number').item.json.billing.email }}",
            "number": "={{ $('Clean WhatsApp Number').item.json.billing.phone }}",
            "status": "not sent",
            "address1": "={{ $('Clean WhatsApp Number').item.json.billing.address_1 }}",
            "validity": "unverified",
            "couponCode": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].couponCode }}",
            "couponType": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].discountType }}",
            "createDate": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].dateCreate }}",
            "expireDate": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].dateExpires }}",
            "couponTitle": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].description }}",
            "aouponAmount": "={{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].discountAmount }}"
          },
          "schema": [
            {
              "id": "name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "address1",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "address1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "couponCode",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "couponCode",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "couponTitle",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "couponTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "couponType",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "couponType",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "aouponAmount",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "aouponAmount",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "createDate",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "createDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "expireDate",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "expireDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "validity",
              "type": "string",
              "display": true,
              "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": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "14UclmcZ7TGU4Qaag89yaZLVFee1IQNA6t-uhgN8_TAE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/14UclmcZ7TGU4Qaag89yaZLVFee1IQNA6t-uhgN8_TAE/edit?usp=drivesdk",
          "cachedResultName": "Send WooCommerce Promo Codes via WhatsApp with Rapiwa API"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "091ac102-1ec7-4dca-a64e-702e075bb3c3",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        32
      ],
      "parameters": {
        "width": 400,
        "height": 496,
        "content": "## Get All Customers\n- Purpose: Fetches all WooCommerce customer records.\n- Output: Customer list used for messaging\n"
      },
      "typeVersion": 1
    },
    {
      "id": "395e382a-e3b1-415c-bfcf-efcbc877854d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        -80
      ],
      "parameters": {
        "width": 464,
        "height": 608,
        "content": "## Clean WhatsApp Numbers\n- Purpose: Standardizes phone numbers for WhatsApp validation.\n- Removes non-digit characters\n- Example:\n  - Input: `+880-1322-827799`\n  - Output: `8801322827799`\n\n## Verify WhatsApp Number with Rapiwa\n- Purpose: Checks if a number is registered on WhatsApp.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a73fd36e-e349-44bd-9bf0-221fd7f22c8d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        80,
        -304
      ],
      "parameters": {
        "width": 768,
        "height": 832,
        "content": "## If (Conditional)\n- Purpose: Branch the flow depending on Rapiwa verification.\n\n\n## Send WhatsApp Message (via Rapiwa)\n- Purpose: Sends a personalized WhatsApp coupon message using Rapiwa.\n\n\n## Log Verified & Sent (Google Sheets)\n- Purpose: Saves message delivery info for verified users.\n\n## Log Unverified & Not Sent (Google Sheets)\n- Purpose: Saves info for users not registered on WhatsApp.\n\n## Wait Before Next\n- Purpose: Adds delay between customer processing.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "a2b388b8-8055-4008-970a-4c1f82d86c81",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1376,
        -144
      ],
      "parameters": {
        "width": 544,
        "height": 672,
        "content": "## WooCommerce Trigger\n- Purpose: Starts the workflow when a new coupon is created in WooCommerce.\n- How it works:\n  - Listens for the `coupon.created` event\n  - Uses WooCommerce credentials to retrieve data\n- Output: Coupon details like code, discount, expiry date, etc.\n\n\n\n## Format Coupon Data\n- Purpose: Cleans and structures coupon data into a consistent format.\n- Why it matters: Makes data easier to use in messages and logs\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d25e8d9c-0c45-4c70-baa8-49d18295a065",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2736,
        -144
      ],
      "parameters": {
        "width": 1328,
        "height": 1776,
        "content": "# Send WooCommerce Discount Coupons to Customers via WhatsApp Using Rapiwa API\n\n## Overview\nThis workflow listens for WooCommerce coupon creation events (coupon.created) and uses customer billing data to send promotional WhatsApp messages via the Rapiwa API. The flow formats the coupon data, cleans phone numbers, verifies WhatsApp registration with Rapiwa, sends the promotional message when verified, and logs each attempt to Google Sheets (separate sheets for verified/sent and unverified/not sent).\n\n## Features\n- Trigger: fires on WooCommerce coupon creation (`coupon.created`) using the `WooCommerce Trigger` node.\n- Coupon formatting: `Format WooCommerce Trigger Response Data` code node normalizes coupon fields into `data.coupons` (couponCode, discountAmount, discountType, description, dateCreate, dateExpires, freeShipping).\n- Phone cleaning: `Clean WhatsApp Number` ensures phone numbers contain only digits (String(rawNumber).replace(/\\D/g, \"\")).\n- Pre-send verification: calls Rapiwa verify endpoint (POST https://app.rapiwa.com/api/verify-whatsapp) to confirm WhatsApp registration.\n- Message sending: POST to https://app.rapiwa.com/api/send-message with a templated promo message built from coupon fields.\n- Audit logging: appends rows to Google Sheets for both verified/sent and unverified/not sent results.\n\n## Requirements\n- Rapiwa account and a valid Bearer token (used by the HTTP Request nodes).\n- Google account with Sheets access and an OAuth2 credential for the Google Sheets nodes.\n- WooCommerce store configured to emit coupon.created events (or use a webhook equivalent).\n\n\n## Google Sheet Required Columns\n**A Google Sheet formatted like this** \u27a4 [sample](https://docs.google.com/spreadsheets/d/14UclmcZ7TGU4Qaag89yaZLVFee1IQNA6t-uhgN8_TAE/edit?usp=sharing)\n\n\n## Nodes Used in the Workflow\n- `WooCommerce Trigger` \u2014 listens for `coupon.created` events. Example webhookId present in the export.\n- `Format WooCommerce Trigger Response Data` (Code) \u2014 maps incoming coupon fields to a `data.coupons` array. \n- `Check valid whatsapp number Using Rapiwa` (HTTP Request) \u2014 POST https://app.rapiwa.com/api/verify-whatsapp with body { number: ={{ $json.billing.phone }} } and HTTP Bearer auth.\n- `Send Message Using Rapiwa` (HTTP Request) \u2014 POST https://app.rapiwa.com/api/send-message with body fields: number, message_type=text, message (templated using coupon data). Example message in flow uses `Format WooCommerce Trigger Response Data` coupon fields.\n- `Save State of Rows in Verified & Sent` / `Save State of Rows in Unerified & Not sent` (Google Sheets) \u2014 append rows with mapped coupon/customer fields.\n\n## How to Use This Workflow\n1) Configure credentials in n8n\n   - Create `Rapiwa Bearer Auth` (HTTP Bearer) and paste your token.\n   - Add `Google Sheets` OAuth2 credentials.\n   - Add WooCommerce API credentials (example name in flow: `WooCommerce (get customer)`).\n\n2) Create or update Google Sheets\n   - Create sheets with headers matching the keys listed in \"Google Sheet Required Columns\".\n   - Replace the example spreadsheet IDs in the Google Sheets nodes with your own spreadsheet ID and sheet gid.\n\n4) Validate Code nodes\n   - Check `Format WooCommerce Trigger Response Data` to ensure coupon fields exist in your WooCommerce payload.\n   - Confirm `Clean WhatsApp Number` is using the same field name where the phone lives (billing.phone or another path).\n\n5) Check HTTP Request nodes\n   - Ensure `Check valid whatsapp number Using Rapiwa` uses the correct number expression and the `Rapiwa Bearer Auth` credential.\n   - Review the `Send Message Using Rapiwa` templated message to ensure it references the correct coupon/customer fields.\n\n\n## Notes & Warnings\n- The Google Sheets mapping in the flow contains a field named `aouponAmount` (typo). If you want `couponAmount` in your sheet, either rename the mapping or rename the sheet header.\n- The `If` node logic and the Rapiwa responses should be tested \u2014 the exported IF compares to a string in other exports; normalize boolean/string types before comparison.\n- Do not hard-code credentials or tokens in nodes; use n8n credentials.\n- Ensure the phone field used by `Check valid whatsapp number Using Rapiwa` matches the cleaned number path used by `Clean WhatsApp Number`.\n- Test with a small number of coupons first to confirm message content and rate-limiting behavior.\n\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": "fc197945-5c13-4a08-aed9-79cf3d9c3c83",
      "name": "Rapiwa",
      "type": "n8n-nodes-rapiwa.rapiwa",
      "position": [
        -96,
        224
      ],
      "parameters": {
        "number": "={{ $json.billing.phone }}",
        "operation": "verifyWhatsAppNumber"
      },
      "credentials": {
        "rapiwaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8929aa8f-78c2-4880-8aab-84ae6a3fc064",
      "name": "Rapiwa (send message)",
      "type": "n8n-nodes-rapiwa.rapiwa",
      "position": [
        448,
        96
      ],
      "parameters": {
        "number": "={{ $json.data.number }}",
        "message": "=Hi {{ $('Clean WhatsApp Number').item.json.first_name }} {{ $('Clean WhatsApp Number').item.json.last_name }},\n\n\ud83c\udf89 {{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].description }} from SpaGreen Creative! \ud83c\udf89  \nCelebrate with *{{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].discountAmount }}* OFF \u2014 use code *{{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].couponCode }}* at checkout.  \nThis special offer is valid until *{{ $('Format WooCommerce Trigger Response Data').item.json.data.coupons[0].dateExpires }}* \u2014 don\u2019t miss out!\n\nThanks for being with us!\n"
      },
      "credentials": {
        "rapiwaApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Rapiwa (send message)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Save State of Rows in Unerified & Not sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rapiwa": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Clean WhatsApp Number",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get many customers": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "WooCommerce Trigger": {
      "main": [
        [
          {
            "node": "Format WooCommerce Trigger Response Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean WhatsApp Number": {
      "main": [
        [
          {
            "node": "Rapiwa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rapiwa (send message)": {
      "main": [
        [
          {
            "node": "Save State of Rows in Verified & Sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save State of Rows in Verified & Sent": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format WooCommerce Trigger Response Data": {
      "main": [
        [
          {
            "node": "Get many customers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save State of Rows in Unerified & Not sent": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

This workflow is ideal for WooCommerce store owners who want to automatically send promotional WhatsApp messages to their customers when new coupons are created. It’s designed for marketers and eCommerce managers looking to boost engagement, streamline coupon sharing, and track…

Source: https://n8n.io/workflows/10140/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

This 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 t

Google Sheets, Woo Commerce Trigger, N8N Nodes Rapiwa
Slack & Telegram

This n8n workflow enables automated cross-selling by identifying each WooCommerce customer's most frequently purchased product, finding a related product to recommend, and sending a personalized Whats

WooCommerce, HTTP Request, Google Sheets +1
Slack & Telegram

This workflow is designed for business analysts, market researchers, lead generation specialists, and sales teams who need to gather detailed business intelligence from Google Maps. It's particularly

Telegram, OpenAI, N8N Nodes Apify +5
Slack & Telegram

checkProcess(old). Uses googleSheets, httpRequest, telegram, @n-octo-n/n8n-nodes-json-database. Event-driven trigger; 40 nodes.

Google Sheets, HTTP Request, Telegram +3
Slack & Telegram

Transform your lead list into an AI-powered calling machine. This workflow automates your entire cold calling process using Vapi's conversational AI to initiate calls, qualify leads, capture detailed

Google Sheets, HTTP Request, Slack