Workflow: develop a modular n8n workflow that supports Slack Cron Automate Scheduled
Integrations: cron, dateTime, function, googleCalendar, if, merge, set, slack

{"nodes": [{"name": "Google Calendar", "type": "n8n-nodes-base.googleCalendar", "position": [540, -320], "parameters": {"options": {}, "calendar": "xxxxx@gmail.com", "operation": "getAll", "returnAll": true}, "credentials": {"googleCalendarOAuth2Api": "Google Accounts"}, "typeVersion": 1}, {"name": "Function", "type": "n8n-nodes-base.function", "position": [540, 70], "parameters": {"functionCode": "var date = new Date().toISOString();\nvar day = new Date().getDay();\nconst weekday = [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n\nitems[0].json.date_today = date;\nitems[0].json.day_today = weekday[day];\n\nreturn items;"}, "notesInFlow": false, "typeVersion": 1}, {"name": "Date & Time", "type": "n8n-nodes-base.dateTime", "position": [720, -320], "parameters": {"value": "={{$json[\"start\"][\"dateTime\"]}}", "custom": true, "options": {"toTimezone": "Asia/Qatar"}, "toFormat": "DD/MM/YYYY", "dataPropertyName": "Event Start Date Only"}, "typeVersion": 1}, {"name": "IF", "type": "n8n-nodes-base.if", "position": [1410, -110], "parameters": {"conditions": {"string": [{"value1": "= {{$json[\"Event Date\"]}}", "value2": "= {{$json[\"Today's Date\"]}}"}], "dateTime": []}}, "typeVersion": 1}, {"name": "Date & Time1", "type": "n8n-nodes-base.dateTime", "position": [880, 70], "parameters": {"value": "={{$json[\"date_today\"]}}", "custom": true, "options": {"toTimezone": "Asia/Qatar"}, "toFormat": "DD/MM/YYYY", "dataPropertyName": "Today's Date"}, "typeVersion": 1}, {"name": "Set", "type": "n8n-nodes-base.set", "position": [910, -320], "parameters": {"values": {"string": [{"name": "Event Name", "value": "={{$json[\"summary\"]}}"}, {"name": "Event Date", "value": "={{$json[\"Event Start Date Only\"]}}"}, {"name": "Today's Date", "value": "="}, {"name": "Gcal URL", "value": "={{$json[\"htmlLink\"]}}"}, {"name": "Location", "value": "={{$json[\"location\"]}}"}, {"name": "Start Time", "value": "={{$json[\"start\"][\"dateTime\"]}}"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Merge", "type": "n8n-nodes-base.merge", "position": [1200, -110], "parameters": {"mode": "multiplex"}, "typeVersion": 1}, {"name": "Set1", "type": "n8n-nodes-base.set", "position": [1630, -130], "parameters": {"values": {"number": [], "string": [{"name": "Name", "value": "={{$json[\"Event Name\"]}}"}, {"name": "Time", "value": "={{$json[\"Start Time\"]}}"}, {"name": "URL", "value": "={{$json[\"Gcal URL\"]}}"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1}, {"name": "Date & Time2", "type": "n8n-nodes-base.dateTime", "position": [1800, -130], "parameters": {"value": "={{$json[\"Time\"]}}", "custom": true, "options": {"toTimezone": "Asia/Qatar"}, "toFormat": "HH:mm", "dataPropertyName": "Time"}, "typeVersion": 1}, {"name": "Function1", "type": "n8n-nodes-base.function", "position": [1960, -130], "parameters": {"functionCode": "// Create our Slack message\n// This will output a list of Ticket URLs with the status and the subject\n// 12345 [STATUS] - Ticket Subject\nlet message = \"*Hello , Please find below a list of your meetings for today*. \\n\";\n\n// Loop the input items\nfor (item of items) {\n  // Append the ticket information to the message\n  message += \"*\" + item.json.Name +' @ '+ item.json.Time + \"\\n*  - \" + item.json.URL + \"\\n\"; \n}\n\n// Return our message\nreturn [{json: {message}}];\n"}, "typeVersion": 1}, {"name": "Slack", "type": "n8n-nodes-base.slack", "position": [2150, -130], "parameters": {"text": "={{$json[\"message\"]}}", "channel": "virtual-assistant", "attachments": [], "otherOptions": {}}, "credentials": {"slackApi": "Slack account"}, "typeVersion": 1}, {"name": "Cron", "type": "n8n-nodes-base.cron", "position": [250, -130], "parameters": {"triggerTimes": {"item": [{"hour": 6}]}}, "retryOnFail": true, "typeVersion": 1}], "connections": {"IF": {"main": [[{"node": "Set1", "type": "main", "index": 0}]]}, "Set": {"main": [[{"node": "Merge", "type": "main", "index": 0}]]}, "Cron": {"main": [[{"node": "Google Calendar", "type": "main", "index": 0}, {"node": "Function", "type": "main", "index": 0}]]}, "Set1": {"main": [[{"node": "Date & Time2", "type": "main", "index": 0}]]}, "Merge": {"main": [[{"node": "IF", "type": "main", "index": 0}]]}, "Function": {"main": [[{"node": "Date & Time1", "type": "main", "index": 0}]]}, "Function1": {"main": [[{"node": "Slack", "type": "main", "index": 0}]]}, "Date & Time": {"main": [[{"node": "Set", "type": "main", "index": 0}]]}, "Date & Time1": {"main": [[{"node": "Merge", "type": "main", "index": 1}]]}, "Date & Time2": {"main": [[{"node": "Function1", "type": "main", "index": 0}]]}, "Google Calendar": {"main": [[{"node": "Date & Time", "type": "main", "index": 0}]]}}}