{ "meta": { "instanceId": "workflow-5071da4b", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:56.962309", "updatedAt": "2025-09-29T07:07:56.962317", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "nodes": [ { "id": "c70236ea-91ab-4e47-b6f6-63a70ede5d3c", "name": "Google Calendar", "type": "n8n-nodes-base.googleCalendarTool", "position": [ 1000, 680 ], "parameters": { "options": { "fields": "=items(summary, start(dateTime))", "timeMin": "={{$fromAI(\"date\",\"the date after which to fetch the messages in format YYYY-MM-DDTHH:MM:SS\")}}" }, "calendar": { "__rl": true, "mode": "list", "value": "derekcheungsa@gmail.com", "cachedResultName": "derekcheungsa@gmail.com" }, "operation": "getAll" }, "credentials": { "googleCalendarOAuth2Api": { "id": "qx8JdPX4I5Xk9c46", "name": "Google Calendar account" } }, "typeVersion": 1.1, "notes": "This googleCalendarTool node performs automated tasks as part of the workflow." }, { "id": "d2287bea-de47-4180-8ee6-55d4ab1a89da", "name": "Window Buffer Memory", "type": "n8n-nodes-base.noOp", "position": [ 760, 680 ], "parameters": { "sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey" }, "typeVersion": 1.2, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow." }, { "id": "fa955731-86f6-4e4d-8604-dab5f52dee87", "name": "Get Email", "type": "n8n-nodes-base.gmailTool", "position": [ 880, 680 ], "parameters": { "filters": { "labelIds": [ "INBOX", "UNREAD" ], "readStatus": "unread", "receivedAfter": "={{$fromAI(\"date\",\"the date after which to fetch the messages in format YYYY-MM-DDTHH:MM:SS\")}}" }, "operation": "getAll" }, "credentials": { "gmailOAuth2": { "id": "tojOpzEqFprdxS46", "name": "Gmail account" } }, "typeVersion": 2.1, "notes": "This gmailTool node performs automated tasks as part of the workflow." }, { "id": "46511f47-1687-4cbe-ae41-ceb205ed1f11", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [ 640, 680 ], "parameters": { "model": "gpt-4o-mini", "options": {} }, "credentials": { "openAiApi": { "id": "5oYe8Cxj7liOPAKk", "name": "Derek T" } }, "typeVersion": 1, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow." }, { "id": "64fe44db-af19-43eb-9ff1-de0a72a9e645", "name": "Listen for incoming events", "type": "n8n-nodes-base.telegramTrigger", "position": [ -160, 360 ], "webhookId": "322dce18-f93e-4f86-b9b1-3305519b7834", "parameters": { "updates": [ "message" ], "additionalFields": {} }, "credentials": { "telegramApi": { "id": "Ov00cT0t4h4AFtZ0", "name": "Telegram account" } }, "typeVersion": 1, "notes": "This telegramTrigger node performs automated tasks as part of the workflow." }, { "id": "e35c04ff-a050-4564-8c1b-5b22b556872f", "name": "Telegram", "type": "n8n-nodes-base.telegram", "onError": "continueErrorOutput", "position": [ 1280, 360 ], "parameters": { "text": "={{ $json.output }}", "chatId": "={{ $('Listen for incoming events').first().json.message.from.id }}", "additionalFields": { "parse_mode": "Markdown", "appendAttribution": false } }, "credentials": { "telegramApi": { "id": "Ov00cT0t4h4AFtZ0", "name": "Telegram account" } }, "typeVersion": 1.1, "notes": "This telegram node performs automated tasks as part of the workflow." }, { "id": "e791d4f8-2c19-4c14-a71e-39a04f22e944", "name": "If Node", "type": "n8n-nodes-base.if", "position": [ 200, 360 ], "parameters": { "options": {}, "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "id": "a0bf9719-4272-46f6-ab3b-eda6f7b44fd8", "operator": { "type": "string", "operation": "empty", "singleValue": true }, "leftValue": "={{ $json.message.text }}", "rightValue": "" } ] } }, "typeVersion": 2.2, "notes": "This if node performs automated tasks as part of the workflow." }, { "id": "5bd1788a-3d08-4eb3-8e03-3ce82f44d2a7", "name": "Speech to Text", "type": "n8n-nodes-base.noOp", "position": [ 620, 360 ], "parameters": { "options": {}, "resource": "audio", "operation": "transcribe" }, "credentials": { "openAiApi": { "id": "5oYe8Cxj7liOPAKk", "name": "Derek T" } }, "typeVersion": 1.3, "notes": "This openAi node performs automated tasks as part of the workflow." }, { "id": "b67a2a93-517b-469e-aaa4-32c422710743", "name": "Voice or Text", "type": "n8n-nodes-base.set", "position": [ 40, 360 ], "parameters": { "fields": { "values": [ { "name": "text", "stringValue": "={{ $json?.message?.text || \"\" }}" } ] }, "options": {} }, "typeVersion": 3.2, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "8105c39f-9e87-44c4-9215-b3777f0b4164", "name": "Get Voice File", "type": "n8n-nodes-base.telegram", "position": [ 380, 360 ], "parameters": { "fileId": "={{ $('Listen for incoming events').item.json.message.voice.file_id }}", "resource": "file" }, "credentials": { "telegramApi": { "id": "Ov00cT0t4h4AFtZ0", "name": "Telegram account" } }, "typeVersion": 1.1, "notes": "This telegram node performs automated tasks as part of the workflow." }, { "id": "759b975f-d17c-4386-a5b3-12413f0361f4", "name": "Angie, AI Assistant 👩🏻‍🏫", "type": "n8n-nodes-base.noOp", "position": [ 780, 360 ], "parameters": { "text": "={{ $json.text }}", "options": { "systemMessage": "=You are a helpful assistant.\n\nToday's date is {{ $now }}.\n\nGuidelines:\n- When fetching emails, filter out any promotional emails. \n- When summarizing emails, include Sender, Message date, subject, and brief summary of email.\n- if the user did not specify a date in the request assume they are asking for today\n- Use baserow tool to answer questions about tasks\n- When answering questions about calendar events, filter out events that don't apply to the question. For example, the question is about events for today, only reply with events for today. Don't mention future events if it's more than 1 week away" }, "promptType": "define" }, "typeVersion": 1.6, "notes": "This agent node performs automated tasks as part of the workflow." }, { "id": "5537c777-f003-4673-b48a-4993a0c10520", "name": "Sticky Note", "type": "n8n-nodes-base.stickyNote", "position": [ 20, 260 ], "parameters": { "color": 5, "width": 496.25, "height": 278.75, "content": "## Process Telegram Request\n" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "40e92679-b47a-4213-bb23-3f8d086459f2", "name": "Tasks", "type": "n8n-nodes-base.baserowTool", "position": [ 1120, 680 ], "parameters": { "tableId": 372174, "databaseId": 146496, "additionalOptions": {} }, "credentials": { "baserowApi": { "id": "jsgACn0VxAPoD0E2", "name": "Baserow account" } }, "typeVersion": 1, "notes": "This baserowTool node performs automated tasks as part of the workflow." }, { "id": "570a0647-b571-4ebc-9dfe-40244b5a0b2a", "name": "Contacts", "type": "n8n-nodes-base.baserowTool", "position": [ 1240, 680 ], "parameters": { "tableId": 372177, "databaseId": 146496, "descriptionType": "manual", "toolDescription": "Useful for getting contact information. For example emails or phone numbers.", "additionalOptions": {} }, "credentials": { "baserowApi": { "id": "jsgACn0VxAPoD0E2", "name": "Baserow account" } }, "typeVersion": 1, "notes": "This baserowTool node performs automated tasks as part of the workflow." }, { "id": "7fb1d95a-a8d6-4040-9271-5197296be7da", "name": "Sticky Note5", "type": "n8n-nodes-base.stickyNote", "position": [ -620, 220 ], "parameters": { "color": 5, "width": 386.9292441979969, "height": 389.78268107403096, "content": "## Start here: Step-by Step Youtube Tutorial :star:\n\n[![Building an AI Personal Assistant]({{ $env.WEBHOOK_URL }}]({{ $env.WEBHOOK_URL }}\n" }, "typeVersion": 1, "notes": "This stickyNote node performs automated tasks as part of the workflow." }, { "id": "error-48da8d77", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [ 1000, 400 ], "parameters": { "message": "Workflow execution error", "options": {} } } ], "pinData": {}, "connections": { "c70236ea-91ab-4e47-b6f6-63a70ede5d3c": { "main": [ [ { "node": "error-handler-c70236ea-91ab-4e47-b6f6-63a70ede5d3c-6fcb480f", "type": "main", "index": 0 } ] ] }, "46511f47-1687-4cbe-ae41-ceb205ed1f11": { "main": [ [ { "node": "error-handler-46511f47-1687-4cbe-ae41-ceb205ed1f11-ef1afac1", "type": "main", "index": 0 } ] ] }, "64fe44db-af19-43eb-9ff1-de0a72a9e645": { "main": [ [ { "node": "error-handler-64fe44db-af19-43eb-9ff1-de0a72a9e645-955c945c", "type": "main", "index": 0 } ] ] }, "e35c04ff-a050-4564-8c1b-5b22b556872f": { "main": [ [ { "node": "error-handler-e35c04ff-a050-4564-8c1b-5b22b556872f-355e4acb", "type": "main", "index": 0 } ] ] }, "5bd1788a-3d08-4eb3-8e03-3ce82f44d2a7": { "main": [ [ { "node": "error-handler-5bd1788a-3d08-4eb3-8e03-3ce82f44d2a7-32870c89", "type": "main", "index": 0 } ] ] }, "8105c39f-9e87-44c4-9215-b3777f0b4164": { "main": [ [ { "node": "error-handler-8105c39f-9e87-44c4-9215-b3777f0b4164-3c166a2a", "type": "main", "index": 0 } ] ] } }, "name": "Googlecalendartool 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: Googlecalendartool Workflow. This workflow integrates 13 different services: telegramTrigger, stickyNote, telegram, gmailTool, agent. It contains 21 nodes and follows best practices for error handling and security.", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "notes": "Excellent quality workflow: Googlecalendartool Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }