Automatisation Google Calendar avec n8n : gestion des événements
Ce workflow n8n a pour objectif d'automatiser la gestion des événements dans Google Calendar en intégrant des réponses via Line et des informations provenant de Gmail. Dans un contexte professionnel où la gestion du temps est cruciale, ce type d'automatisation permet de gagner en efficacité et de réduire les risques d'oubli d'événements importants. Les utilisateurs peuvent ainsi recevoir des notifications et gérer leurs rendez-vous directement depuis Line, tout en ayant accès aux informations pertinentes via Gmail et Wikipedia. Étape 1 : le déclencheur est un webhook qui reçoit des messages de Line. Étape 2 : le message est traité par un agent AI qui utilise le modèle de chat d'OpenAI pour générer une réponse appropriée. Étape 3 : selon le type de réponse, le workflow peut soit créer un événement dans Google Calendar, soit répondre directement sur Line. Étape 4 : en cas d'erreur dans la réponse de l'AI, un traitement d'erreur est mis en place pour assurer une réponse adéquate. Ce workflow offre une valeur ajoutée significative en simplifiant la gestion des événements et en centralisant les informations, ce qui permet aux utilisateurs de se concentrer sur des tâches à plus forte valeur ajoutée. Tags clés : automatisation, Google Calendar, Gmail.
Vue d'ensemble du workflow n8n
Schéma des nœuds et connexions de ce workflow n8n, généré à partir du JSON n8n.
Détail des nœuds du workflow n8n
Inscris-toi pour voir l'intégralité du workflow
Inscription gratuite
S'inscrire gratuitementBesoin d'aide ?{
"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 \"ดูเพิ่มเติม\" or \"ดูรายละเอียดได้ที่นี่.\""
},
{
"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\": \"กรุณาส่งอย่างอื่นเถอะนะเตงอัว\"\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
}
]
]
}
}
}Pour qui est ce workflow ?
Ce workflow s'adresse aux entreprises et équipes qui utilisent Google Calendar et Gmail pour la gestion de leurs événements. Il est particulièrement adapté aux professionnels qui cherchent à automatiser leurs processus de communication et de planification, sans nécessiter de compétences techniques avancées.
Problème résolu
Ce workflow résout le problème de la gestion manuelle des événements en automatisant les réponses et la création d'événements dans Google Calendar. En éliminant les risques d'oubli et en centralisant les informations, les utilisateurs peuvent gagner un temps précieux et améliorer leur productivité. De plus, il réduit les erreurs humaines liées à la saisie manuelle des données.
Étapes du workflow
Étape 1 : le workflow commence par un webhook qui reçoit des messages de Line. Étape 2 : le message est ensuite traité par un agent AI qui interroge Wikipedia pour enrichir la réponse. Étape 3 : selon le contenu du message, le workflow utilise OpenAI pour générer une réponse. Étape 4 : si la réponse nécessite la création d'un événement, le workflow interagit avec Google Calendar pour ajouter l'événement. Étape 5 : en cas d'erreur dans la réponse de l'AI, un traitement d'erreur est effectué pour assurer une réponse appropriée sur Line.
Guide de personnalisation du workflow n8n
Pour personnaliser ce workflow, vous pouvez modifier l'URL du webhook pour l'adapter à votre application Line. Il est également possible de changer les paramètres de l'agent AI pour ajuster le type de réponses générées. Pour la création d'événements, vous pouvez spécifier le calendrier et les champs supplémentaires selon vos besoins. Enfin, n'oubliez pas de sécuriser le flux en configurant les autorisations d'accès à Google Calendar et Gmail.