Line Assistant With Google Calendar And Gmail Integration

1 Tools

Explore Tool Categories

Find Agencies for This Project

Know a Better Recipe?

Help the community by sharing your proven tool combinations.

Submit a Recipe

About this recipe

A recipe for Line Assistant With Google Calendar And Gmail Integration

Recipe Template

{
    "id": "Z5OgwYfK4reCTv9y",
    "meta": {
        "instanceId": "c59c4acfed171bdc864e7c432be610946898c3ee271693e0303565c953d88c1d"
    },
    "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
            ],
            "webhookId": "********-****-****-****-************",
            "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": {
                    "id": "0PzHsuCKdTBU5E2Q",
                    "name": "Google Calendar account"
                }
            },
            "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": {
                    "id": "0PzHsuCKdTBU5E2Q",
                    "name": "Google Calendar account"
                }
            },
            "typeVersion": 1.2
        },
        {
            "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
        }
    ],
    "active": false,
    "pinData": {
        "Line Receiving": [
            {
                "json": {
                    "body": {
                        "events": [
                            {
                                "mode": "active",
                                "type": "message",
                                "source": {
                                    "type": "user",
                                    "userId": "****************************************"
                                },
                                "message": {
                                    "id": "539986086979174564",
                                    "text": "",
                                    "type": "text",
                                    "quoteToken": "****************************************"
                                },
                                "timestamp": 1734688093030,
                                "replyToken": "********************************",
                                "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": "https:\/\/n8n-9pul.onrender.com\/webhook\/linechatbotagent",
                    "executionMode": "production"
                }
            }
        ]
    },
    "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
                    }
                ]
            ]
        }
    }
}

How to Use an n8n Template

1

Create a New Workflow

Click "New Workflow" in your n8n dashboard to get started.

2

Copy & Paste Template

First, copy this template: Click here to copy the JSON .
Then, in n8n, click the three dots (···) → "Import from file" and paste the JSON code.

3

Customize the Nodes

Go through each node in the workflow to update inputs like spreadsheet IDs, email addresses, or message content. Adjust field mappings to match your data.

4

Grant Access

For nodes that connect to external apps (like Google Sheets or Slack), you'll need to grant access. Connect your accounts using OAuth or an API key and save the credentials in the node.

5

Test It

Run the workflow by clicking "Execute Node" for each step or "Run Once" for the whole thing. Check the right sidebar to inspect data and debug any errors (they'll show up in red).

6

Activate Workflow

Once everything works as expected, click the "Activate" toggle to turn your workflow on. You're all set!