{
  "name": "Send WhatsApp bulk template messages from Google Sheets or CSV via WOZTELL",
  "nodes": [
    {
      "id": "ec8ae23d-d6a0-4802-bded-8548d11b472a",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -176,
        -64
      ]
    },
    {
      "id": "67aef980-1870-4744-ad6c-29e7800aba9e",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        48,
        -64
      ]
    },
    {
      "id": "41860342-ee59-4c13-a5e8-eb0576c01d30",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        496,
        -128
      ]
    },
    {
      "id": "be86c907-43d2-470e-ba19-0bcd0ecef31d",
      "name": "Send message template",
      "type": "@woztell-sanuker/n8n-nodes-woztell-sanuker.woztell",
      "position": [
        720,
        -128
      ]
    },
    {
      "id": "ae418aa6-1bcc-455d-b1cf-046b5bc19152",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        272,
        -64
      ]
    },
    {
      "id": "81bed00c-bace-454e-a531-1d8f22f41962",
      "name": "Update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        944,
        -128
      ]
    },
    {
      "id": "ea729099-596d-439b-af83-e12940706f1b",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        1168,
        -64
      ]
    },
    {
      "id": "72be80c6-4826-4e8f-9b33-abd2baaade0a",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -176,
        240
      ]
    },
    {
      "id": "85e4294b-b95b-4613-a688-cb5f5f37fd61",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        48,
        240
      ]
    },
    {
      "id": "b2f71a69-c43d-4afb-a558-9044f95f0fde",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        496,
        176
      ]
    },
    {
      "id": "fba9f360-abe6-437b-9d4d-87b11553fba9",
      "name": "Send message template1",
      "type": "@woztell-sanuker/n8n-nodes-woztell-sanuker.woztell",
      "position": [
        720,
        176
      ]
    },
    {
      "id": "f10295e5-ff39-406b-91a4-f57cf80f440f",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        272,
        240
      ]
    },
    {
      "id": "ca3dfe4c-ffba-4eca-bb82-adfa290c6241",
      "name": "Wait1",
      "type": "n8n-nodes-base.wait",
      "position": [
        944,
        240
      ]
    },
    {
      "id": "4a87721c-5b9c-4509-8f9d-0b9d047c9b2f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -256,
        -144
      ],
      "parameters": {
        "width": null,
        "height": 544,
        "content": "### Google Sheets / n8n forms integration.\n"
      }
    },
    {
      "id": "5e1c4139-6a6a-491d-8e51-5db96cce5e0d",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -912,
        -784
      ],
      "parameters": {
        "width": 560,
        "height": 1552,
        "content": "## ✨ What this template does\nThis workflow sends WhatsApp template messages in bulk to a contact list stored in Google Sheets or uploaded via CSV.\n\nIt automatically loops through each contact, sends t"
      }
    },
    {
      "id": "1978c66d-e2df-4a86-b460-7939c1e7befc",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -224,
        -368
      ],
      "parameters": {
        "width": 208,
        "height": 192,
        "content": "### 1) Starts the bulk sending process manually\n\nClick “Execute workflow” to begin sending messages from the contact list."
      }
    },
    {
      "id": "3a04025d-12aa-4d23-a0a1-eaf760a96747",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -608
      ],
      "parameters": {
        "width": 208,
        "height": 432,
        "content": "### 2) Retrieves unsent contacts from Google Sheets\n\nReads rows where the “Sent” column is empty.\n\nSet up Google Sheets credentials following the [official n8n documentation](https://docs.n8n.io/integ"
      }
    },
    {
      "id": "ed63ec8c-0cfa-45d1-a903-3c23f24d8278",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        224,
        -368
      ],
      "parameters": {
        "width": 208,
        "height": 192,
        "content": "### 3) Loops through contacts one by one"
      }
    },
    {
      "id": "451dee2c-35dd-4cf0-9725-5ab5240420d8",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        448,
        -368
      ],
      "parameters": {
        "width": 208,
        "height": 192,
        "content": "### 4) Extracts the phone number for WhatsApp sending\n\nPlease ensure the phone number format includes country code without symbols."
      }
    },
    {
      "id": "ed195a24-9817-42a6-b7d5-448e3f5eeffd",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -800
      ],
      "parameters": {
        "width": 208,
        "height": 624,
        "content": "### 5) Sends WhatsApp template message\n\nSends the selected approved WhatsApp template to the contact.\n\nSet up your WOZTELL credentials. To generate the access token, follow the step-by-step guide [her"
      }
    },
    {
      "id": "b8714ba3-5abd-4560-ba38-bf7ae2b7b3af",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        912,
        -464
      ],
      "parameters": {
        "width": 208,
        "height": 288,
        "content": "### 6) Updates delivery status in Google Sheets\n\nMarks the row as:\n• success\n• failed\n\nThis helps track campaign performance and prevents duplicate sending.\n\nRequires Google Sheets credentials."
      }
    },
    {
      "id": "0d6db43d-cbe3-4dc3-8955-c5ef97fd1c18",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        -464
      ],
      "parameters": {
        "width": 208,
        "height": 288,
        "content": "### 7) Adds delay between messages\n\nPauses briefly before processing the next contact.\n\nThis helps avoid rate limits and improves delivery reliability.\n\nYou can adjust the wait duration if needed."
      }
    },
    {
      "id": "d6543168-e728-4ed6-bea0-427d498637f6",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        448
      ],
      "parameters": {
        "width": 208,
        "height": 240,
        "content": "### 1) Alternative entry: Upload CSV file\n\nAllows uploading a CSV file containing contact details.\n\nMake a copy of [this sample csv template](https://drive.google.com/file/d/19uI0twb8OQyeO2YoQ3x5MUntk"
      }
    },
    {
      "id": "30de3251-3550-40e0-b018-59c651ef862c",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        448
      ],
      "parameters": {
        "width": 208,
        "height": 240,
        "content": "### 2) Extracts contact data from uploaded CSV\n\nConverts CSV rows into structured items for processing."
      }
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Send message template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Send message template1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [],
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update row in sheet": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send message template": {
      "main": [
        [
          {
            "node": "Update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send message template1": {
      "main": [
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}