Workflow: Manualtrigger Workflow
Integrations: discord, filter, googleSheets, if, manualTrigger, merge, noOp, respondToWebhook, set, stickyNote, webhook

{"meta": {"instanceId": "workflow-6e828e43", "versionId": "1.0.0", "createdAt": "2025-09-29T07:08:00.176641", "updatedAt": "2025-09-29T07:08:00.176657", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "nodes": [{"id": "3abfbefa-0a41-4dd2-a79b-99aa02447a6f", "name": "When clicking \"Test workflow\"", "type": "n8n-nodes-base.manualTrigger", "position": [380, 240], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "5233daa6-9b3f-4048-8187-b78decac0bbd", "name": "Delete ID", "type": "n8n-nodes-base.googleSheets", "position": [1900, 380], "parameters": {"operation": "delete", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Last Member"}, "documentId": {"__rl": true, "mode": "url", "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "{{ $credentials.googleSheetsOAuth2Api.id }}", "name": "Nik's Google"}}, "executeOnce": true, "typeVersion": 4.2, "alwaysOutputData": true, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "d3be48cd-9652-43ea-9bbf-d9d3a6c972ae", "name": "SaveID", "type": "n8n-nodes-base.googleSheets", "position": [2040, 380], "parameters": {"columns": {"value": {"ID": "={{ $('Merge').last().json.user.id }}"}, "schema": [{"id": "ID", "type": "string", "display": true, "removed": false, "required": false, "displayName": "ID", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": ["ID"]}, "options": {}, "operation": "append", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "url", "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "{{ $credentials.googleSheetsOAuth2Api.id }}", "name": "Nik's Google"}}, "typeVersion": 4.2, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "a8cb3b10-1143-4467-936c-36ea29c3489a", "name": "Get ID", "type": "n8n-nodes-base.googleSheets", "position": [920, 240], "parameters": {"options": {}, "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Last Member"}, "documentId": {"__rl": true, "mode": "url", "value": "={{ $('Setup: Edit this to get started').first().json['Google Sheets URL'] }}"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "{{ $credentials.googleSheetsOAuth2Api.id }}", "name": "Nik's Google"}}, "typeVersion": 4.2, "alwaysOutputData": true, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "82bdeec7-5ff5-4ed5-8c57-f3007bd7f81e", "name": "Merge", "type": "n8n-nodes-base.merge", "position": [1520, 240], "parameters": {}, "typeVersion": 2.1, "notes": "This merge node performs automated tasks as part of the workflow."}, {"id": "19247435-e0b0-4eac-8807-cb9e4ac532ab", "name": "Check if we have more members left", "type": "n8n-nodes-base.if", "position": [1740, 240], "parameters": {"options": {}, "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "11bd5681-d979-40a8-ba0c-8c697532cf0d", "operator": {"type": "number", "operation": "lt"}, "leftValue": "={{ $input.all().length }}", "rightValue": 100}]}}, "typeVersion": 2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "9845c82b-942e-4265-be8c-c4b1a9199b1e", "name": "We're done", "type": "n8n-nodes-base.noOp", "position": [2040, 160], "parameters": {}, "typeVersion": 1, "notes": "This noOp node performs automated tasks as part of the workflow."}, {"id": "86bf2fe1-22b3-4563-a4b7-b3603f96cada", "name": "Check if we have an ID", "type": "n8n-nodes-base.if", "position": [1100, 240], "parameters": {"options": {}, "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "8cabfe61-be13-462f-a8ce-99ba5304fa10", "operator": {"type": "string", "operation": "exists", "singleValue": true}, "leftValue": "={{ $json.ID }}", "rightValue": ""}]}}, "executeOnce": true, "typeVersion": 2, "notes": "This if node performs automated tasks as part of the workflow."}, {"id": "96324abb-2464-418a-850f-c6f8d3ce209f", "name": "Filter to only include members with role", "type": "n8n-nodes-base.filter", "position": [1740, -80], "parameters": {"options": {}, "conditions": {"options": {"leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "cac0aeae-ff45-4717-b11e-4e19995649fe", "operator": {"type": "number", "operation": "gt"}, "leftValue": "={{ $json.roles.filter(role => role === $('Setup: Edit this to get started').first().json['Role ID']).length }}", "rightValue": 0}]}}, "typeVersion": 2, "notes": "This filter node performs automated tasks as part of the workflow."}, {"id": "bc012053-c619-479b-8bcb-9325c209d999", "name": "Get First 100 Members", "type": "n8n-nodes-base.discord", "position": [1300, 260], "parameters": {"guildId": {"__rl": true, "mode": "id", "value": "={{ $('Setup: Edit this to get started').first().json['Discord ID'] }}"}, "options": {"simplify": true}, "resource": "member"}, "credentials": {"discordBotApi": {"id": "M7ApR1tTlF4HFHn4", "name": "Discord Bot account"}}, "typeVersion": 2, "notes": "This discord node performs automated tasks as part of the workflow."}, {"id": "7214e807-5a51-438d-9db8-32821307f4ea", "name": "Get next 100 Members after last ID", "type": "n8n-nodes-base.discord", "position": [1300, 80], "parameters": {"after": "={{ $('Get ID').first().json.ID }}", "guildId": {"__rl": true, "mode": "id", "value": "={{ $('Setup: Edit this to get started').first().json['Discord ID'] }}"}, "options": {"simplify": true}, "resource": "member"}, "credentials": {"discordBotApi": {"id": "M7ApR1tTlF4HFHn4", "name": "Discord Bot account"}}, "typeVersion": 2, "notes": "This discord node performs automated tasks as part of the workflow."}, {"id": "158d3e7a-cc8c-4ab3-b59f-5a2251c79613", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [517, -60.44028103044491], "parameters": {"color": 5, "width": 350.3145253526498, "height": 491.3512880562059, "content": "## Setup\n1. Add your Google Sheets and Discord credentials.\n2. Create a Google Sheets document that contains `ID` as a column. We're using this to remember which member we received last.\n3. Edit the fields in the setup node `Setup: Edit this to get started`. *You can read up on how to get the Discord IDs via [this link]({{ $env.WEBHOOK_URL }}\n4. Link to your Discord server in the Discord nodes\n5. Activate the workflow\n6. Call the production webhook URL in your browser"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "11926dbb-a5e0-48f9-8453-7dc21ecf6717", "name": "Setup: Edit this to get started", "type": "n8n-nodes-base.set", "position": [640, 240], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "7c8cce4f-1330-425a-baff-4c40320f2335", "name": "Role ID", "type": "string", "value": "<Enter your roleID here>"}, {"id": "8533b358-d8e6-4eba-9159-f6bdd2e0df65", "name": "Google Sheets URL", "type": "string", "value": "<Enter your Sheets URL here>"}, {"id": "bb87e6f5-def9-4625-818a-ce6ff7b44ed7", "name": "Discord ID", "type": "string", "value": "<Enter your server/guild ID here>"}]}}, "typeVersion": 3.3, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "334377fc-ddb8-4c0d-9ddc-f6949b98578c", "name": "Webhook", "type": "n8n-nodes-base.webhook", "disabled": true, "position": [380, 420], "webhookId": "b40c1140-75a7-481e-b8c7-789eef1f8bac", "parameters": {"path": "discord-template", "options": {}, "responseMode": "responseNode"}, "typeVersion": 1.1, "notes": "This webhook node performs automated tasks as part of the workflow."}, {"id": "8fac2863-a046-4ce7-8391-72486141ea98", "name": "Send Response", "type": "n8n-nodes-base.respondToWebhook", "position": [1960, -80], "parameters": {"options": {}, "respondWith": "allIncomingItems"}, "typeVersion": 1, "notes": "This respondToWebhook node performs automated tasks as part of the workflow."}, {"id": "10677a2d-9bcb-4b51-8cab-a49c7f16a8d7", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [1900, -180], "parameters": {"color": 7, "height": 265.6674473067916, "content": "You can replace this node according to your use case. In my case, I've send a DM to all users"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}], "pinData": {}, "connections": {"334377fc-ddb8-4c0d-9ddc-f6949b98578c": {"main": [[{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-4aefaa0b", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-840dd139", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-e2d68a0a", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-1073f6db", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-91537a96", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-e5002400", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-47e4cf7d", "type": "main", "index": 0}], [{"node": "error-handler-334377fc-ddb8-4c0d-9ddc-f6949b98578c-86be7afc", "type": "main", "index": 0}]]}, "8fac2863-a046-4ce7-8391-72486141ea98": {"main": [[{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-1538b3b4", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-d19662a5", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-067b9158", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-2f38d3a0", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-cc0f529e", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-393519d4", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-84034aca", "type": "main", "index": 0}], [{"node": "error-handler-8fac2863-a046-4ce7-8391-72486141ea98-55f28d12", "type": "main", "index": 0}]]}, "5233daa6-9b3f-4048-8187-b78decac0bbd": {"main": [[{"node": "error-handler-5233daa6-9b3f-4048-8187-b78decac0bbd-fdf32900", "type": "main", "index": 0}]]}, "d3be48cd-9652-43ea-9bbf-d9d3a6c972ae": {"main": [[{"node": "error-handler-d3be48cd-9652-43ea-9bbf-d9d3a6c972ae-adba181f", "type": "main", "index": 0}]]}, "a8cb3b10-1143-4467-936c-36ea29c3489a": {"main": [[{"node": "error-handler-a8cb3b10-1143-4467-936c-36ea29c3489a-75d4abbe", "type": "main", "index": 0}]]}, "bc012053-c619-479b-8bcb-9325c209d999": {"main": [[{"node": "error-handler-bc012053-c619-479b-8bcb-9325c209d999-624f63d1", "type": "main", "index": 0}]]}, "7214e807-5a51-438d-9db8-32821307f4ea": {"main": [[{"node": "error-handler-7214e807-5a51-438d-9db8-32821307f4ea-a3688c70", "type": "main", "index": 0}]]}}, "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 12 different services: webhook, filter, stickyNote, merge, set. It contains 25 nodes and follows best practices for error handling and security.", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "notes": "Excellent quality workflow: Manualtrigger Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}