{ "name": "Airtable SMS Broadcast", "nodes": [ { "name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [ 250, 300 ], "parameters": {}, "typeVersion": 1, "id": "airtable-sms-broadcast-0" }, { "name": "Airtable", "type": "n8n-nodes-base.airtable", "position": [ 450, 300 ], "parameters": { "authentication": "airtableTokenApi", "operation": "list", "application": { "__rl": true, "mode": "id", "value": "YOUR_AIRTABLE_BASE_ID" }, "table": { "__rl": true, "mode": "id", "value": "YOUR_AIRTABLE_TABLE_ID" }, "returnAll": true, "downloadAttachments": false, "additionalOptions": {} }, "typeVersion": 1, "id": "airtable-sms-broadcast-1" }, { "name": "Twilio", "type": "n8n-nodes-base.twilio", "position": [ 850, 300 ], "parameters": { "resource": "sms", "operation": "send", "to": "={{ $json.to }}", "from": "YOUR_TWILIO_NUMBER", "message": "={{ $json.body }}", "toWhatsapp": false, "options": {} }, "typeVersion": 1, "id": "airtable-sms-broadcast-2" }, { "id": "prepare-sms", "name": "Prepare and validate messages", "type": "n8n-nodes-base.code", "typeVersion": 2, "position": [ 650, 300 ], "parameters": { "mode": "runOnceForAllItems", "jsCode": "const prepare = function prepareSms({ records }) {\n const messages = records.map((record) => {\n const to = String(record.fields?.Number ?? '').trim();\n if (!/^\\+[1-9]\\d{1,14}$/.test(to)) throw new Error('Each Airtable Number must be an E.164 phone number');\n const name = String(record.fields?.Name ?? '');\n return { to, body: `Hello, ${name}!\\nSending this SMS from n8n!` };\n });\n return { messages };\n}\n\nreturn prepare({records:$input.all().map(item=>item.json)}).messages.map((message,index)=>({json:message,pairedItem:{item:index}}));\n" } } ], "active": false, "settings": { "executionOrder": "v1", "timezone": "UTC" }, "connections": { "On clicking 'execute'": { "main": [ [ { "node": "Airtable", "type": "main", "index": 0 } ] ] }, "Airtable": { "main": [ [ { "node": "Prepare and validate messages", "type": "main", "index": 0 } ] ] }, "Prepare and validate messages": { "main": [ [ { "node": "Twilio", "type": "main", "index": 0 } ] ] } }, "pinData": {} }