Workflow: develop a modular n8n workflow that supports Webhook Nocodb Create Webhook
Integrations: dropbox, executeWorkflow, merge, nocoDb, respondToWebhook, set, stickyNote, switch, webhook

{"meta": {"instanceId": "4e8285376decaea86c34202e3f6f0900c15ccf72a22e44fbb5cd9851bb3fd11f", "templateCredsSetupCompleted": true}, "nodes": [{"id": "971e1616-af67-4961-9ef4-4b8dd24e392c", "name": "Webhook", "type": "n8n-nodes-base.webhook", "position": [-660, 240], "webhookId": "29a6482f-36ac-4c15-8792-450aa32cf5f4", "parameters": {"path": "29a6482f-36ac-4c15-8792-450aa32cf5f4", "options": {}, "httpMethod": ["POST", "GET"], "responseMode": "responseNode", "multipleMethods": true}, "typeVersion": 2}, {"id": "22d8dca1-a2fd-474e-a1cd-7f75be1c04a6", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [-720, -220], "parameters": {"color": 6, "width": 620, "height": 920, "content": "## Dropbox\n\nDropbox call me each time a modification is done somewhere in my dropbox."}, "typeVersion": 1}, {"id": "0178e813-ae15-4729-933b-2799ec405863", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [240, -280], "parameters": {"color": 3, "width": 840, "height": 140, "content": "## Watch Files, 2 ways :\n1. We explore each file in a folder (new and old ones)\n2. We want to filter new files only"}, "typeVersion": 1}, {"id": "229b9a46-5d76-4cb7-b1ac-4b10a6427f66", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [240, -80], "parameters": {"width": 1040, "height": 100, "content": "### Way 1 - We call the subworklow for each file in the specified folder"}, "typeVersion": 1}, {"id": "43a4fa3c-e378-443b-81a1-349201a85056", "name": "Sticky Note3", "type": "n8n-nodes-base.stickyNote", "position": [240, 200], "parameters": {"color": 4, "width": 1240, "height": 100, "content": "### Way 2- We filter new/old files then we call the subworkflow only for new files"}, "typeVersion": 1}, {"id": "e9639a07-6672-46ee-a86e-025265e45069", "name": "Dropbox - List watched folder", "type": "n8n-nodes-base.dropbox", "position": [500, 280], "parameters": {"path": "={{ $json.folder_to_watch }}", "filters": {"include_deleted": false, "include_mounted_folders": false}, "resource": "folder", "operation": "list", "returnAll": true, "authentication": "oAuth2"}, "credentials": {"dropboxOAuth2Api": {"id": "GocmYXzmqQnUpojt", "name": "Dropbox BT"}}, "typeVersion": 1}, {"id": "61707418-fcbb-4b70-ab06-02b9b7060bfb", "name": "Switch File vs Folder", "type": "n8n-nodes-base.switch", "position": [700, 280], "parameters": {"rules": {"values": [{"outputKey": "file", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "f7fda7a2-1961-41aa-a332-f9a8be9b3bfa", "operator": {"type": "string", "operation": "equals"}, "leftValue": "={{ $json.type }}", "rightValue": "file"}]}, "renameOutput": true}, {"outputKey": "folder", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "d8bb9414-ae11-4b8f-ad0e-6bfe0e2f1071", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.type }}", "rightValue": "folder"}]}, "renameOutput": true}]}, "options": {}}, "typeVersion": 3.2}, {"id": "2670d2d1-acfb-4d0b-9bde-12dbd3806976", "name": "Switch File vs Folder1", "type": "n8n-nodes-base.switch", "position": [780, 0], "parameters": {"rules": {"values": [{"outputKey": "file", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "f7fda7a2-1961-41aa-a332-f9a8be9b3bfa", "operator": {"type": "string", "operation": "equals"}, "leftValue": "={{ $json.type }}", "rightValue": "file"}]}, "renameOutput": true}, {"outputKey": "folder", "conditions": {"options": {"version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict"}, "combinator": "and", "conditions": [{"id": "d8bb9414-ae11-4b8f-ad0e-6bfe0e2f1071", "operator": {"name": "filter.operator.equals", "type": "string", "operation": "equals"}, "leftValue": "={{ $json.type }}", "rightValue": "folder"}]}, "renameOutput": true}]}, "options": {}}, "typeVersion": 3.2}, {"id": "8225e284-b193-4859-891e-2277b2bc004b", "name": "NocoDB - Get know files to exclude", "type": "n8n-nodes-base.nocoDb", "position": [600, 480], "parameters": {"table": "m0tqa79y2sv4g0j", "options": {"where": "=(folder_to_watch,eq,{{ $json.folder_to_watch }})"}, "operation": "getAll", "projectId": "p73a23pw65qwwr4", "returnAll": true, "authentication": "nocoDbApiToken"}, "credentials": {"nocoDbApiToken": {"id": "GW7a5UwWksviQWb7", "name": "NocoDB cloudron"}}, "typeVersion": 3}, {"id": "0b9cb74b-ce02-4ed2-a417-084529a79977", "name": "Merge - Keep only new items", "type": "n8n-nodes-base.merge", "position": [1000, 280], "parameters": {"mode": "combine", "options": {}, "advanced": true, "joinMode": "keepNonMatches", "mergeByFields": {"values": [{"field1": "id", "field2": "data.id"}]}, "outputDataFrom": "input1"}, "typeVersion": 3}, {"id": "c1f52687-7b6e-4c69-bcce-cc9bf053c62f", "name": "Just a quick answer to Dropbox - webhook validation", "type": "n8n-nodes-base.respondToWebhook", "position": [-400, 520], "parameters": {"options": {}, "respondWith": "text", "responseBody": "={{ $json.query.challenge }}"}, "typeVersion": 1.1}, {"id": "42c84256-cbce-46d6-ab5a-01b1ef0715b0", "name": "Respond to Dropbox in less than 10sec", "type": "n8n-nodes-base.respondToWebhook", "position": [-400, 0], "parameters": {"options": {}, "respondWith": "text", "responseBody": "={{ $json.query.challenge }}"}, "typeVersion": 1.1}, {"id": "bb45006e-f12e-4b9d-99fa-ec5003f1c141", "name": "Dropbox get files", "type": "n8n-nodes-base.dropbox", "position": [500, 0], "parameters": {"path": "={{ $json.folder_to_watch }}", "filters": {"include_deleted": false, "include_mounted_folders": false}, "resource": "folder", "operation": "list", "returnAll": true, "authentication": "oAuth2"}, "credentials": {"dropboxOAuth2Api": {"id": "GocmYXzmqQnUpojt", "name": "Dropbox BT"}}, "typeVersion": 1}, {"id": "b4f8c38c-c674-488d-8c9a-f68e42c702cf", "name": "NocoDB - Add this file in the table", "type": "n8n-nodes-base.nocoDb", "position": [1200, 280], "parameters": {"table": "m0tqa79y2sv4g0j", "fieldsUi": {"fieldValues": [{"fieldName": "folder_to_watch", "fieldValue": "={{ $('set_folder to watch B').item.json.folder_to_watch }}"}, {"fieldName": "data", "fieldValue": "={\n\"id\":\"{{ $json.id }}\",\n\"name\":\"{{ $json.name }}\",\n\"lastModifiedClient\": \"{{ $json.lastModifiedClient }}\",\n\"lastModifiedServer\": \"{{ $json.lastModifiedServer }}\",\n\"rev\": \"{{ $json.rev }}\",\n\"contentSize\": {{ $json.contentSize }},\n\"type\": \"{{ $json.type }}\",\n\"contentHash\": \"{{ $json.contentHash }}\",\n\"pathLower\": \"{{ $json.pathLower }}\",\n\"pathDisplay\": \"{{ $json.pathDisplay }}\",\n\"isDownloadable\": {{ $json.isDownloadable }}\n}"}, {"fieldName": "file_id", "fieldValue": "={{ $json.id }}"}]}, "operation": "create", "projectId": "p73a23pw65qwwr4", "authentication": "nocoDbApiToken"}, "credentials": {"nocoDbApiToken": {"id": "GW7a5UwWksviQWb7", "name": "NocoDB cloudron"}}, "typeVersion": 3}, {"id": "9d6d2d96-f16f-408d-bc35-0e17da4d4e6d", "name": "set_folder A", "type": "n8n-nodes-base.set", "position": [260, 0], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "8416f15a-a6a2-47d2-8c15-e1742b323a8f", "name": "folder_to_watch", "type": "string", "value": "/z_Apps/a_iphone/RecUp Memos/"}]}}, "typeVersion": 3.4}, {"id": "aaa1ef55-10ef-4d8f-ae71-d317930229bc", "name": "set_folder to watch B", "type": "n8n-nodes-base.set", "position": [280, 280], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "8416f15a-a6a2-47d2-8c15-e1742b323a8f", "name": "folder_to_watch", "type": "string", "value": "/z_Apps/auphonic/whisper"}]}}, "typeVersion": 3.4}, {"id": "770b7f54-e85e-4d62-ab2a-60c9a73411e3", "name": "Execute Workflow - what i want to do for this folder/file A", "type": "n8n-nodes-base.executeWorkflow", "position": [1040, -20], "parameters": {"mode": "each", "options": {"waitForSubWorkflow": false}, "workflowId": {"__rl": true, "mode": "list", "value": "PRxsqnbMoqY6avr6", "cachedResultName": "02 JE TRANSMETS > Dropbox RecUp Memos - transcription audio - 2025-01 v1"}, "workflowInputs": {"value": {}, "schema": [], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": true}}, "typeVersion": 1.2}, {"id": "d9230834-13b4-420f-9e9a-154176803a66", "name": "Execute Workflow - Something to do for new files", "type": "n8n-nodes-base.executeWorkflow", "position": [1400, 280], "parameters": {"options": {}, "workflowId": {"__rl": true, "mode": "list", "value": "NzETudhVA1JruLCl", "cachedResultName": "210 PODCAST > Dropbox txt - Pr\u00e9 r\u00e9dige \u00e9pisode avec transcription - 2025-03 v2"}, "workflowInputs": {"value": {}, "schema": [], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": true}}, "typeVersion": 1.2}, {"id": "68d02221-861c-41d6-afe3-3757b272746f", "name": "Sticky Note4", "type": "n8n-nodes-base.stickyNote", "position": [-60, 120], "parameters": {"color": 2, "height": 80, "content": "I duplicate those processes for each folder i want to watch"}, "typeVersion": 1}, {"id": "6befd86e-9a7b-442e-abb2-e1ed535f5166", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [180, 460], "parameters": {"color": 2, "content": "I define in a \"variable\" the folder to watch to ease the next steps"}, "typeVersion": 1}], "pinData": {"set_folder A": [{"folder_to_watch": "/z_Apps/a_iphone/RecUp Memos/"}], "Dropbox get files": [{"id": "id:m50XjFjkXDsAAAAAAAVw5w", "name": "done", "type": "folder", "pathLower": "/z_apps/a_iphone/recup memos/done", "pathDisplay": "/z_Apps/a_iphone/RecUp Memos/done"}, {"id": "id:m50XjFjkXDsAAAAAAAVxNg", "name": "txt", "type": "folder", "pathLower": "/z_apps/a_iphone/recup memos/txt", "pathDisplay": "/z_Apps/a_iphone/RecUp Memos/txt"}, {"id": "id:m50XjFjkXDsAAAAAAAVxNw", "name": "notes_md", "type": "folder", "pathLower": "/z_apps/a_iphone/recup memos/notes_md", "pathDisplay": "/z_Apps/a_iphone/RecUp Memos/notes_md"}, {"id": "id:m50XjFjkXDsAAAAAAAVxTA", "name": "done vraiment", "type": "folder", "pathLower": "/z_apps/a_iphone/recup memos/done vraiment", "pathDisplay": "/z_Apps/a_iphone/RecUp Memos/done vraiment"}, {"id": "id:m50XjFjkXDsAAAAAAAV1Jg", "name": "trash", "type": "folder", "pathLower": "/z_apps/a_iphone/recup memos/trash", "pathDisplay": "/z_Apps/a_iphone/RecUp Memos/trash"}, {"id": "id:m50XjFjkXDsAAAAAAAV1uQ", "rev": "63104211ae04e0b4b15a2", "name": "test DV-2025-02-04-050515.mp3", "type": "file", "pathLower": "/z_apps/a_iphone/recup memos/test dv-2025-02-04-050515.mp3", "contentHash": "feb314cba10772588af3e56bdbc2a1efb693e7174794d660efed188b87ba9398", "contentSize": 1464900, "pathDisplay": "/z_Apps/a_iphone/RecUp Memos/test DV-2025-02-04-050515.mp3", "isDownloadable": true, "lastModifiedClient": "2025-02-04T04:05:17Z", "lastModifiedServer": "2025-03-23T15:27:45Z"}], "set_folder to watch B": [{"folder_to_watch": "/z_Apps/auphonic/whisper"}], "Dropbox - List watched folder": [{"id": "id:lXWFwy5R52AAAAAAAAAIeA", "rev": "631049fe37ae34f316ea3", "name": "test btXXX - stabilit\u00e9 \u00e9motionnelle-final-auphonic-final-auphonic copie.txt", "type": "file", "pathLower": "/z_apps/auphonic/whisper/test btxxx - stabilit\u00e9 \u00e9motionnelle-final-auphonic-final-auphonic copie.txt", "contentHash": "fda114fad56df672588bc1543c869863c81c7e6b843d05158cdc8d1573515587", "contentSize": 26671, "pathDisplay": "/z_Apps/auphonic/whisper/test btXXX - stabilit\u00e9 \u00e9motionnelle-final-auphonic-final-auphonic copie.txt", "isDownloadable": true, "lastModifiedClient": "2025-01-22T13:26:49Z", "lastModifiedServer": "2025-03-23T16:03:12Z"}, {"id": "id:lXWFwy5R52AAAAAAAAAIeQ", "rev": "63104b143779c4f316ea3", "name": "test-nospace-normal.txt", "type": "file", "pathLower": "/z_apps/auphonic/whisper/test-nospace-normal.txt", "contentHash": "fda114fad56df672588bc1543c869863c81c7e6b843d05158cdc8d1573515587", "contentSize": 26671, "pathDisplay": "/z_Apps/auphonic/whisper/test-nospace-normal.txt", "isDownloadable": true, "lastModifiedClient": "2025-01-22T13:26:49Z", "lastModifiedServer": "2025-03-23T16:08:03Z"}], "Respond to Dropbox in less than 10sec": [{"body": {"delta": {"users": [117105590]}, "list_folder": {"accounts": ["dbid:AAA9MBwnssJK-R5bqnTuKBDTg7UMwOZb8mk"]}}, "query": {}, "params": {}, "headers": {"host": "n8n.app.businesstemple.co", "accept": "*/*", "x-real-ip": "34.194.118.45", "connection": "close", "user-agent": "DropboxWebhooks/1.0", "content-type": "application/json", "content-length": "108", "accept-encoding": "gzip,deflate", "x-forwarded-for": "34.194.118.45", "x-forwarded-ssl": "on", "x-forwarded-host": "n8n.app.businesstemple.co", "x-forwarded-port": "443", "x-forwarded-proto": "https", "x-dropbox-signature": "339bfefa3e30feaddaa59cd7a37df9de12ccd490d7aee9b1e055d32ae7d4acee"}, "webhookUrl": "https://n8n.app.businesstemple.co/webhook-test/dropboxbox-watch-files", "executionMode": "test"}]}, "connections": {"Webhook": {"main": [[{"node": "Respond to Dropbox in less than 10sec", "type": "main", "index": 0}], [{"node": "Just a quick answer to Dropbox - webhook validation", "type": "main", "index": 0}]]}, "set_folder A": {"main": [[{"node": "Dropbox get files", "type": "main", "index": 0}]]}, "Dropbox get files": {"main": [[{"node": "Switch File vs Folder1", "type": "main", "index": 0}]]}, "Switch File vs Folder": {"main": [[{"node": "Merge - Keep only new items", "type": "main", "index": 0}]]}, "set_folder to watch B": {"main": [[{"node": "Dropbox - List watched folder", "type": "main", "index": 0}, {"node": "NocoDB - Get know files to exclude", "type": "main", "index": 0}]]}, "Switch File vs Folder1": {"main": [[{"node": "Execute Workflow - what i want to do for this folder/file A", "type": "main", "index": 0}]]}, "Merge - Keep only new items": {"main": [[{"node": "NocoDB - Add this file in the table", "type": "main", "index": 0}]]}, "Dropbox - List watched folder": {"main": [[{"node": "Switch File vs Folder", "type": "main", "index": 0}]]}, "NocoDB - Get know files to exclude": {"main": [[{"node": "Merge - Keep only new items", "type": "main", "index": 1}]]}, "NocoDB - Add this file in the table": {"main": [[{"node": "Execute Workflow - Something to do for new files", "type": "main", "index": 0}]]}, "Respond to Dropbox in less than 10sec": {"main": [[{"node": "set_folder A", "type": "main", "index": 0}, {"node": "set_folder to watch B", "type": "main", "index": 0}]]}}}