自动化会议摘要
中级
这是一个Document Extraction、AI Summarization领域的自动化工作流,包含 14 个节点。主要使用 If、Code、Wait、Slack、HttpRequest 等节点。 使用 Vexa.ai 和 GPT-4o 从 Google Meet 到 Slack 自动生成会议摘要
前置要求
- •Slack Bot Token 或 Webhook URL
- •可能需要目标 API 的认证凭证
- •OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {
"instanceId": "477d41ba9371722c12acb8ceb19deefe8a94935c3dc3255b6a9141e5f8643752",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "d3ccf483-864c-42da-98a2-81d0d42d3b0e",
"name": "添加机器人到会议",
"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 触发器",
"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": "发送消息",
"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": "AI Agent",
"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": "获取 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": "等待",
"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": "如果",
"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 聊天模型",
"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": "代码",
"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": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1248,
-960
],
"parameters": {
"color": 3,
"height": 544,
"content": "## 📋 前提条件与要求"
},
"typeVersion": 1
},
{
"id": "1ed15b13-de3b-4cb1-a231-1dbcd32d6823",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-624,
-960
],
"parameters": {
"width": 304,
"height": 672,
"content": "## 🗓️ Google Calendar 设置"
},
"typeVersion": 1
},
{
"id": "a7dbe268-d020-47c9-993e-9a53c1249043",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-960
],
"parameters": {
"width": 752,
"height": 672,
"content": "## 🤖 Vexa.ai 设置"
},
"typeVersion": 1
},
{
"id": "09d0a663-c758-4c80-b5bf-19d6d3228816",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
-960
],
"parameters": {
"width": 896,
"height": 736,
"content": "## 🧠 OpenAI + Slack 设置"
},
"typeVersion": 1
},
{
"id": "6ff6c940-ada7-4743-a249-6a211c3b9288",
"name": "便签4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-944,
-960
],
"parameters": {
"color": 3,
"height": 896,
"content": "## 🔑 凭据设置指南"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"If": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
],
[
{
"node": "Wait",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Wait": {
"main": [
[
{
"node": "Get Vexa Transcript",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Send a message": {
"main": [
[]
]
},
"Add bot to meet": {
"main": [
[
{
"node": "Get Vexa Transcript",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Get Vexa Transcript": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"Google Calendar Trigger": {
"main": [
[
{
"node": "Add bot to meet",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
这是一个中级难度的工作流,适用于Document Extraction、AI Summarization等场景。适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
AI驱动的同行评审作业系统,带自动评分标准生成
使用GPT-4-nano、Slack和邮件通知自动化同行评审分配
Set
Code
Slack
+9
22 节点Cheng Siong Chin
Document Extraction
使用 Gemini 和 Jina AI 自动化供应商尽职调查研究
使用 Gemini 和 Jina AI 自动化供应商尽职调查研究
If
Set
Code
+12
27 节点Adnan
Document Extraction
使用 AI 和 Gmail 自动更新 YNAB 中的亚马逊交易备注
使用 AI 和 Gmail 自动更新 YNAB 中的亚马逊交易备注
If
Set
Wait
+13
30 节点Angel Menendez
Document Extraction
Facebook页面评论管理机器人:回复、删除、封禁和通知
AI驱动的Facebook评论管理:自动回复、删除、封禁和通知
If
Set
Code
+18
59 节点SpaGreen Creative
Social Media
AI 客户支持分流与摘要系统
使用GPT-4o、Slack和CRM集成自动处理客户支持
If
Set
Code
+10
32 节点NodeAlchemy
Ticket Management
从Telegram自动发送会议记录到Airtable、Slack和Gmail
使用GPT-4.1从Telegram消息创建会议记录并发送至Airtable、Slack、Gmail
If
Code
Wait
+10
29 节点Baptiste Fort
AI Summarization
工作流信息
难度等级
中级
节点数量14
分类2
节点类型9
作者
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!
外部链接
在 n8n.io 上查看 →
分享此工作流