{"nodes":[{"name":"On clicking 'execute'","type":"n8n-nodes-base.manualTrigger","position":[400,520],"parameters":{},"typeVersion":1,"id":"3df43e99-7bfa-404d-aadb-f73f21361e0b","notes":"This manualTrigger node performs automated tasks as part of the workflow."},{"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,"id":"a0e5f7d8-b4b7-4f3f-b39d-1d2cbffae9b9","notes":"This stickyNote node performs automated tasks as part of the workflow."},{"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,"id":"2e989507-f16c-43ee-a028-f36be7369ef9","notes":"This stickyNote node performs automated tasks as part of the workflow."},{"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,"id":"29d03913-63bc-401b-98e8-cbdd594ed7ad","notes":"This set node performs automated tasks as part of the workflow."},{"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,"id":"4addb2b3-9138-4da4-939c-76416783b42d","notes":"This wait node performs automated tasks as part of the workflow."},{"name":"Rest of the workflow placeholder","type":"n8n-nodes-base.noOp","position":[2140,520],"parameters":{},"typeVersion":1,"id":"968ad78f-db0c-4d1c-a51f-09b086fcd4f0","notes":"This noOp node performs automated tasks as part of the workflow."},{"name":"Customer Datastore","type":"n8n-nodes-base.n8nTrainingCustomerDatastore","position":[580,520],"parameters":{"operation":"getAllPeople","returnAll":true},"typeVersion":1,"id":"27c4c20a-5e54-4eb3-8440-2b36fbb44eb7","notes":"This n8nTrainingCustomerDatastore node performs automated tasks as part of the workflow."},{"name":"SplitInBatches","type":"n8n-nodes-base.splitInBatches","position":[760,520],"parameters":{"options":{},"batchSize":1},"typeVersion":1,"id":"5f0724ee-89c2-4433-8995-d2b5169fb127","notes":"This splitInBatches node performs automated tasks as part of the workflow."},{"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,"id":"c0b24e21-5509-4e22-a00c-8996dbf6da2a","notes":"This stickyNote node performs automated tasks as part of the workflow."},{"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,"id":"2453b34f-df88-4189-806e-115896369fb6","notes":"This wait node performs automated tasks as part of the workflow."},{"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,"id":"2f87ab6d-0f00-414d-a456-99175e1c7509","notes":"This if node performs automated tasks as part of the workflow."},{"name":"Customer Messenger - Send URL to merchant","type":"n8n-nodes-base.n8nTrainingCustomerMessenger","position":[1740,520],"parameters":{"message":"={{$json[\"URL\"]}}","customerId":"1"},"typeVersion":1,"id":"8d38129d-efdb-49fe-ae1f-273e1dacbc2d","notes":"This n8nTrainingCustomerMessenger node performs automated tasks as part of the workflow."},{"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,"id":"161f4b6a-1f3e-4398-ac52-1e657604b114","notes":"This n8nTrainingCustomerMessenger node performs automated tasks as part of the workflow."},{"id":"error-0f3d2510","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{},"name":"Manualtrigger Workflow","settings":{"executionOrder":"v1","saveManualExecutions":true,"callerPolicy":"workflowsFromSameOwner","errorWorkflow":null,"timezone":"UTC","executionTimeout":3600,"maxExecutions":1000,"retryOnFail":true,"retryCount":3,"retryDelay":1000},"description":"Automated workflow: Manualtrigger Workflow. This workflow integrates 9 different services: stickyNote, wait, set, n8nTrainingCustomerMessenger, manualTrigger. It contains 13 nodes and follows best practices for error handling and security.","meta":{"instanceId":"workflow-05fea20c","versionId":"1.0.0","createdAt":"2025-09-29T07:07:51.031446","updatedAt":"2025-09-29T07:07:51.031464","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"notes":"Excellent quality workflow: Manualtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}