Résumé automatisé de réunion
Ceci est unDocument Extraction, AI Summarizationworkflow d'automatisation du domainecontenant 14 nœuds.Utilise principalement des nœuds comme If, Code, Wait, Slack, HttpRequest. Génération automatique de résumés de réunions de Google Meet vers Slack avec Vexa.ai et GPT-4o
- •Token Bot Slack ou URL Webhook
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Clé API OpenAI
Nœuds utilisés (14)
Catégorie
{
"meta": {
"instanceId": "477d41ba9371722c12acb8ceb19deefe8a94935c3dc3255b6a9141e5f8643752",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "d3ccf483-864c-42da-98a2-81d0d42d3b0e",
"name": "Ajouter un bot à la réunion",
"type": "n8n-nodes-base.httpRequest",
"position": [
-240,
-512
],
"parameters": {
"url": "https://gateway.dev.vexa.ai/bots",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "platform",
"value": "google_meet"
},
{
"name": "native_meeting_id",
"value": "={{ $json.conferenceData.conferenceId }}"
},
{
"name": "bot_name",
"value": "MyMeetingBot"
}
]
},
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "qsLMfqhzV78G4n49",
"name": "Header Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "4ec42f69-06d3-451b-bdce-a929a39bc8bf",
"name": "Google Calendar Trigger",
"type": "n8n-nodes-base.googleCalendarTrigger",
"position": [
-544,
-512
],
"parameters": {
"options": {
"matchTerm": ""
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerOn": "eventStarted",
"calendarId": {
"__rl": true,
"mode": "id",
"value": "='primary'"
}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "eOIgUZwgncUgpFDg",
"name": "Google Calendar account"
}
},
"typeVersion": 1
},
{
"id": "7d4de5a4-7aef-4447-88b3-7f32677b6395",
"name": "Envoyer un message",
"type": "n8n-nodes-base.slack",
"position": [
1456,
-560
],
"webhookId": "c50e7cb4-eaa8-4128-99d4-e0f0341d2c97",
"parameters": {
"text": "={{ $json.output }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "name",
"value": "#general"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"id": "l613sxla64BipXhh",
"name": "Slack account"
}
},
"typeVersion": 2.3
},
{
"id": "03516d84-dea0-429f-b0d0-00dbb5099a94",
"name": "Agent IA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1056,
-560
],
"parameters": {
"text": "=# Fast Meeting Summary Prompt\n\nAnalyze this meeting transcription and create a brief Slack summary. Keep it under 800 characters total.\n\n**Meeting Transcript:**\n{{ $json.fullTranscript }}\n\n**Meeting Details:**\n- Duration: {{ $json.durationMinutes }} minutes\n- Participants: {{ $json.participants }}\n\n**Format (be extremely concise):**\n\n## 📋 Meeting Summary\n**Duration:** [Start-End time]\n**Participants:** [Names only]\n\n**🎯 Key Points:**\n- [Main topic 1]\n- [Main topic 2]\n\n**📝 Action Items:**\n- [Task - Person - Deadline]\n\n**💡 Outcome:**\n[One sentence summary of result/decision]\n\nKeep each bullet point under 50 characters. Focus only on actionable information and key decisions.",
"options": {},
"promptType": "define"
},
"typeVersion": 2.1
},
{
"id": "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23",
"name": "Obtenir la transcription Vexa",
"type": "n8n-nodes-base.httpRequest",
"position": [
304,
-560
],
"parameters": {
"url": "=https://gateway.dev.vexa.ai/transcripts/google_meet/{{ $json.native_meeting_id }}",
"options": {
"timeout": 30000
},
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "qsLMfqhzV78G4n49",
"name": "Header Auth account"
}
},
"typeVersion": 4.1
},
{
"id": "62f19410-e908-4523-a8d5-e5af789982c2",
"name": "Attendre",
"type": "n8n-nodes-base.wait",
"position": [
768,
-432
],
"webhookId": "eb04f35a-7f4e-41f6-a9d7-bc2df86e4e16",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "9208ae18-6bba-441a-95e5-3d13c44de206",
"name": "Si",
"type": "n8n-nodes-base.if",
"position": [
512,
-560
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "40ee5a62-d7e4-4f2e-9f41-e073dd09e575",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{$json.status}}",
"rightValue": "completed"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "310ee3cb-5387-4bd7-88d5-aa7f233cee48",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1056,
-352
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "chatgpt-4o-latest",
"cachedResultName": "chatgpt-4o-latest"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "H8pWaOdD8Xbmd0vd",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "67cced29-b716-4ea6-a41d-9bab723332d4",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
848,
-560
],
"parameters": {
"jsCode": "// Get the input data\nconst inputData = $input.all()[0].json; // Get the first item which contains the meeting data\n\n// Extract segments from the nested structure\nconst segments = inputData.segments || [];\n\nif (!segments || segments.length === 0) {\n return [{\n json: {\n fullTranscript: \"No transcript data available\",\n participants: \"None\",\n durationSeconds: 0,\n durationMinutes: 0\n }\n }];\n}\n\n// Combine into a single readable transcript\nconst transcript = segments\n .map(segment => {\n const speaker = segment.speaker || 'Unknown';\n const text = segment.text || '';\n const time = Math.round(segment.start || 0);\n return `[${time}s] ${speaker}: ${text}`;\n })\n .join('\\n');\n\n// Get unique participants\nconst participants = [...new Set(\n segments\n .map(segment => segment.speaker)\n .filter(speaker => speaker && speaker !== null)\n)];\n\n// Calculate duration\nconst startTime = segments[0]?.start || 0;\nconst endTime = segments[segments.length - 1]?.end || 0;\nconst duration = Math.round(endTime - startTime);\n\n// Get meeting info from the root level\nconst meetingId = inputData.native_meeting_id || 'Unknown';\nconst platform = inputData.platform || 'Unknown';\nconst status = inputData.status || 'Unknown';\n\nreturn [{\n json: {\n fullTranscript: transcript,\n participants: participants.join(', ') || 'Unknown',\n durationSeconds: duration,\n durationMinutes: Math.round(duration / 60),\n meetingId: meetingId,\n platform: platform,\n status: status,\n totalSegments: segments.length\n }\n}];"
},
"typeVersion": 2
},
{
"id": "de13ece0-8fb4-489b-b2d7-cf0f0b14114b",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1248,
-960
],
"parameters": {
"color": 3,
"height": 544,
"content": "## 📋 Prerequisites & Requirements\n\n**Required Accounts:**\n- Google Calendar API access (free)\n- Vexa.ai account with API key\n- OpenAI API account with credits\n- Slack workspace admin access\n\n**Required Permissions:**\n- Google Calendar: Read calendar events\n- Slack: Post messages to channels\n- Vexa.ai: Create bots and access transcripts\n\n**Estimated Setup Time:** 15-20 minutes\n**Cost:** ~$0.01-0.05 per meeting (OpenAI costs)"
},
"typeVersion": 1
},
{
"id": "1ed15b13-de3b-4cb1-a231-1dbcd32d6823",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-624,
-960
],
"parameters": {
"width": 304,
"height": 672,
"content": "## 🗓️ Google Calendar Setup\n\n**Steps:**\n1. Go to Google Cloud Console\n2. Enable Calendar API\n3. Create credentials (OAuth2)\n4. Add credentials to n8n\n5. Test connection\n\n**Configuration:**\n- Select your target calendar from list\n- Set trigger to 'eventStarted'\n- Ensure calendar has Meet links\n\n**⚠️ Important:** Only works with Google Meet links in calendar events"
},
"typeVersion": 1
},
{
"id": "a7dbe268-d020-47c9-993e-9a53c1249043",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-960
],
"parameters": {
"width": 752,
"height": 672,
"content": "## 🤖 Vexa.ai Setup\n\n**Get API Key:**\n1. Sign up at vexa.ai\n2. Navigate to API settings\n3. Generate new API key\n4. Add to n8n credentials\n\n**Bot Configuration:**\n- Platform: 'google_meet'\n- Bot name: Customize as needed\n- Meeting ID: Auto-extracted from calendar\n\n**Rate Limits:**\n- 100 requests/hour on free tier\n- Bot joins 30-60 seconds after meeting starts"
},
"typeVersion": 1
},
{
"id": "09d0a663-c758-4c80-b5bf-19d6d3228816",
"name": "Note adhésive3",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
-960
],
"parameters": {
"width": 896,
"height": 736,
"content": "## 🧠 OpenAI + Slack Setup\n\n**OpenAI Configuration:**\n- Model: chatgpt-4o-latest (recommended)\n- Cost: ~$0.01-0.05 per summary\n- Add API key to n8n credentials\n\n**Slack Bot Setup:**\n1. Create Slack app in workspace\n2. Add bot token scopes: chat:write\n3. Install app to workspace\n4. Add bot to target channel\n5. Copy bot token to n8n\n\n**Channel Format:** Use channel name or ID"
},
"typeVersion": 1
},
{
"id": "6ff6c940-ada7-4743-a249-6a211c3b9288",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
-960
],
"parameters": {
"color": 3,
"height": 896,
"content": "## 🔑 Credential Setup Guide\n\n**Before using this workflow:**\n\n**1. Google Calendar OAuth2:**\n- Go to Google Cloud Console\n- Enable Calendar API\n- Create OAuth2 credentials\n- Add to n8n: Google Calendar OAuth2 API\n\n**2. Vexa.ai API (HTTP Header Auth):**\n- Sign up at vexa.ai\n- Get API key from dashboard \n- Create HTTP Header Auth credential\n- Header name: 'X-API-Key'\n- Header value: Your API key\n\n**3. OpenAI API:**\n- Get API key from OpenAI platform\n- Add to n8n: OpenAI API credential\n- Ensure account has sufficient credits\n\n**4. Slack Bot Token:**\n- Create Slack app in your workspace\n- Add bot token scopes: chat:write, channels:read\n- Install app to workspace\n- Add bot to target channel\n- Copy bot token to n8n: Slack API credential\n\n**⚠️ Test each credential** before running the full workflow!"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"9208ae18-6bba-441a-95e5-3d13c44de206": {
"main": [
[
{
"node": "67cced29-b716-4ea6-a41d-9bab723332d4",
"type": "main",
"index": 0
}
],
[
{
"node": "62f19410-e908-4523-a8d5-e5af789982c2",
"type": "main",
"index": 0
}
]
]
},
"67cced29-b716-4ea6-a41d-9bab723332d4": {
"main": [
[
{
"node": "03516d84-dea0-429f-b0d0-00dbb5099a94",
"type": "main",
"index": 0
}
]
]
},
"62f19410-e908-4523-a8d5-e5af789982c2": {
"main": [
[
{
"node": "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23",
"type": "main",
"index": 0
}
]
]
},
"03516d84-dea0-429f-b0d0-00dbb5099a94": {
"main": [
[
{
"node": "7d4de5a4-7aef-4447-88b3-7f32677b6395",
"type": "main",
"index": 0
}
]
]
},
"7d4de5a4-7aef-4447-88b3-7f32677b6395": {
"main": [
[]
]
},
"d3ccf483-864c-42da-98a2-81d0d42d3b0e": {
"main": [
[
{
"node": "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23",
"type": "main",
"index": 0
}
]
]
},
"310ee3cb-5387-4bd7-88d5-aa7f233cee48": {
"ai_languageModel": [
[
{
"node": "03516d84-dea0-429f-b0d0-00dbb5099a94",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23": {
"main": [
[
{
"node": "9208ae18-6bba-441a-95e5-3d13c44de206",
"type": "main",
"index": 0
}
]
]
},
"4ec42f69-06d3-451b-bdce-a929a39bc8bf": {
"main": [
[
{
"node": "d3ccf483-864c-42da-98a2-81d0d42d3b0e",
"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é ?
Intermédiaire - Extraction de documents, Résumé IA
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
Vladimir
@vilin1927I created my own No-Code Agency with a few years ago, currently help SMBs to achieve their automation goals. Passionate about n8n and automation and trying to ride the wave of AI hype!
Partager ce workflow