自动化会议摘要

中级

这是一个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)可能需要您自行付费。

工作流信息
难度等级
中级
节点数量14
分类2
节点类型9
难度说明

适合有一定经验的用户,包含 6-15 个节点的中等复杂度工作流

作者
Vladimir

Vladimir

@vilin1927

I 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 上查看 →

分享此工作流