Workflow: develop a modular n8n workflow that supports N8Ntrainingcustomermessenger Wait Create Triggered
Integrations: if, manualTrigger, n8nTrainingCustomerDatastore, n8nTrainingCustomerMessenger, noOp, set, splitInBatches, stickyNote, wait

{"nodes": [{"name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [400, 520], "parameters": {}, "typeVersion": 1}, {"name": "Note1", "type": "n8n-nodes-base.stickyNote", "position": [1500, 360], "parameters": {"width": 780, "height": 360, "content": "## 2. Wait for an external event\nUse this operation when an external step is needed in order to continue with the rest of the workflow.\nFor example - a workflow sends a purchase approval link to the merchant (using Gmail, Slack etc..) and waits for the merchant to click on it before continuing with the rest of the steps.\n\nIn this example, the `Customer Messenger` node mimics the email or messaging node.\n"}, "typeVersion": 1}, {"name": "Note", "type": "n8n-nodes-base.stickyNote", "position": [200, 380], "parameters": {"width": 300, "height": 120, "content": "### Click the `Execute Workflow` button and double click on the nodes to see the input and output items."}, "typeVersion": 1}, {"name": "Create approval URL", "type": "n8n-nodes-base.set", "position": [1540, 520], "parameters": {"values": {"string": [{"name": "URL", "value": "={{$resumeWebhookUrl}}?name=nathan"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Wait for external approval", "type": "n8n-nodes-base.wait", "position": [1940, 520], "webhookId": "0bcafff8-9fc1-4415-95b1-00746bb1304d", "parameters": {"resume": "webhook", "options": {}}, "typeVersion": 1}, {"name": "Rest of the workflow placeholder", "type": "n8n-nodes-base.noOp", "position": [2140, 520], "parameters": {}, "typeVersion": 1}, {"name": "Customer Datastore", "type": "n8n-nodes-base.n8nTrainingCustomerDatastore", "position": [580, 520], "parameters": {"operation": "getAllPeople", "returnAll": true}, "typeVersion": 1}, {"name": "SplitInBatches", "type": "n8n-nodes-base.splitInBatches", "position": [760, 520], "parameters": {"options": {}, "batchSize": 1}, "typeVersion": 1}, {"name": "Note4", "type": "n8n-nodes-base.stickyNote", "position": [540, 360], "parameters": {"width": 900, "height": 360, "content": "## 1. Rate Limiting \nSometimes you need to slow down how often you are contacting a service.\n\nIn this example, `Customer Datastore` node simulates the big batches of requests coming at once, the `SplitInBatches` node handles each one individually in a loop, and the `Wait` node creates a 2 second delay between each message to a customer."}, "typeVersion": 1}, {"name": "Wait for time interval", "type": "n8n-nodes-base.wait", "position": [920, 520], "webhookId": "2b72e9d7-75b7-4ef5-87e7-2bfdfdbaa20f", "parameters": {"unit": "seconds", "amount": 2}, "typeVersion": 1}, {"name": "If - Are we Finished?", "type": "n8n-nodes-base.if", "position": [1280, 520], "parameters": {"conditions": {"boolean": [{"value1": "={{$node[\"SplitInBatches\"].context[\"noItemsLeft\"]}}", "value2": true}]}}, "typeVersion": 1}, {"name": "Customer Messenger - Send URL to merchant", "type": "n8n-nodes-base.n8nTrainingCustomerMessenger", "position": [1740, 520], "parameters": {"message": "={{$json[\"URL\"]}}", "customerId": "1"}, "typeVersion": 1}, {"name": "Customer Messenger - Send message to client", "type": "n8n-nodes-base.n8nTrainingCustomerMessenger", "position": [1100, 520], "parameters": {"message": "=\nHi {{$node[\"Customer Datastore\"].json[\"name\"]}}\nThis message was sent at {{$now.toLocaleString(DateTime.TIME_WITH_SECONDS)}}", "customerId": "={{$node[\"Customer Datastore\"].json[\"id\"]}}"}, "typeVersion": 1}], "connections": {"SplitInBatches": {"main": [[{"node": "Wait for time interval", "type": "main", "index": 0}]]}, "Customer Datastore": {"main": [[{"node": "SplitInBatches", "type": "main", "index": 0}]]}, "Create approval URL": {"main": [[{"node": "Customer Messenger - Send URL to merchant", "type": "main", "index": 0}]]}, "If - Are we Finished?": {"main": [[{"node": "Create approval URL", "type": "main", "index": 0}], [{"node": "SplitInBatches", "type": "main", "index": 0}]]}, "On clicking 'execute'": {"main": [[{"node": "Customer Datastore", "type": "main", "index": 0}]]}, "Wait for time interval": {"main": [[{"node": "Customer Messenger - Send message to client", "type": "main", "index": 0}]]}, "Wait for external approval": {"main": [[{"node": "Rest of the workflow placeholder", "type": "main", "index": 0}]]}, "Customer Messenger - Send URL to merchant": {"main": [[{"node": "Wait for external approval", "type": "main", "index": 0}]]}, "Customer Messenger - Send message to client": {"main": [[{"node": "If - Are we Finished?", "type": "main", "index": 0}]]}}}