Workflow: Automatically Send Daily Meeting List to Telegram
Integrations: function, googleCalendar, scheduleTrigger, set, stickyNote, stopAndError, telegram

{"id": "nV1xFcF5HWJcD6w7", "meta": {"instanceId": "workflow-ec356036", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:52.181150", "updatedAt": "2025-09-29T07:07:52.181165", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "Automatically Send Daily Meeting List to Telegram", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "eee04fe7-7f65-4db8-8ad8-7b67197a1f70", "name": "Get meetings for today", "type": "n8n-nodes-base.googleCalendar", "position": [1240, 580], "parameters": {"options": {"timeMax": "={{ $today.plus({ days: 1 }) }}", "timeMin": "={{ $today }}", "singleEvents": true}, "calendar": {"__rl": true, "mode": "list", "value": "lrnr6ha3nt9cv8i0fimup684e4@group.calendar.google.com", "cachedResultName": "Meeting Room"}, "operation": "getAll"}, "credentials": {"googleCalendarOAuth2Api": {"id": "BSvdyVkCIqvVagsr", "name": "Google Calendar account"}}, "typeVersion": 1, "notes": "This googleCalendar node performs automated tasks as part of the workflow."}, {"id": "358ab462-d69f-4980-99fd-de5a22a3c783", "name": "Every morning @ 6", "type": "n8n-nodes-base.scheduleTrigger", "position": [940, 580], "parameters": {"rule": {"interval": [{"triggerAtHour": 6}]}}, "typeVersion": 1.1, "notes": "This scheduleTrigger node performs automated tasks as part of the workflow."}, {"id": "57f77b4e-d608-4929-bc49-2dfecff88c8d", "name": "Set", "type": "n8n-nodes-base.set", "position": [1520, 580], "parameters": {"values": {"number": [], "string": [{"name": "Name", "value": "={{ $json.summary }}"}, {"name": "Time", "value": "={{ $json.start }}"}, {"name": "Guests", "value": "={{ $json.attendees }}"}]}, "options": {}, "keepOnlySet": true}, "typeVersion": 1, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "6bcde2e8-46f6-46aa-b2f2-0e2670a9ce66", "name": "Function", "type": "n8n-nodes-base.function", "position": [1780, 580], "parameters": {"functionCode": "let message = \"*Your meetings today are:* \\n\";\n\nfor (item of items) {\n  const time = new Date(item.json.Time.dateTime);\n  const formattedTime = new Intl.DateTimeFormat('fa-IR', {\n    hour: 'numeric',\n    minute: 'numeric',\n    timeZone: item.json.Time.timeZone\n  }).format(time);\n\n  message += `* ${item.json.Name} | ${formattedTime}\\n`;\n\n  if (item.json.Guests && item.json.Guests.length > 0) {\n    message += '*\u00c2&nbsp;- ';\n    item.json.Guests.forEach((guest, index) => {\n      message += `${guest.email}${index < item.json.Guests.length - 1 ? ', ' : ''}`;\n    });\n    message += '\\n';\n  } else {\n    message += '*\u00c2&nbsp;- No guests\\n';\n  }\n}\n\nreturn [{ json: { message } }];\n"}, "typeVersion": 1, "notes": "This function node performs automated tasks as part of the workflow."}, {"id": "568c4efd-a4d4-4309-ab3e-c15c955ce361", "name": "Telegram", "type": "n8n-nodes-base.telegram", "position": [2120, 580], "parameters": {"text": "={{$json[\"message\"]}}", "additionalFields": {}}, "typeVersion": 1.1, "notes": "This telegram node performs automated tasks as part of the workflow."}, {"id": "9f2b0543-9f3f-43e2-a7ea-e77ce1430985", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [800, 232], "parameters": {"color": 7, "width": 1527.817454565021, "height": 658.1528835709971, "content": "## This workflow \nprovides a convenient and automated way to stay on top of your daily meetings and improve your personal productivity.\n\n\n"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "41d85383-ccca-42f6-b9a1-d18e14ab3e32", "name": "Sticky Note1", "type": "n8n-nodes-base.stickyNote", "position": [2031.7098362416477, 431.96581702471417], "parameters": {"color": 5, "width": 268.2901637583533, "height": 315.7841809336307, "content": "### Create a Telegram bot in @botfather\nUses your Telegram user ID to send the list of meetings as a message to Telegram."}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "254dccf8-a366-4cdc-84ca-987eca928ed6", "name": "Sticky Note2", "type": "n8n-nodes-base.stickyNote", "position": [820, 340], "parameters": {"width": 430.6727493433055, "height": 151.60560223016907, "content": "## setup:\n###    - Google Calendar connected to n8n\n###    - A Telegram bot created and connected to n8n\n###    - Your Telegram user ID specified"}, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow."}, {"id": "error-0f173d8b", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"timezone": "UTC", "callerPolicy": "workflowsFromSameOwner", "executionOrder": "v1", "saveManualExecutions": true, "errorWorkflow": null, "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "9dc21ef6-2b7d-4c80-9c03-0d636ab6f0d1", "connections": {"eee04fe7-7f65-4db8-8ad8-7b67197a1f70": {"main": [[{"node": "error-handler-eee04fe7-7f65-4db8-8ad8-7b67197a1f70-ca43eda1", "type": "main", "index": 0}]]}, "568c4efd-a4d4-4309-ab3e-c15c955ce361": {"main": [[{"node": "error-handler-568c4efd-a4d4-4309-ab3e-c15c955ce361-be1d209c", "type": "main", "index": 0}]]}}, "description": "Automated workflow: Automatically Send Daily Meeting List to Telegram. This workflow integrates 7 different services: stickyNote, telegram, scheduleTrigger, function, set. It contains 10 nodes and follows best practices for error handling and security.", "notes": "Excellent quality workflow: Automatically Send Daily Meeting List to Telegram. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}