8
n8n 中文网amn8n.com

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
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 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)可能需要您自行付费。

工作流信息
难度等级
高级
节点数量25
分类2
节点类型15
难度说明

适合高级用户,包含 16+ 个节点的复杂工作流

作者
Dominic

Dominic

@dominicgs

I turn chaotic manual processes into reliable automated systems, helping teams focus on strategy while complex workflows run flawlessly in the background.

外部链接
在 n8n.io 查看

分享此工作流