Task: Rate limiting and waiting for external events

n8n workflow JSON:
{"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}]]}}}