{"meta":{"instanceId":"workflow-2ce492cf","versionId":"1.0.0","createdAt":"2025-09-29T07:07:45.174500","updatedAt":"2025-09-29T07:07:45.174507","owner":"n8n-user","license":"MIT","category":"automation","status":"active","priority":"high","environment":"production"},"nodes":[{"id":"eaa31cde-3017-400d-aac8-999def8cc227","name":"Sticky Note","type":"n8n-nodes-base.stickyNote","position":[-340,-780],"parameters":{"width":617,"height":490,"content":"## Check if incoming email is about appointment\nWe use LLM to check subject and body of the email and determine if it's an appointment request. "},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"b03d3f72-d1d8-49a7-bcc1-a476fd5c4ad7","name":"Sticky Note1","type":"n8n-nodes-base.stickyNote","position":[400,-780],"parameters":{"width":796,"height":482,"content":"## Get calendar availability and compose a response\nMake sure to update the Workflow ID if you are running this as 2 workflows"},"typeVersion":1,"notes":"This stickyNote node performs automated tasks as part of the workflow."},{"id":"29ce0093-c4c8-41cc-be69-334de3a1d1a2","name":"OpenAI Chat Model","type":"n8n-nodes-base.noOp","position":[-60,-460],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"8gccIjcuf3gvaoEr","name":"OpenAi account"}},"typeVersion":1,"notes":"This lmChatOpenAi node performs automated tasks as part of the workflow."},{"id":"5176f475-704b-446e-b368-ffa395bb089e","name":"OpenAI Chat Model1","type":"n8n-nodes-base.noOp","position":[480,-460],"parameters":{"model":{"__rl":true,"mode":"list","value":"gpt-4o-mini"},"options":{}},"credentials":{"openAiApi":{"id":"8gccIjcuf3gvaoEr","name":"OpenAi account"}},"typeVersion":1,"notes":"This lmChatOpenAi node performs automated tasks as part of the workflow."},{"id":"0e8a75dd-ce68-46c3-972c-32b15e04b254","name":"Send reply","type":"n8n-nodes-base.gmail","position":[940,-660],"webhookId":"0f18d414-1b14-4d2e-9fc2-d2d302372dc6","parameters":{"message":"={{ $json.output }}","options":{},"messageId":"={{ $('Gmail Trigger').first().json.id }}","operation":"reply"},"credentials":{"gmailOAuth2":{"id":"Sf5Gfl9NiFTNXFWb","name":"Gmail account"}},"typeVersion":2.1,"notes":"This gmail node performs automated tasks as part of the workflow."},{"id":"bf154384-274a-4cdd-977d-890220948a9d","name":"Gmail Trigger","type":"n8n-nodes-base.gmailTrigger","position":[-280,-640],"parameters":{"filters":{"readStatus":"unread","includeSpamTrash":false},"pollTimes":{"item":[{"mode":"everyMinute"}]}},"credentials":{"gmailOAuth2":{"id":"Sf5Gfl9NiFTNXFWb","name":"Gmail account"}},"typeVersion":1.2,"notes":"This gmailTrigger node performs automated tasks as part of the workflow."},{"id":"5a268b34-38ea-4e55-87ab-8a616e2aa1fa","name":"Classify appointment","type":"n8n-nodes-base.noOp","position":[-60,-640],"parameters":{"options":{"fallback":"discard"},"inputText":"=Please evaluate the following email to determine if it suggests scheduling a meeting or a call:\nSubject: {{ $json.Subject }}\nSnippet: {{ $json.snippet }}","categories":{"categories":[{"category":"is_appointment","description":"email Is requesting an appointment"}]}},"typeVersion":1,"notes":"This textClassifier node performs automated tasks as part of the workflow."},{"id":"7b5a8468-09e5-4575-97cb-9175ee02b19d","name":"Agent","type":"n8n-nodes-base.noOp","position":[500,-660],"parameters":{"text":"=Sender: {{ $('Gmail Trigger').first().json.From }}\nSubject: {{ $('Gmail Trigger').first().json.Subject }}\nEmail Text: {{ $('Gmail Trigger').first().json.snippet }}","options":{"systemMessage":"=You are an email scheduling assistant. Based on the received email, check my availability and propose an appropriate response. \nAim to get a specific time, rather than just a day. When checking my availability, make sure that there's enough time in between meetings.\nIf I'm not available, ALWAYS propose a new time based on my availability. When proposing a new time, always leave 15 minutes buffer from previous meeting.\nToday date and time is: {{ $now.toISO() }}."},"promptType":"define"},"typeVersion":1,"notes":"This agent node performs automated tasks as part of the workflow."},{"id":"b61e8061-5719-4c30-97da-e306e7b79b76","name":"Google Calendar","type":"n8n-nodes-base.googleCalendarTool","position":[680,-460],"parameters":{"options":{},"timeMax":"={{ $now.plus(1, 'month').toISO() }}","timeMin":"={{ $now.minus(1, 'day').toISO() }}","calendar":{"__rl":true,"mode":"id","value":"your_email@gmail.com"},"operation":"getAll","returnAll":true},"credentials":{"googleCalendarOAuth2Api":{"id":"kWMxmDbMDDJoYFVK","name":"Google Calendar account"}},"typeVersion":1.3,"notes":"This googleCalendarTool node performs automated tasks as part of the workflow."},{"id":"47e07b6c-d432-4111-b33e-56d6c305c40c","name":"Mark as read","type":"n8n-nodes-base.gmail","position":[940,-480],"webhookId":"7e2d851b-c9f3-471c-875d-0da7c2c3b561","parameters":{"messageId":"={{ $('Gmail Trigger').first().json.id }}","operation":"markAsRead"},"credentials":{"gmailOAuth2":{"id":"Sf5Gfl9NiFTNXFWb","name":"Gmail account"}},"typeVersion":2.1,"notes":"This gmail node performs automated tasks as part of the workflow."},{"id":"error-3d5de3a4","name":"Error Handler","type":"n8n-nodes-base.stopAndError","typeVersion":1,"position":[1000,400],"parameters":{"message":"Workflow execution error","options":{}}}],"connections":{"OpenAI Chat Model":{"main":[[]]},"OpenAI Chat Model1":{"main":[[]]},"Google Calendar":{"main":[[]]}},"name":"Stickynote 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: Stickynote Workflow. This workflow integrates 8 different services: textClassifier, stickyNote, gmailTrigger, agent, stopAndError. It contains 13 nodes and follows best practices for error handling and security.","notes":"Excellent quality workflow: Stickynote Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}