Notification des comptes-rendus de réunions
Ceci est unAI Summarization, Multimodal AIworkflow d'automatisation du domainecontenant 16 nœuds.Utilise principalement des nœuds comme Set, Code, Slack, DateTime, SplitOut. Utiliser Gemini AI et les notifications Slack pour automatiser le résumé des notes de réunion
- •Token Bot Slack ou URL Webhook
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Clé API Google Gemini
Nœuds utilisés (16)
Catégorie
{
"id": "6nKbFj90W1K6L90c",
"meta": {
"instanceId": "bbc3fa3cd7d64d8ff0c4877d98dee68ce7dadacc5e089546680c915b3e5a212b",
"templateCredsSetupCompleted": true
},
"name": "Meeting notes notification",
"tags": [],
"nodes": [
{
"id": "173f23e7-fbd7-4dd1-acbe-4784be565a22",
"name": "Déclencheur Planifié",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-464,
-288
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "98ee19dc-ccee-430a-8186-37337fa71619",
"name": "Transformation IA",
"type": "n8n-nodes-base.aiTransform",
"position": [
656,
-288
],
"parameters": {
"jsCode": "const items = $input.all();\nconst today = new Date();\nconst oneWeekAgo = new Date();\noneWeekAgo.setDate(today.getDate() - 7);\n\nconst filteredItems = items.filter((item) => {\n const itemDate = new Date(item?.json?.formattedDate);\n return itemDate >= oneWeekAgo && itemDate <= today;\n});\n\nreturn filteredItems;\n",
"instructions": "Filter the formatted Date in the past week upto today",
"codeGeneratedForPrompt": "Filter the formatted Date in the past week upto today"
},
"typeVersion": 1
},
{
"id": "b08111fc-f718-4009-aed8-4746d204f801",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
888,
-64
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "F27E5eCnDR6vZBbg",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "6fac9ef2-7876-4f71-a4aa-32aed028bf49",
"name": "Envoyer un message",
"type": "n8n-nodes-base.slack",
"position": [
1456,
-288
],
"webhookId": "cb7cf410-be03-47eb-a39f-08e04c4d1021",
"parameters": {
"text": "test",
"select": "channel",
"blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09CV2VC877",
"cachedResultName": "meeting-notes"
},
"messageType": "block",
"otherOptions": {
"includeLinkToWorkflow": false
},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "XBHT6VDVo1vwvFz2",
"name": "Slack account"
}
},
"executeOnce": true,
"typeVersion": 2.3
},
{
"id": "fd642df4-da0e-43b7-b6bf-4cd9bb80f9d6",
"name": "résumé",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
1016,
-64
],
"parameters": {
"url": "=https://api.meetgeek.ai/v1/meetings/{{ $json.extract_meeting_id }}/summary/",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "xTo22iPOKW4a71o3",
"name": "Bearer Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "daf0670b-e2d7-446d-9d63-32952e99d55b",
"name": "Note Adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-312,
-432
],
"parameters": {
"width": 464,
"height": 304,
"content": "## Get meeting data from the note taker"
},
"typeVersion": 1
},
{
"id": "b6d8b4ef-1dbb-410a-a656-d6cb77e3cf64",
"name": "Note Adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
392,
-480
],
"parameters": {
"width": 400,
"height": 352,
"content": "## Format the date and restructure the data\n**Filter the meeting data for the past seven days.**"
},
"typeVersion": 1
},
{
"id": "d5ceabf5-c4c4-4d40-8cd9-719537478abc",
"name": "Note Adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
832,
-464
],
"parameters": {
"width": 320,
"height": 544,
"content": "## Extract summary and action items from the meeting notes\n**Using Gemini AI model summarize the meeting notes and list down the action items** "
},
"typeVersion": 1
},
{
"id": "2248164e-c74c-43cf-ba80-2c314969310b",
"name": "Agent IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
880,
-288
],
"parameters": {
"text": "=# 📝 Meeting Notes Summarizer with Action Items\n\nYou are an AI assistant that **summarizes meeting notes** and **extracts clear action items**.\n\n---\n\n## 🔹 Input Data\n- **meeting_id**: `{{ $json.extract_meeting_id }}`\n- **title**: `{{ $json.title }}`\n\n---\n\n## 🔹 Task Instructions\n1. Call the **Meeting Note Summary API** using the **HTTP Request node**, passing `meeting_id` as a path parameter. \n2. For each API response, generate a summary for the corresponding meeting. \n3. Provide a **concise summary** in **3–5 bullet points**. \n4. Extract a structured **Action Items** list with:\n - **Task description** \n - **Responsible person** (if mentioned, otherwise `Unassigned`) \n - **Deadline** (if mentioned, otherwise `No deadline`) \n5. Ensure each meeting summary **includes the meeting title** (`{{ $json.title }}`). \n6. If the meeting notes are **empty or missing**, still return the JSON format but use:\n - `\"summary\": [\"No summary available\"]` \n - `\"action_items\": []` \n\n---\n\n## 🔹 Output Format (JSON)\n```json\n{\n \"title\": \"{{ $json.title }}\",\n \"summary\": [\n \"point 1\",\n \"point 2\",\n \"point 3\"\n ],\n \"action_items\": [\n {\n \"task\": \"Task description\",\n \"owner\": \"Person name / Unassigned\",\n \"deadline\": \"Date / No deadline\"\n }\n ]\n}\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "f20b3135-24b3-4d49-bceb-1c10f32ac9bf",
"name": "Note Adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1208,
-416
],
"parameters": {
"width": 368,
"height": 288,
"content": "## Set slack notification\n**Restructure the output from the AI agent and formatted it to slack block** "
},
"typeVersion": 1
},
{
"id": "4086c066-d09c-47f0-b19e-f8b56fcf0d8a",
"name": "Ajouter un nom personnalisé pour l'ID de réunion",
"type": "n8n-nodes-base.set",
"position": [
208,
-288
],
"parameters": {
"include": "except",
"options": {},
"assignments": {
"assignments": [
{
"id": "f26be114-60b9-4017-ada9-db48cb79968a",
"name": "extract_meeting_id",
"type": "string",
"value": "={{ $json.meeting_id }}"
}
]
},
"excludeFields": "meeting_id",
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "06de46ec-90b5-48a7-95e8-52e1899a3d81",
"name": "Diviser les réunions",
"type": "n8n-nodes-base.splitOut",
"position": [
-16,
-288
],
"parameters": {
"options": {},
"fieldToSplitOut": "=meetings"
},
"typeVersion": 1
},
{
"id": "46c0edee-9d49-4278-bf55-0244d6085290",
"name": "Obtenir la liste des réunions",
"type": "n8n-nodes-base.httpRequest",
"position": [
-240,
-288
],
"parameters": {
"url": "https://api.meetgeek.ai/v1/meetings/",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "xTo22iPOKW4a71o3",
"name": "Bearer Auth account"
}
},
"executeOnce": true,
"typeVersion": 4.2
},
{
"id": "e66baa91-7c07-4c23-93e0-cb2cea49ccd9",
"name": "Formater la date",
"type": "n8n-nodes-base.dateTime",
"position": [
432,
-288
],
"parameters": {
"date": "={{ $json.timestamp_start_utc }}",
"format": "yyyy-MM-dd",
"options": {
"includeInputFields": true
},
"operation": "formatDate"
},
"typeVersion": 2
},
{
"id": "3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1",
"name": "Restructurer en bloc slack",
"type": "n8n-nodes-base.code",
"position": [
1232,
-288
],
"parameters": {
"jsCode": "// Input: array of note-taker outputs\nconst notes = $input.all().map(item => item.json);\n\n// Slack blocks array\nlet blocks = [];\n\nnotes.forEach((note, index) => {\n // Clean and parse JSON inside code block\n const cleaned = note.output.replace(/```json|```/g, '').trim();\n let parsed;\n\n try {\n parsed = JSON.parse(cleaned);\n } catch (err) {\n parsed = { title: `Meeting ${index + 1}`, summary: [\"Could not parse notes\"], action_items: [] };\n }\n\n // Meeting header with title\n blocks.push({\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: parsed.title || `Meeting ${index + 1}`\n }\n });\n\n // Summary section\n if (parsed.summary && parsed.summary.length > 0) {\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: \"*Summary:*\\n\" + parsed.summary.map(s => `• ${s}`).join(\"\\n\")\n }\n });\n }\n\n // Action items section\n if (parsed.action_items && parsed.action_items.length > 0) {\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: \"*Action Items:*\"\n }\n });\n\n parsed.action_items.forEach(item => {\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `• *Task:* ${item.task || \"N/A\"}\\n *Owner:* ${item.owner || \"Unassigned\"}\\n *Deadline:* ${item.deadline || \"No deadline\"}`\n }\n });\n });\n } else {\n // If no action items\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: \"_No action items available_\"\n }\n });\n }\n\n // Divider\n blocks.push({ type: \"divider\" });\n});\n\nreturn { blocks };\n"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "97e0f0e6-6745-4b45-a019-c89e76de9ec5",
"name": "Note Adhésive5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
-1008
],
"parameters": {
"width": 512,
"height": 544,
"content": "## 📌 Meeting Notes Summarizer & Slack Notifier\n\n**What it does**\n- ⏰ Reads meeting notes from your note-taking app using API calls \n- 🤖 Summarizes key points and extracts action items with **Gemini AI** \n- 🗂️ Restructures the output into **Slack Block Kit** format \n- 🔔 Sends daily Slack notifications with clear summaries and actionable tasks \n\n**Requirements**\n- API key & configuration for your meeting note-taking application \n- Gemini AI credentials \n- Slack channel with OAuth credentials \n\n**Setup Instructions**\n1. Configure the **note taker API** in the **Get Meetings List** and **Summary** nodes. \n - *Get Meetings List* → fetches the list of meetings \n - *Summary* → fetches the summary for each meeting \n2. Add your **Gemini AI credentials** to enable summarization. \n3. Configure **Slack** to send notifications to the desired channel. \n4. Activate the workflow — your team will start receiving automated meeting summaries and action items daily. \n\n**Tip:** You can further customize this workflow by adjusting the trigger schedule, modifying Slack message formatting, or changing the API URL in the HTTP Request node."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "bdd7ca4b-f73e-491e-b697-0e419879a2b8",
"connections": {
"fd642df4-da0e-43b7-b6bf-4cd9bb80f9d6": {
"ai_tool": [
[
{
"node": "2248164e-c74c-43cf-ba80-2c314969310b",
"type": "ai_tool",
"index": 0
}
]
]
},
"2248164e-c74c-43cf-ba80-2c314969310b": {
"main": [
[
{
"node": "3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1",
"type": "main",
"index": 0
}
]
]
},
"e66baa91-7c07-4c23-93e0-cb2cea49ccd9": {
"main": [
[
{
"node": "98ee19dc-ccee-430a-8186-37337fa71619",
"type": "main",
"index": 0
}
]
]
},
"98ee19dc-ccee-430a-8186-37337fa71619": {
"main": [
[
{
"node": "2248164e-c74c-43cf-ba80-2c314969310b",
"type": "main",
"index": 0
}
]
]
},
"06de46ec-90b5-48a7-95e8-52e1899a3d81": {
"main": [
[
{
"node": "4086c066-d09c-47f0-b19e-f8b56fcf0d8a",
"type": "main",
"index": 0
}
]
]
},
"173f23e7-fbd7-4dd1-acbe-4784be565a22": {
"main": [
[
{
"node": "46c0edee-9d49-4278-bf55-0244d6085290",
"type": "main",
"index": 0
}
]
]
},
"46c0edee-9d49-4278-bf55-0244d6085290": {
"main": [
[
{
"node": "06de46ec-90b5-48a7-95e8-52e1899a3d81",
"type": "main",
"index": 0
}
]
]
},
"b08111fc-f718-4009-aed8-4746d204f801": {
"ai_languageModel": [
[
{
"node": "2248164e-c74c-43cf-ba80-2c314969310b",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1": {
"main": [
[
{
"node": "6fac9ef2-7876-4f71-a4aa-32aed028bf49",
"type": "main",
"index": 0
}
]
]
},
"4086c066-d09c-47f0-b19e-f8b56fcf0d8a": {
"main": [
[
{
"node": "e66baa91-7c07-4c23-93e0-cb2cea49ccd9",
"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
Sayone Technologies
@sayonetechSayOne Technologies is a digital transformation and IT services company headquartered in India, with a strong focus on web, mobile, and AI-driven solutions for the retail tech space. With over a decade of experience, SayOne partners with global businesses to build scalable applications, optimize inventory and operations using next-gen AI, and deliver customer-centric digital products.
Partager ce workflow