Workflow: LINE Assistant with Google Calendar and Gmail Integration
Integrations: gmailTool, googleCalendarTool, httpRequest, noOp, set, switch, webhook

{"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 \"\u0e14\u0e39\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\" or \"\u0e14\u0e39\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e44\u0e14\u0e49\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48.\""}, {"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\": \"\u0e01\u0e23\u0e38\u0e13\u0e32\u0e2a\u0e48\u0e07\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e2d\u0e37\u0e48\u0e19\u0e40\u0e16\u0e2d\u0e30\u0e19\u0e30\u0e40\u0e15\u0e07\u0e2d\u0e31\u0e27\"\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."}