Envoyer automatiquement les comptes-rendus de réunions de Telegram vers Airtable, Slack et Gmail
Ceci est unAI Summarization, Multimodal AIworkflow d'automatisation du domainecontenant 29 nœuds.Utilise principalement des nœuds comme If, Code, Wait, Gmail, Slack. Utiliser GPT-4.1 pour créer des procès-verbaux de réunions à partir de messages Telegram et les envoyer vers Airtable, Slack, Gmail
- •Compte Google et informations d'identification Gmail API
- •Token Bot Slack ou URL Webhook
- •Clé API Airtable
- •Token Bot Telegram
- •Clé API OpenAI
Nœuds utilisés (29)
Catégorie
{
"id": "VbaVgnhJ7phMHTY9",
"meta": {
"instanceId": "18b0d04ad5030054be4ab49562e84ea4a079ab4cb036003697394140227c7e76",
"templateCredsSetupCompleted": true
},
"name": "Automatic meeting records sent from Telegram to Airtable, Slack and Gmail",
"tags": [],
"nodes": [
{
"id": "af08414c-6227-4af0-831a-5832d7a2833c",
"name": "GPT-4 Modèle de générateur d'emails",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-560,
1552
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "UaZZMb9MgNQPJ0Sn",
"name": "OpenAi account 2"
}
},
"typeVersion": 1.2
},
{
"id": "98f24854-770a-45c7-b2b4-4be331d64ecc",
"name": "Envoyer l'email",
"type": "n8n-nodes-base.gmail",
"position": [
752,
1456
],
"webhookId": "e367edf9-5bc0-474c-9b96-d694a2660ee2",
"parameters": {
"sendTo": "={{ $('Create a record').item.json.fields.Email }}",
"message": "={{ $('Create a record').item.json.fields.Report }}",
"options": {},
"subject": "={{ $('Create a record').item.json.fields.subject }}"
},
"credentials": {
"gmailOAuth2": {
"id": "h1ZY21K9DQNwgOhO",
"name": "GMAIL BAPTISTE FORT"
}
},
"typeVersion": 2.1
},
{
"id": "dfd67f2c-f977-4ef6-98c2-1433eca110dc",
"name": "Si",
"type": "n8n-nodes-base.if",
"position": [
-1888,
1280
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5c15ee72-c6b1-438e-aa5c-97d268cbb2cb",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{$json.type}}",
"rightValue": "voice"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "118fc989-2485-4e53-b2d3-17dfed0afe2a",
"name": "Attendre",
"type": "n8n-nodes-base.wait",
"position": [
-1472,
1184
],
"webhookId": "df3b70ed-d349-4901-af35-3e5b4525fa97",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "b1c2fa2b-2d71-40c4-a36f-a086cce865ff",
"name": "Telegram Déclencheur",
"type": "n8n-nodes-base.telegramTrigger",
"position": [
-2304,
1280
],
"webhookId": "8ad3fa54-7a0b-4af8-a781-bfa13addd189",
"parameters": {
"updates": [
"message"
],
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "hX6Qe2gkicVdj0xP",
"name": "Telegram account 3"
}
},
"typeVersion": 1.2
},
{
"id": "dbc0240b-13ef-49ba-8da4-4677a27b8a0a",
"name": "Message vocal",
"type": "n8n-nodes-base.telegram",
"position": [
-1696,
1184
],
"webhookId": "ed77be89-0c45-4e0c-9fb1-533baaa650a4",
"parameters": {
"fileId": "={{$json.file_id}}",
"resource": "file",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "hX6Qe2gkicVdj0xP",
"name": "Telegram account 3"
}
},
"typeVersion": 1.2
},
{
"id": "5ba230a3-bebe-4ee8-b160-8d0108adb6a8",
"name": "Téléchargement du message vocal",
"type": "n8n-nodes-base.telegram",
"position": [
-1280,
1184
],
"webhookId": "bce6d473-545e-4411-bd00-4b62e75e2d40",
"parameters": {
"fileId": "={{$json.result.file_id}}",
"resource": "file",
"additionalFields": {}
},
"credentials": {
"telegramApi": {
"id": "hX6Qe2gkicVdj0xP",
"name": "Telegram account 3"
}
},
"typeVersion": 1.2
},
{
"id": "8cfbe3e0-aad3-4ca8-95cd-654b9ad29605",
"name": "Transcription des messages vocaux en texte",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
-1072,
1184
],
"parameters": {
"options": {},
"resource": "audio",
"operation": "transcribe"
},
"credentials": {
"openAiApi": {
"id": "cfxaRAuEstHmL61i",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "0ec4455b-d8c7-433d-abb6-9767fdc0f0b4",
"name": "ATTENTE",
"type": "n8n-nodes-base.wait",
"position": [
-880,
1184
],
"webhookId": "4f6a1490-a64f-4176-a342-83ba6accaeb4",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "7b77efa8-1a8b-48f5-a821-e0e7a6d57a41",
"name": "Contenu",
"type": "n8n-nodes-base.code",
"position": [
-1696,
1376
],
"parameters": {
"jsCode": "return [{ text: $json.content }]\n"
},
"typeVersion": 2
},
{
"id": "9626d70e-4123-4f13-b77c-dadb936669e5",
"name": "Message ou vocal ?",
"type": "n8n-nodes-base.code",
"position": [
-2096,
1280
],
"parameters": {
"jsCode": "const updates = $json;\n\nif (updates.message?.text) {\n\treturn [\n\t\t{\n\t\t\tjson: {\n\t\t\t\ttype: \"text\",\n\t\t\t\tcontent: updates.message.text\n\t\t\t}\n\t\t}\n\t];\n}\n\nif (updates.message?.voice) {\n\treturn [\n\t\t{\n\t\t\tjson: {\n\t\t\t\ttype: \"voice\",\n\t\t\t\tfile_id: updates.message.voice.file_id\n\t\t\t}\n\t\t}\n\t];\n}\n\nreturn [];\n"
},
"typeVersion": 2
},
{
"id": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
"name": "Générer le message de réunion",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-480,
1264
],
"parameters": {
"text": "==You are an assistant specialized in writing **meeting minutes to be sent by email**.\n\nFrom the text provided below (coming from a voice note or message): \n\n{{ $json.input.text }}\n\n**Goals:**\n1) **Detect the recipient's email address** in the text (or a similar form like \"send to firstname.lastname\"). \n - If the address is incomplete, complete it with `@gmail.com`. \n - If no address is found, use `contact@gmail.com`.\n\n2) **Understand the meeting context** and extract structured elements: \n - **Title/Topic** (project, client, subject) \n - **Date** (if missing, use today’s date in Europe/Paris timezone) \n - **Participants** (names or roles if mentioned) \n - **Decisions made** \n - **Action items** (with owners + deadlines if available) \n - **Next steps** \n - **Risks / blockers** (if present) \n - **Open questions / follow-ups** (if present)\n\n3) **Generate a clear and informative email subject**, for example: \n - \"Meeting Minutes — {Topic} — {Date}\" \n - \"Summary {Project/Client} — {Date}\"\n\n4) **Write the email body in HTML**, professional and easy to read: \n - Greeting \n - Context reminder (date, topic, participants) \n - Sections with bold titles: Decisions, Action Items (with owners & deadlines), Next Steps, Risks/Blockers, Open Questions/Follow-up \n - Conclusion + invitation to reply if corrections are needed \n - Signature with \"Best regards,\" (do not sign with a specific name)\n\n**Output constraints:** \n- No spelling or grammar mistakes. \n- Always return the result in the **strict JSON format below**, without any text around it:\n\n```json\n{\n \"email\": \"address@gmail.com\",\n \"subject\": \"Email subject\",\n \"body\": \"<p>Email body in HTML</p>\"\n}\n\n{{ $json.input.text }}",
"options": {},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.1
},
{
"id": "70d6a4e6-3197-4f9b-9fd5-dea831e0dc21",
"name": "Créer un enregistrement",
"type": "n8n-nodes-base.airtable",
"position": [
256,
1456
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "app71jEl2tmr4VBrJ",
"cachedResultUrl": "https://airtable.com/app71jEl2tmr4VBrJ",
"cachedResultName": "Call report"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblcHaHToALXG4qjH",
"cachedResultUrl": "https://airtable.com/app71jEl2tmr4VBrJ/tblcHaHToALXG4qjH",
"cachedResultName": "Table 1"
},
"columns": {
"value": {
"Email": "={{ $json.Email }}",
"Report": "={{ $json.Report }}",
"subject": "={{ $json.subject }}"
},
"schema": [
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "subject",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "subject",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Report",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Report",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"credentials": {
"airtableTokenApi": {
"id": "vKZ5Wl43rmNFe0My",
"name": "Airtable Personal Access Token account 3"
}
},
"typeVersion": 2.1
},
{
"id": "bb193e7c-6511-453f-a782-5ab19119d3b7",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
16,
1504
],
"parameters": {
"jsCode": "const src = $json.output ?? $json;\nconst email = String(src.email || \"contact@gmail.com\").trim();\nconst subject = String(src.subject || \"Compte rendu de réunion\").trim();\nconst body = String(src.body || \"\").trim();\n\n// Nettoyer le HTML et le transformer en texte lisible\nconst clean = body\n .replace(/<br\\s*\\/?>/gi, \"\\n\")\n .replace(/<\\/p>/gi, \"\\n\\n\")\n .replace(/<\\/?[^>]+(>|$)/g, \"\")\n .trim();\n\nreturn [{\n Email: email,\n subject: subject,\n Report: clean\n}];\n"
},
"typeVersion": 2
},
{
"id": "45d090e1-1ba9-4324-bf34-3f3fe1a1b0a3",
"name": "Envoyer un message",
"type": "n8n-nodes-base.slack",
"position": [
496,
1424
],
"webhookId": "3175a971-3530-4ab8-ab98-e91ea486676b",
"parameters": {
"text": "={{ $json.fields.subject}}\n\n{{ $json.fields.Report }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "=YOUR CHANNEL"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "ERqGlDjoRRcGe4Qj",
"name": "Slack account 2"
}
},
"typeVersion": 2.3
},
{
"id": "830ff5e8-0dd7-4167-9878-b0c4826f5b56",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2368,
896
],
"parameters": {
"width": 1792,
"height": 864,
"content": "## Message sent to Telegram as voice note or text? "
},
"typeVersion": 1
},
{
"id": "fbe9a6e9-f37f-4099-9795-320d96bea14d",
"name": "Note adhésive 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2384,
1504
],
"parameters": {
"width": 336,
"height": 288,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "7aa66a3d-6731-4e4f-9145-2ca40b4240d1",
"name": "Note adhésive 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-592,
1072
],
"parameters": {
"color": 2,
"width": 544,
"height": 688,
"content": "## Generate meeting minutes\n- **Node**: Agent (“Generate Meeting Message”) \n- **Prompt**: specialized for “meeting minutes” \n- **Model**: GPT-4.1-mini \n- **Output**: `{ email, subject, body }` \n👉 GPT creates a clean and structured meeting report. "
},
"typeVersion": 1
},
{
"id": "dc3f7261-2467-403a-be7c-11c5b696f209",
"name": "Note adhésive 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-432,
1504
],
"parameters": {
"width": 384,
"height": 256,
"content": "## Enforce clean JSON\n\n- **Node**: Output Parser Structured \n- **JSON Example**: \njson {\"email\": \"address@gmail.com\",\"subject\":\"Subject\",\"body\":Email\"}\n\n👉 Ensures the output is always valid JSON."
},
"typeVersion": 1
},
{
"id": "3901f82e-b400-424a-9a51-bff0212e0a04",
"name": "Appliquer le format email JSON",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
-176,
1536
],
"parameters": {
"jsonSchemaExample": "{\n \"email\": \"address@gmail.com\",\n \"subject\": \"Email subject\",\n \"body\": \"<p>Email body in HTML</p>\"\n}"
},
"typeVersion": 1.3
},
{
"id": "ab43f248-cef7-4591-8b15-37faa102f8bd",
"name": "Note adhésive 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-48,
1216
],
"parameters": {
"color": 4,
"height": 544,
"content": "## Cleanup / Airtable mapping\n- **Node**: Code \n- **Return**: `{ Email, subject, Report }` \n👉 Prepares the correct fields aligned with your Airtable table. "
},
"typeVersion": 1
},
{
"id": "076f6b32-e788-4bb7-85c4-0afb0caff168",
"name": "Note adhésive 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
192,
1136
],
"parameters": {
"color": 6,
"height": 624,
"content": "## Store in Airtable\n- **Node**: Airtable (Create Record) \n- **Mapping**: \n - Email = `{{$json.Email}}` \n - subject = `{{$json.subject}}` \n - Report = `{{$json.Report}}` \n👉 Archives each meeting report in your Airtable base. "
},
"typeVersion": 1
},
{
"id": "e8bd763c-58de-458a-961b-96d66536dff0",
"name": "Note adhésive 6",
"type": "n8n-nodes-base.stickyNote",
"position": [
432,
1232
],
"parameters": {
"color": 7,
"height": 528,
"content": "## Notify in Slack\n- **Node**: Slack (Send Message) \n- **Channel**: your team channel \n- **Message**: {{$json.fields.subject}}{{$json.fields.Report}}"
},
"typeVersion": 1
},
{
"id": "3e97aa2f-e270-4896-842d-f0db6bdf713e",
"name": "Note adhésive 7",
"type": "n8n-nodes-base.stickyNote",
"position": [
672,
1120
],
"parameters": {
"color": 5,
"height": 640,
"content": "## Send the email\n- **Node**: Gmail (Send Email) \n- **sendTo**: `{{$('Create a record').item.json.fields.Email}}` \n- **subject**: `{{$('Create a record').item.json.fields.subject}}` \n- **message**: `{{$('Create a record').item.json.fields.Report}}` \n👉 Sends the complete meeting minutes to the recipients. "
},
"typeVersion": 1
},
{
"id": "2d6d9fdf-9473-42ea-ab9e-4ac1993e9648",
"name": "Note adhésive 8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-592,
912
],
"parameters": {
"color": 2,
"width": 182,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "46a6e02b-bc0e-43fa-925c-7165a0153d42",
"name": "Note adhésive 9",
"type": "n8n-nodes-base.stickyNote",
"position": [
192,
1600
],
"parameters": {
"color": 5,
"width": 246,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "3a92f0d9-8221-4c53-931a-0745bd76eef7",
"name": "Note adhésive 10",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
1600
],
"parameters": {
"color": 7,
"width": 198,
"height": 192,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "f934e87f-2486-4701-b3f3-38fd1fa37c2f",
"name": "Note adhésive 11",
"type": "n8n-nodes-base.stickyNote",
"position": [
736,
1616
],
"parameters": {
"color": 7,
"width": 150,
"height": 144,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "2f570729-0e5a-4b3a-aaff-4fd182ad5b2f",
"name": "Structure du code",
"type": "n8n-nodes-base.code",
"position": [
-768,
1376
],
"parameters": {
"jsCode": "const text = String($json.text || \"\").trim();\nconst lower = text.toLowerCase();\n\n// 1) Direct email in message\nconst emailMatch = text.match(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/i);\nlet email = emailMatch ? emailMatch[0].toLowerCase() : null;\n\n// 2) Extract a domain hint from the message (fallback for building email)\nlet domainHint = null;\nconst domainRegex = /\\b([a-z0-9][a-z0-9-]{0,63}\\.)+[a-z]{2,}\\b/i;\nconst domainMatch = text.match(domainRegex);\nif (domainMatch) {\n const parts = domainMatch[0].toLowerCase().split('.').filter(Boolean);\n if (parts.length >= 2) {\n domainHint = `${parts[parts.length - 2]}.${parts[parts.length - 1]}`;\n }\n}\n\n// 3) If no direct email, try to build one from a \"send to / envoyer à\" style mention\nif (!email) {\n // Capture after signals like \"envoyer à\", \"envoie à\", \"à envoyer à\", \"send to\", \"to\"\n const toCue =\n /(à envoyer à|envoyer à|envoie à|envois à|envoi à|send to|to)\\s+([^\\n,;:]+)/i;\n const labelCue = /(mail|email|courriel|adresse)\\s*[:\\-]\\s*([^\\n,;:]+)/i;\n\n let target = null;\n const m1 = lower.match(toCue);\n const m2 = lower.match(labelCue);\n if (m1 && m1[2]) target = m1[2];\n else if (m2 && m2[2]) target = m2[2];\n\n if (target) {\n target = target\n .replace(/^[«\"'\\(\\[]+|[»\"'\\)\\]]+$/g, \"\") // trim quotes/brackets\n .trim();\n\n // If target already contains an email, use it\n const tEmail = target.match(/[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}/i);\n if (tEmail) {\n email = tEmail[0].toLowerCase();\n } else {\n // If target looks like \"firstname.lastname\" or \"firstname lastname\", normalize it\n // Remove common filler words\n target = target\n .replace(/\\b(chez|à|au|pour|de|du|la|le|l'|mr|mme|m\\.)\\b/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim();\n\n // Keep only letters, spaces, dots, hyphens, underscores\n target = target.replace(/[^a-zàâäçéèêëîïôöùûüÿ\\s._-]/g, \"\");\n\n // Build local part\n const ascii = target\n .normalize(\"NFD\")\n .replace(/\\p{Diacritic}/gu, \"\")\n .toLowerCase();\n\n // Split by spaces, dots, underscores, hyphens\n const tokens = ascii.split(/[\\s._-]+/).filter(Boolean);\n\n let local = null;\n if (tokens.length >= 2) {\n local = `${tokens[0]}.${tokens[tokens.length - 1]}`;\n } else if (tokens.length === 1) {\n local = tokens[0];\n }\n\n if (local) {\n // If target contains something like \".com\" we treat it as a domain hint\n let domainFromTarget = null;\n const tDomain = target.match(domainRegex);\n if (tDomain) {\n const p = tDomain[0].split(\".\").filter(Boolean);\n if (p.length >= 2)\n domainFromTarget = `${p[p.length - 2]}.${p[p.length - 1]}`.toLowerCase();\n }\n\n const finalDomain = domainFromTarget || domainHint || \"gmail.com\";\n email = `${local}@${finalDomain}`.replace(/\\.{2,}/g, \".\");\n }\n }\n }\n}\n\n// 4) Final fallback\nif (!email) {\n email = \"contact@gmail.com\";\n}\n\n// Preserve your previous outputs too\nlet foundDomain = null;\nif (domainHint) foundDomain = domainHint;\n\nreturn [{\n input: { text },\n email,\n domain: foundDomain,\n domainUrl: foundDomain ? `https://${foundDomain}` : null\n}];\n"
},
"typeVersion": 2
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "f3969a89-1668-4520-9ea6-9d66642ada23",
"connections": {
"dfd67f2c-f977-4ef6-98c2-1433eca110dc": {
"main": [
[
{
"node": "dbc0240b-13ef-49ba-8da4-4677a27b8a0a",
"type": "main",
"index": 0
}
],
[
{
"node": "7b77efa8-1a8b-48f5-a821-e0e7a6d57a41",
"type": "main",
"index": 0
}
]
]
},
"bb193e7c-6511-453f-a782-5ab19119d3b7": {
"main": [
[
{
"node": "70d6a4e6-3197-4f9b-9fd5-dea831e0dc21",
"type": "main",
"index": 0
}
]
]
},
"0ec4455b-d8c7-433d-abb6-9767fdc0f0b4": {
"main": [
[
{
"node": "2f570729-0e5a-4b3a-aaff-4fd182ad5b2f",
"type": "main",
"index": 0
}
]
]
},
"118fc989-2485-4e53-b2d3-17dfed0afe2a": {
"main": [
[
{
"node": "5ba230a3-bebe-4ee8-b160-8d0108adb6a8",
"type": "main",
"index": 0
}
]
]
},
"7b77efa8-1a8b-48f5-a821-e0e7a6d57a41": {
"main": [
[
{
"node": "2f570729-0e5a-4b3a-aaff-4fd182ad5b2f",
"type": "main",
"index": 0
}
]
]
},
"dbc0240b-13ef-49ba-8da4-4677a27b8a0a": {
"main": [
[
{
"node": "118fc989-2485-4e53-b2d3-17dfed0afe2a",
"type": "main",
"index": 0
}
]
]
},
"2f570729-0e5a-4b3a-aaff-4fd182ad5b2f": {
"main": [
[
{
"node": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
"type": "main",
"index": 0
}
]
]
},
"45d090e1-1ba9-4324-bf34-3f3fe1a1b0a3": {
"main": [
[
{
"node": "98f24854-770a-45c7-b2b4-4be331d64ecc",
"type": "main",
"index": 0
}
]
]
},
"70d6a4e6-3197-4f9b-9fd5-dea831e0dc21": {
"main": [
[
{
"node": "45d090e1-1ba9-4324-bf34-3f3fe1a1b0a3",
"type": "main",
"index": 0
}
]
]
},
"b1c2fa2b-2d71-40c4-a36f-a086cce865ff": {
"main": [
[
{
"node": "9626d70e-4123-4f13-b77c-dadb936669e5",
"type": "main",
"index": 0
}
]
]
},
"3901f82e-b400-424a-9a51-bff0212e0a04": {
"ai_outputParser": [
[
{
"node": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"9626d70e-4123-4f13-b77c-dadb936669e5": {
"main": [
[
{
"node": "dfd67f2c-f977-4ef6-98c2-1433eca110dc",
"type": "main",
"index": 0
}
]
]
},
"5ba230a3-bebe-4ee8-b160-8d0108adb6a8": {
"main": [
[
{
"node": "8cfbe3e0-aad3-4ca8-95cd-654b9ad29605",
"type": "main",
"index": 0
}
]
]
},
"8cbf2f84-adfa-4877-b59d-31dad7a4a23d": {
"main": [
[
{
"node": "bb193e7c-6511-453f-a782-5ab19119d3b7",
"type": "main",
"index": 0
}
]
]
},
"af08414c-6227-4af0-831a-5832d7a2833c": {
"ai_languageModel": [
[
{
"node": "8cbf2f84-adfa-4877-b59d-31dad7a4a23d",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"8cfbe3e0-aad3-4ca8-95cd-654b9ad29605": {
"main": [
[
{
"node": "0ec4455b-d8c7-433d-abb6-9767fdc0f0b4",
"type": "main",
"index": 0
}
]
]
}
}
}Comment utiliser ce workflow ?
Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.
Dans quelles scénarios ce workflow est-il adapté ?
Avancé - Résumé IA, IA Multimodale
Est-ce payant ?
Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.
Workflows recommandés
Partager ce workflow