Google Meet AI助手
高级
这是一个Content Creation, Multimodal AI领域的自动化工作流,包含 25 个节点。主要使用 If, Set, Code, Slack, Filter 等节点。 使用Google Meet、AssemblyAI和Claude AI自动化会议摘要与行动项
前置要求
- •Slack Bot Token 或 Webhook URL
- •Notion API Key
- •Google Drive API 凭证
- •可能需要目标 API 的认证凭证
- •Anthropic API Key
使用的节点 (25)
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"id": "HwyNECzMAzk3eVUe",
"meta": {
"instanceId": "44b5a59a33562e784f2dc2302170b2503b4b272b919680cc66f4c1a5627bed28"
},
"name": "Google Meet AI 助手",
"tags": [],
"nodes": [
{
"id": "be749770-d9c1-4707-8c05-58207dd4c75f",
"name": "当点击测试工作流时",
"type": "n8n-nodes-base.manualTrigger",
"position": [
96,
192
],
"parameters": {},
"typeVersion": 1
},
{
"id": "dae33e76-da7b-43ba-905d-af14763b5db6",
"name": "获取最近会议",
"type": "n8n-nodes-base.googleCalendar",
"position": [
320,
192
],
"parameters": {
"limit": 10,
"options": {
"timeMax": "={{ $now.toISO() }}",
"timeMin": "={{ $now.minus({ hours: 24 }).toISO() }}"
},
"calendar": {
"__rl": true,
"mode": "list",
"value": ""
},
"operation": "getAll"
},
"typeVersion": 1
},
{
"id": "907a8f8d-f947-44fd-a262-e5aa7d9d4191",
"name": "过滤 Google Meet 事件",
"type": "n8n-nodes-base.filter",
"position": [
528,
192
],
"parameters": {
"options": {},
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "condition1",
"operator": {
"type": "object",
"operation": "exists"
},
"leftValue": "={{ $json.conferenceData }}",
"rightValue": ""
},
{
"id": "condition2",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.conferenceData.conferenceSolution.name }}",
"rightValue": "Google Meet"
},
{
"id": "condition3",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "confirmed"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "39cb30a1-cf8e-467c-bd54-7b440664753f",
"name": "提取会议数据",
"type": "n8n-nodes-base.set",
"position": [
720,
192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "assign1",
"name": "meetingId",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "assign2",
"name": "meetingTitle",
"type": "string",
"value": "={{ $json.summary }}"
},
{
"id": "assign3",
"name": "meetingStart",
"type": "string",
"value": "={{ $json.start.dateTime }}"
},
{
"id": "assign4",
"name": "participants",
"type": "string",
"value": "={{ $json.attendees ? $json.attendees.map(a => a.email).join(', ') : 'No attendees' }}"
},
{
"id": "assign5",
"name": "recordingUrl",
"type": "string",
"value": "={{ $json.conferenceData?.entryPoints?.[0]?.uri || '' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e6e628bf-774a-4575-aeb9-44f95f352205",
"name": "在 Google Drive 中查找录制文件",
"type": "n8n-nodes-base.googleDrive",
"position": [
928,
192
],
"parameters": {
"operation": "search"
},
"typeVersion": 3
},
{
"id": "7bef5275-9b55-4096-bbf2-e9571bd3f3c2",
"name": "有录制文件",
"type": "n8n-nodes-base.if",
"position": [
1120,
192
],
"parameters": {
"options": {},
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "cond1",
"operator": {
"type": "string",
"operation": "exists"
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "e678555f-ab47-4c90-89be-003425443df8",
"name": "无录制文件错误",
"type": "n8n-nodes-base.stopAndError",
"position": [
1344,
384
],
"parameters": {
"errorMessage": "No recording found for this meeting. Please ensure the meeting was recorded and saved to Google Drive."
},
"typeVersion": 1
},
{
"id": "64882cca-e12d-4ee7-a921-5998e61a2b82",
"name": "下载录制文件",
"type": "n8n-nodes-base.googleDrive",
"position": [
1344,
192
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"googleFileConversion": {}
},
"operation": "download"
},
"typeVersion": 3
},
{
"id": "c58ac16d-cdfd-45b4-ae7b-2f56edb967d9",
"name": "上传至 AssemblyAI",
"type": "n8n-nodes-base.httpRequest",
"position": [
1568,
192
],
"parameters": {
"options": {}
},
"typeVersion": 4.2
},
{
"id": "05301b4a-8de3-4cd1-902e-e1f39a75f7c1",
"name": "请求转录",
"type": "n8n-nodes-base.httpRequest",
"position": [
1760,
192
],
"parameters": {
"url": "https://api.assemblyai.com/v2/transcript",
"method": "POST",
"options": {},
"jsonBody": "={\n \"audio_url\": \"{{ $json.upload_url }}\",\n \"speaker_labels\": true,\n \"auto_highlights\": true,\n \"sentiment_analysis\": true\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "378e9268-d441-49c1-84db-62116d6d70bc",
"name": "轮询转录状态",
"type": "n8n-nodes-base.httpRequest",
"position": [
1952,
192
],
"parameters": {
"url": "=https://api.assemblyai.com/v2/transcript/{{ $json.id }}",
"options": {
"timeout": 300000
}
},
"typeVersion": 4.2
},
{
"id": "ca5eee30-718e-43d5-be40-a02b12d2e26d",
"name": "格式化转录文本",
"type": "n8n-nodes-base.set",
"position": [
2128,
192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "assign1",
"name": "transcript",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "assign2",
"name": "speakers",
"type": "string",
"value": "={{ $json.utterances ? $json.utterances.map(u => `Speaker ${u.speaker}: ${u.text}`).join('\\n') : $json.text }}"
},
{
"id": "assign3",
"name": "highlights",
"type": "string",
"value": "={{ $json.auto_highlights_result ? $json.auto_highlights_result.results.map(h => h.text).join(', ') : '' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "78024c86-9c1a-451d-9305-2f59498a095d",
"name": "Claude 聊天模型",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2384,
400
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"options": {}
},
"typeVersion": 1
},
{
"id": "36b8070d-686d-4cac-935a-661e6b2ce4e4",
"name": "使用 AI 分析会议",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2352,
192
],
"parameters": {
"text": "=## Meeting Analysis Task\n\nYou are an AI meeting assistant analyzing a Google Meet recording.\n\n### Meeting Details:\n- **Title**: {{ $('extractMeetingData').item.json.meetingTitle }}\n- **Date**: {{ $('extractMeetingData').item.json.meetingStart }}\n- **Participants**: {{ $('extractMeetingData').item.json.participants }}\n\n### Transcript:\n{{ $json.speakers }}\n\n### Your Tasks:\n1. Create a concise meeting summary (2-3 paragraphs)\n2. Extract all action items with responsible parties\n3. Identify any mentioned dates or deadlines\n4. Determine overall meeting sentiment\n\nFormat your response as:\n\n**Meeting Summary:**\n[Summary here]\n\n**Action Items:**\n- [Item] (Assigned to: [Person], Due: [Date])\n\n**Key Dates:**\n- [Date]: [Context]\n\n**Sentiment:** [Positive/Neutral/Negative]",
"agent": "conversationalAgent",
"options": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "b05f988b-a06b-47a4-a301-e5416755cd4a",
"name": "解析 AI 输出",
"type": "n8n-nodes-base.code",
"position": [
2656,
192
],
"parameters": {
"jsCode": "const input = $input.first().json.output;\nconst meetingData = $('extractMeetingData').first().json;\n\n// Parse the AI output to extract structured data\nconst sections = input.split('**');\nlet summary = '';\nlet actionItems = [];\nlet keyDates = [];\nlet sentiment = 'Neutral';\n\nfor (let i = 0; i < sections.length; i++) {\n if (sections[i].includes('Meeting Summary:')) {\n summary = sections[i + 1].trim();\n }\n if (sections[i].includes('Action Items:')) {\n const items = sections[i + 1].trim().split('\\n').filter(line => line.startsWith('-'));\n actionItems = items.map(item => {\n const match = item.match(/- (.+?) \\(Assigned to: (.+?), Due: (.+?)\\)/);\n if (match) {\n return {\n task: match[1],\n assignee: match[2],\n dueDate: match[3]\n };\n }\n return { task: item.replace('- ', ''), assignee: 'Unassigned', dueDate: 'No date' };\n });\n }\n if (sections[i].includes('Key Dates:')) {\n const dates = sections[i + 1].trim().split('\\n').filter(line => line.startsWith('-'));\n keyDates = dates.map(d => d.replace('- ', ''));\n }\n if (sections[i].includes('Sentiment:')) {\n sentiment = sections[i + 1].trim();\n }\n}\n\nreturn {\n json: {\n meetingTitle: meetingData.meetingTitle,\n meetingDate: meetingData.meetingStart,\n participants: meetingData.participants,\n summary: summary,\n actionItems: actionItems,\n keyDates: keyDates,\n sentiment: sentiment,\n rawOutput: input\n }\n};"
},
"typeVersion": 2
},
{
"id": "770cdc0c-c73e-461e-ace1-55ac5f95ad9f",
"name": "发布到 Slack",
"type": "n8n-nodes-base.slack",
"position": [
2912,
0
],
"webhookId": "857ed2ac-a71a-493e-9567-cb1d309f8450",
"parameters": {
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "CHANNEL_ID",
"cachedResultName": "general"
},
"otherOptions": {}
},
"typeVersion": 2.2
},
{
"id": "b64a05d1-8d9d-4f33-b568-a3de7bfd582c",
"name": "拆分行动项",
"type": "n8n-nodes-base.splitOut",
"position": [
3152,
176
],
"parameters": {
"options": {}
},
"typeVersion": 1,
"fieldToSplitOut": "actionItems"
},
{
"id": "c7b881cd-6e8c-4ec2-8ced-7175218f003a",
"name": "有行动项",
"type": "n8n-nodes-base.if",
"position": [
2912,
192
],
"parameters": {
"options": {},
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "cond1",
"operator": {
"type": "array",
"operation": "notEmpty"
},
"leftValue": "={{ $json.actionItems }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "99e2b222-dd3d-4583-ab9a-880a564c01fb",
"name": "创建 Notion 任务",
"type": "n8n-nodes-base.notion",
"position": [
3344,
176
],
"parameters": {
"title": "={{ $json.task }}",
"pageId": {
"__rl": true,
"mode": "url",
"value": ""
},
"options": {}
},
"credentials": {
"notionApi": {
"id": "2RokZhJ5BCVDXV6L",
"name": "Notion - eightkraft"
}
},
"typeVersion": 2
},
{
"id": "393d7712-467d-4886-9bb9-05cded6ac745",
"name": "便签概述",
"type": "n8n-nodes-base.stickyNote",
"position": [
-448,
-224
],
"parameters": {
"color": 6,
"width": 700,
"height": 636,
"content": "## 🎯 工作流概述"
},
"typeVersion": 1
},
{
"id": "c5203d08-2866-4955-a86e-01e22e6efba3",
"name": "便签步骤1",
"type": "n8n-nodes-base.stickyNote",
"position": [
272,
0
],
"parameters": {
"width": 596,
"height": 416,
"content": "## 📥 步骤 1:获取会议"
},
"typeVersion": 1
},
{
"id": "754ded78-9eca-477a-8268-7b2c170738f7",
"name": "便签步骤2",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
0
],
"parameters": {
"width": 600,
"height": 564,
"content": "## 🎥 步骤 2:获取录制文件"
},
"typeVersion": 1
},
{
"id": "67c148a4-e36c-4396-97f1-b15f1fde0834",
"name": "便签步骤3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
0
],
"parameters": {
"width": 756,
"height": 452,
"content": "## 🎤 步骤 3:转录"
},
"typeVersion": 1
},
{
"id": "0c7752e4-573b-4d69-a24f-a426d95ae608",
"name": "便签步骤4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2304,
0
],
"parameters": {
"width": 516,
"height": 548,
"content": "## 🤖 步骤 4:AI 分析"
},
"typeVersion": 1
},
{
"id": "83adb253-08e9-4533-8bca-5a8d16be3744",
"name": "便签步骤5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
-128
],
"parameters": {
"width": 692,
"height": 564,
"content": "## 📤 步骤 5:分发"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "dd8606ee-6368-46ef-a222-b74ec8d367e3",
"connections": {
"hasRecording": {
"main": [
[
{
"node": "downloadRecording",
"type": "main",
"index": 0
}
],
[
{
"node": "noRecordingError",
"type": "main",
"index": 0
}
]
]
},
"parseAIOutput": {
"main": [
[
{
"node": "postToSlack",
"type": "main",
"index": 0
},
{
"node": "hasActionItems",
"type": "main",
"index": 0
}
]
]
},
"hasActionItems": {
"main": [
[
{
"node": "splitActionItems",
"type": "main",
"index": 0
}
]
]
},
"claudeChatModel": {
"ai_languageModel": [
[
{
"node": "analyzeMeetingWithAI",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"formatTranscript": {
"main": [
[
{
"node": "analyzeMeetingWithAI",
"type": "main",
"index": 0
}
]
]
},
"splitActionItems": {
"main": [
[
{
"node": "createNotionTask",
"type": "main",
"index": 0
}
]
]
},
"downloadRecording": {
"main": [
[
{
"node": "uploadToAssemblyAI",
"type": "main",
"index": 0
}
]
]
},
"getRecentMeetings": {
"main": [
[
{
"node": "filterGoogleMeetEvents",
"type": "main",
"index": 0
}
]
]
},
"extractMeetingData": {
"main": [
[
{
"node": "findRecordingInDrive",
"type": "main",
"index": 0
}
]
]
},
"uploadToAssemblyAI": {
"main": [
[
{
"node": "requestTranscription",
"type": "main",
"index": 0
}
]
]
},
"analyzeMeetingWithAI": {
"main": [
[
{
"node": "parseAIOutput",
"type": "main",
"index": 0
}
]
]
},
"findRecordingInDrive": {
"main": [
[
{
"node": "hasRecording",
"type": "main",
"index": 0
}
]
]
},
"requestTranscription": {
"main": [
[
{
"node": "pollTranscriptionStatus",
"type": "main",
"index": 0
}
]
]
},
"filterGoogleMeetEvents": {
"main": [
[
{
"node": "extractMeetingData",
"type": "main",
"index": 0
}
]
]
},
"pollTranscriptionStatus": {
"main": [
[
{
"node": "formatTranscript",
"type": "main",
"index": 0
}
]
]
},
"whenClickingTestWorkflow": {
"main": [
[
{
"node": "getRecentMeetings",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 内容创作, 多模态 AI
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
内容生成器 v3
AI驱动博客自动化:使用GPT-4生成并发布SEO文章至WordPress和Twitter
If
Set
Code
+25
144 节点Jay Emp0
内容创作
实时 - 使用Gemini和Creatomate自动化病毒式AI视频制作与发布
使用Gemini和Creatomate自动化AI视频创作与多平台发布
Set
Code
Wait
+15
47 节点Intuz
内容创作
使用OpenAI、RunwayML和ElevenLabs自动化无脸短视频
使用OpenAI、RunwayML和ElevenLabs自动化无脸短视频:从脚本到社交媒体
Set
Code
Wait
+18
56 节点LeeWei
内容创作
WordPress博客自动化专业版(深度研究)v2.1市场
使用GPT-4o、Perplexity AI和多语言支持自动化SEO优化的博客创建
If
Set
Xml
+27
125 节点Daniel Ng
内容创作
内容聚合
使用Gemini AI从网站文章自动化社交媒体帖子发布到LinkedIn和X/Twitter
If
Set
Xml
+16
34 节点Vadim
内容创作
1. 播放列表详情设置机器人副本
使用 Suno、GPT-4、Runway 和 Creatomate 创建 AI 生成的 YouTube 音乐播放列表
If
Set
Code
+22
203 节点Joseph
内容创作
工作流信息
难度等级
高级
节点数量25
分类2
节点类型15
作者
Dominic
@dominicgsI turn chaotic manual processes into reliable automated systems, helping teams focus on strategy while complex workflows run flawlessly in the background.
外部链接
在 n8n.io 查看 →
分享此工作流