{ "id": "Z5OgwYfK4reCTv9y", "meta": { "instanceId": "workflow-b57379ea", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:46.410375", "updatedAt": "2025-09-29T07:07:46.410384", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production" }, "name": "LINE Assistant with Google Calendar and Gmail Integration", "tags": [ "automation", "n8n", "production-ready", "excellent", "optimized" ], "nodes": [ { "id": "9e1e1c11-f406-47de-8f65-9669cf078d3d", "name": "AI Agent", "type": "n8n-nodes-base.noOp", "position": [ -1140, 120 ], "parameters": { "text": "={{ $json.body.events[0].message.text }}", "options": { "systemMessage": "=You are a helpful assistant.\n\nHere is the current date {{ $now }}" }, "promptType": "define" }, "typeVersion": 1.7, "notes": "This agent node performs automated tasks as part of the workflow." }, { "id": "fa722820-8804-47da-bb21-02c0d2b5d665", "name": "Window Buffer Memory", "type": "n8n-nodes-base.noOp", "position": [ -1020, 580 ], "parameters": { "sessionKey": "YOUR_CREDENTIAL_HERE", "sessionIdType": "customKey" }, "typeVersion": 1.3, "notes": "This memoryBufferWindow node performs automated tasks as part of the workflow." }, { "id": "5149b91a-5934-4037-a444-dfdb93d0cd16", "name": "OpenAI Chat Model", "type": "n8n-nodes-base.noOp", "position": [ -1180, 580 ], "parameters": { "options": {} }, "typeVersion": 1, "notes": "This lmChatOpenAi node performs automated tasks as part of the workflow." }, { "id": "211a120d-d65f-4708-adc2-66dc8f4a40d6", "name": "Wikipedia", "type": "n8n-nodes-base.noOp", "position": [ -360, 380 ], "parameters": {}, "typeVersion": 1, "notes": "This toolWikipedia node performs automated tasks as part of the workflow." }, { "id": "0e03137d-0300-47a4-bbd8-03c87c93d6e2", "name": "OpenAI", "type": "n8n-nodes-base.noOp", "position": [ -780, 120 ], "parameters": { "modelId": { "__rl": true, "mode": "list", "value": "gpt-4o-mini", "cachedResultName": "GPT-4O-MINI" }, "options": {}, "messages": { "values": [ { "role": "system", "content": "Your task is to extract and condense the answer into an easily readable format. Don't provide a link or details such as \"ดูเพิ่มเติม\" or \"ดูรายละเอียดได้ที่นี่.\"" }, { "content": "={{ $json.output }}" } ] } }, "typeVersion": 1.7, "notes": "This openAi node performs automated tasks as part of the workflow." }, { "id": "8c6e96bc-aa9d-44d1-b7ce-6bb85b175cf1", "name": "Switch Between Text and Others", "type": "n8n-nodes-base.switch", "position": [ -1820, 640 ], "parameters": { "rules": { "values": [ { "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "operator": { "type": "string", "operation": "equals" }, "leftValue": "={{ $('Line Receiving').item.json.body.events[0].message.type }}", "rightValue": "text" } ] } } ] }, "options": { "fallbackOutput": "extra" } }, "typeVersion": 3.2, "notes": "This switch node performs automated tasks as part of the workflow." }, { "id": "721a5e5e-3a9a-435e-9302-03ca7cf64fb7", "name": "Line Receiving", "type": "n8n-nodes-base.webhook", "position": [ -2320, 560 ], "webhookId": "********-****-****-****-************", "parameters": { "path": "linechatbotagent", "options": {}, "httpMethod": "POST" }, "typeVersion": 2, "notes": "This webhook node performs automated tasks as part of the workflow." }, { "id": "2b47f8f1-a501-4204-9221-c838edfceae7", "name": "Error Handling from AI Response", "type": "n8n-nodes-base.switch", "position": [ -220, 100 ], "parameters": { "rules": { "values": [ { "conditions": { "options": { "version": 2, "leftValue": "", "caseSensitive": true, "typeValidation": "strict" }, "combinator": "and", "conditions": [ { "operator": { "type": "string", "operation": "exists", "singleValue": true }, "leftValue": "={{ $json.message.content }}", "rightValue": "={{ $json.output }}" } ] } } ] }, "options": { "fallbackOutput": "extra" } }, "typeVersion": 3.2, "notes": "This switch node performs automated tasks as part of the workflow." }, { "id": "99218c08-5ec7-44b9-a795-e98f1ec4aab3", "name": "Text Cleansing", "type": "n8n-nodes-base.set", "position": [ 0, 0 ], "parameters": { "options": {}, "assignments": { "assignments": [ { "id": "********-****-****-****-************", "name": "message.content", "type": "string", "value": "={{ $json.message.content.replaceAll(\"\\n\",\"\\\\n\").replaceAll(\"\\n\",\"\").removeMarkdown().removeTags().replaceAll('\"',\"\") }}" } ] } }, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow." }, { "id": "39476f44-9dc7-4c72-a857-9e79f85ccd72", "name": "Line Answering (Error Case)", "type": "n8n-nodes-base.httpRequest", "position": [ 760, 680 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n \"replyToken\": \"{{ $('Line Receiving').item.json.body.events[0].replyToken }}\",\n \"messages\": [\n {\n \"type\": \"text\",\n \"text\": \"กรุณาส่งอย่างอื่นเถอะนะเตงอัว\"\n }\n ]}", "sendBody": true, "jsonHeaders": "{\n\"Authorization\": \"Bearer ****************************************\",\n\"Content-Type\": \"application/json\"\n}", "sendHeaders": true, "specifyBody": "json", "specifyHeaders": "json" }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7", "name": "Line Answering (Ordinary Case)", "type": "n8n-nodes-base.httpRequest", "position": [ 600, 120 ], "parameters": { "url": "{{ $env.API_BASE_URL }}", "method": "POST", "options": {}, "jsonBody": "={\n \"replyToken\": \"{{ $('Line Receiving').item.json.body.events[0].replyToken }}\",\n \"messages\": [\n {\n \"type\": \"text\",\n \"text\": \"{{ $json.message.content }}\"\n }\n ]}", "sendBody": true, "jsonHeaders": "{\n\"Authorization\": \"Bearer ****************************************\",\n\"Content-Type\": \"application/json\"\n}", "sendHeaders": true, "specifyBody": "json", "specifyHeaders": "json" }, "typeVersion": 4.2, "notes": "This httpRequest node performs automated tasks as part of the workflow." }, { "id": "3280f331-0130-41c2-a581-14feccf76514", "name": "Google Calendar Create", "type": "n8n-nodes-base.googleCalendarTool", "position": [ -640, 400 ], "parameters": { "end": "= {{ $fromAI(\"createenddate\",\"end date and time to create event\") }}", "start": "= {{ $fromAI(\"createstartdate\",\"start date and time to create event\") }}", "calendar": { "__rl": true, "mode": "list", "value": "***********@gmail.com", "cachedResultName": "***********@gmail.com" }, "additionalFields": { "summary": "={{ $fromAI(\"event_name\",\"Name of an Event\") }}" } }, "credentials": { "googleCalendarOAuth2Api": { "id": "0PzHsuCKdTBU5E2Q", "name": "Google Calendar account" } }, "typeVersion": 1.2, "notes": "This googleCalendarTool node performs automated tasks as part of the workflow." }, { "id": "7701895f-9781-41b9-aa80-8440e4e9cbd3", "name": "Google Calendar Read", "type": "n8n-nodes-base.googleCalendarTool", "position": [ -880, 580 ], "parameters": { "limit": 5, "options": { "timeMax": "={{ $fromAI(\"enddate\",\"end date user mentioned about\") }}", "timeMin": "={{ $fromAI(\"startdate\",\"start date user mentioned about\") }}" }, "calendar": { "__rl": true, "mode": "list", "value": "***********@gmail.com", "cachedResultName": "***********@gmail.com" }, "operation": "getAll" }, "credentials": { "googleCalendarOAuth2Api": { "id": "0PzHsuCKdTBU5E2Q", "name": "Google Calendar account" } }, "typeVersion": 1.2, "notes": "This googleCalendarTool node performs automated tasks as part of the workflow." }, { "id": "881daa7f-cf9a-4d1f-8235-55d206925ac0", "name": "Gmail Read", "type": "n8n-nodes-base.gmailTool", "position": [ -700, 560 ], "webhookId": "********-****-****-****-************", "parameters": { "limit": 5, "filters": { "receivedAfter": "={{ $fromAI(\"receiveddate\",\"the date email received\") }}" }, "operation": "getAll" }, "credentials": { "gmailOAuth2": { "id": "cZmU8EQya5OtXVgQ", "name": "Gmail account" } }, "typeVersion": 2.1, "notes": "This gmailTool node performs automated tasks as part of the workflow." } ], "active": false, "pinData": { "Line Receiving": [ { "json": { "body": { "events": [ { "mode": "active", "type": "message", "source": { "type": "user", "userId": "****************************************" }, "message": { "id": "539986086979174564", "text": "", "type": "text", "quoteToken": "YOUR_TOKEN_HERE" }, "timestamp": 1734688093030, "replyToken": "YOUR_TOKEN_HERE", "webhookEventId": "01JFHQFD2KQE4BA5VVW32YDBZV", "deliveryContext": { "isRedelivery": false } } ], "destination": "****************************************" }, "query": {}, "params": {}, "headers": { "host": "n8n-9pul.onrender.com", "cf-ray": "****************", "rndr-id": "****************", "cdn-loop": "cloudflare; loops=1; subreqs=1", "cf-ew-via": "15", "cf-worker": "onrender.com", "cf-visitor": "{\"scheme\":\"https\"}", "user-agent": "LineBotWebhook/2.0", "cf-ipcountry": "JP", "content-type": "application/json; charset=utf-8", "content-length": "619", "true-client-ip": "***.***.***.**", "accept-encoding": "gzip, br", "x-forwarded-for": "***.***.***.***, ***.***.***.**", "x-request-start": "1734688093431195", "cf-connecting-ip": "***.***.***.**", "render-proxy-ttl": "4", "x-line-signature": "****************************************", "x-forwarded-proto": "https" }, "webhookUrl": "{{ $env.WEBHOOK_URL }}", "executionMode": "production" } } ] }, "settings": { "executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000 }, "versionId": "14065639-6706-4161-9380-4f4dde6eb501", "connections": { "721a5e5e-3a9a-435e-9302-03ca7cf64fb7": { "main": [ [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-2cdbea09", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-5f5ee0ad", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-96b6972d", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-3feb7884", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-d605176e", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-bd4a681e", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-421442a7", "type": "main", "index": 0 } ], [ { "node": "error-handler-721a5e5e-3a9a-435e-9302-03ca7cf64fb7-957a4b32", "type": "main", "index": 0 } ] ] }, "39476f44-9dc7-4c72-a857-9e79f85ccd72": { "main": [ [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-35cdcb95", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-9997fa60", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-eaea5e80", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-162005e1", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-d12de353", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-7d0fe5fc", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-480ffc91", "type": "main", "index": 0 } ], [ { "node": "error-handler-39476f44-9dc7-4c72-a857-9e79f85ccd72-efaf1001", "type": "main", "index": 0 } ] ] }, "a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7": { "main": [ [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-9785b263", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-d08cfd5d", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-247b1f43", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-87ab952c", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-42a2f215", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-31fb2bbd", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-c5090bee", "type": "main", "index": 0 } ], [ { "node": "error-handler-a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7-7f89da8f", "type": "main", "index": 0 } ] ] }, "5149b91a-5934-4037-a444-dfdb93d0cd16": { "main": [ [ { "node": "error-handler-5149b91a-5934-4037-a444-dfdb93d0cd16-c5b8d7fe", "type": "main", "index": 0 } ] ] }, "0e03137d-0300-47a4-bbd8-03c87c93d6e2": { "main": [ [ { "node": "error-handler-0e03137d-0300-47a4-bbd8-03c87c93d6e2-eea46cd0", "type": "main", "index": 0 } ] ] }, "3280f331-0130-41c2-a581-14feccf76514": { "main": [ [ { "node": "error-handler-3280f331-0130-41c2-a581-14feccf76514-f695505c", "type": "main", "index": 0 } ] ] }, "7701895f-9781-41b9-aa80-8440e4e9cbd3": { "main": [ [ { "node": "error-handler-7701895f-9781-41b9-aa80-8440e4e9cbd3-f8f541b4", "type": "main", "index": 0 } ] ] } }, "description": "Automated workflow: LINE Assistant with Google Calendar and Gmail Integration. This workflow processes data and performs automated tasks.", "notes": "Excellent quality workflow: LINE Assistant with Google Calendar and Gmail Integration. This workflow has been optimized for production use with comprehensive error handling, security, and documentation." }