This workflow follows the Agent → Gmail Tool recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "Z5OgwYfK4reCTv9y",
"name": "LINE Assistant with Google Calendar and Gmail Integration",
"tags": [],
"nodes": [
{
"id": "9e1e1c11-f406-47de-8f65-9669cf078d3d",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"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
},
{
"id": "fa722820-8804-47da-bb21-02c0d2b5d665",
"name": "Window Buffer Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-1020,
580
],
"parameters": {
"sessionKey": "={{ $json.body.events[0].source.userId }}",
"sessionIdType": "customKey"
},
"typeVersion": 1.3
},
{
"id": "5149b91a-5934-4037-a444-dfdb93d0cd16",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1180,
580
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "211a120d-d65f-4708-adc2-66dc8f4a40d6",
"name": "Wikipedia",
"type": "@n8n/n8n-nodes-langchain.toolWikipedia",
"position": [
-360,
380
],
"parameters": {},
"typeVersion": 1
},
{
"id": "0e03137d-0300-47a4-bbd8-03c87c93d6e2",
"name": "OpenAI",
"type": "@n8n/n8n-nodes-langchain.openAi",
"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
},
{
"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
},
{
"id": "721a5e5e-3a9a-435e-9302-03ca7cf64fb7",
"name": "Line Receiving",
"type": "n8n-nodes-base.webhook",
"position": [
-2320,
560
],
"parameters": {
"path": "linechatbotagent",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"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
},
{
"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
},
{
"id": "39476f44-9dc7-4c72-a857-9e79f85ccd72",
"name": "Line Answering (Error Case)",
"type": "n8n-nodes-base.httpRequest",
"position": [
760,
680
],
"parameters": {
"url": "https://api.line.me/v2/bot/message/reply",
"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
},
{
"id": "a7f8837d-c21b-457d-ad8b-b0b69e3c1ba7",
"name": "Line Answering (Ordinary Case)",
"type": "n8n-nodes-base.httpRequest",
"position": [
600,
120
],
"parameters": {
"url": "https://api.line.me/v2/bot/message/reply",
"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
},
{
"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": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"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": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "881daa7f-cf9a-4d1f-8235-55d206925ac0",
"name": "Gmail Read",
"type": "n8n-nodes-base.gmailTool",
"position": [
-700,
560
],
"parameters": {
"limit": 5,
"filters": {
"receivedAfter": "={{ $fromAI(\"receiveddate\",\"the date email received\") }}"
},
"operation": "getAll"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "14065639-6706-4161-9380-4f4dde6eb501",
"connections": {
"OpenAI": {
"main": [
[
{
"node": "Error Handling from AI Response",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "OpenAI",
"type": "main",
"index": 0
}
]
]
},
"Wikipedia": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Gmail Read": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Line Receiving": {
"main": [
[
{
"node": "Switch Between Text and Others",
"type": "main",
"index": 0
}
]
]
},
"Text Cleansing": {
"main": [
[
{
"node": "Line Answering (Ordinary Case)",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Google Calendar Read": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Window Buffer Memory": {
"ai_memory": [
[
{
"node": "AI Agent",
"type": "ai_memory",
"index": 0
}
]
]
},
"Google Calendar Create": {
"ai_tool": [
[
{
"node": "AI Agent",
"type": "ai_tool",
"index": 0
}
]
]
},
"Switch Between Text and Others": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
],
[
{
"node": "Line Answering (Error Case)",
"type": "main",
"index": 0
}
]
]
},
"Error Handling from AI Response": {
"main": [
[
{
"node": "Text Cleansing",
"type": "main",
"index": 0
}
],
[
{
"node": "Line Answering (Error Case)",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googleCalendarOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
How this works
This workflow transforms your LINE messaging app into an intelligent personal assistant that seamlessly manages your schedule and communications by integrating with Google Calendar and Gmail. It responds to natural language queries, such as booking meetings or drafting emails, delivering quick and accurate assistance without manual app switching. Ideal for busy professionals who rely on LINE for daily interactions, the key step involves an AI agent processing your messages through a chat model and tools like Wikipedia for added context, ensuring relevant and context-aware replies.
Use this workflow when you need a conversational AI to handle routine calendar checks or email summaries directly in LINE, saving time on repetitive tasks. Avoid it for complex data analysis or non-English queries, as it relies on OpenAI's capabilities which may incur costs for heavy usage. Common variations include adding Slack integration for team notifications or customising the memory buffer to retain longer conversation histories for ongoing projects.
About this workflow
LINE Assistant with Google Calendar and Gmail Integration. Uses agent, memoryBufferWindow, lmChatOpenAi, toolWikipedia. Webhook trigger; 14 nodes.
Source: https://github.com/Zie619/n8n-workflows — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
✨🔪 Advanced AI Powered Document Parsing & Text Extraction with Llama Parse. Uses gmail, gmailTrigger, limit, stickyNote. Webhook trigger; 54 nodes.
Printify Automation - Update Title and Description - AlexK1919. Uses manualTrigger, httpRequest, splitOut, splitInBatches. Event-driven trigger; 26 nodes.
Googledocs. Uses extractFromFile, outputParserItemList, splitInBatches, stickyNote. Webhook trigger; 23 nodes.
Wait Http. Uses stickyNote, httpRequest, lmChatOpenAi, googleSheets. Event-driven trigger; 17 nodes.
AI-Powered Deal Content Recommendation and Personalization. Uses zohoCrm, httpRequest, openAi, gmail. Webhook trigger; 16 nodes.