8
n8n 中文网amn8n.com

Google Meet 自动化

中级

这是一个Project Management, AI Summarization领域的自动化工作流,包含 14 个节点。主要使用 If, Set, Gmail, Merge, Webhook 等节点。 使用 Gemini 和 Google Workspace 将会议记录转换为行动项

前置要求
  • Google 账号和 Gmail API 凭证
  • HTTP Webhook 端点(n8n 会自动生成)
  • Google Gemini API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
  "id": "5N46vB5yT6jTsXHH",
  "meta": {
    "instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
    "templateCredsSetupCompleted": true
  },
  "name": "Google Meet 自动化",
  "tags": [],
  "nodes": [
    {
      "id": "webhook-trigger",
      "name": "Webhook触发器",
      "type": "n8n-nodes-base.webhook",
      "position": [
        112,
        320
      ],
      "webhookId": "b339e631-7267-4f88-bea4-16c0f35f7645",
      "parameters": {
        "path": "google-meet-automation",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "error-response",
      "name": "错误响应",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        560,
        416
      ],
      "parameters": {
        "options": {},
        "respondWith": "json",
        "responseBody": "={\n  \"status\": \"error\",\n  \"message\": \"Missing required fields: meetingNotes and meetingTitle\",\n  \"timestamp\": \"{{ $now.toISO() }}\"\n}"
      },
      "typeVersion": 1.4
    },
    {
      "id": "extract-data",
      "name": "提取会议数据",
      "type": "n8n-nodes-base.set",
      "position": [
        560,
        224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "meeting-notes",
              "name": "meetingNotes",
              "type": "string",
              "value": "={{ $json.body.meetingNotes }}"
            },
            {
              "id": "meeting-title",
              "name": "meetingTitle",
              "type": "string",
              "value": "={{ $json.body.meetingTitle }}"
            },
            {
              "id": "meeting-date",
              "name": "meetingDate",
              "type": "string",
              "value": "={{ $json.body.meetingDate || $now.toISO() }}"
            },
            {
              "id": "attendees",
              "name": "attendees",
              "type": "array",
              "value": "={{ $json.body.attendees || [] }}"
            },
            {
              "id": "meeting-duration",
              "name": "duration",
              "type": "string",
              "value": "={{ $json.body.duration || '60 minutes' }}"
            }
          ],
          "assignments[0]": {
            "value": "={{ $json.meetingNotes }}"
          },
          "assignments[1]": {
            "value": "={{ $json.meetingTitle }}"
          },
          "assignments[2]": {
            "value": "={{ $json.meetingDate || $now.toISO() }}"
          },
          "assignments[3]": {
            "value": "={{ $json.attendees || [] }}"
          },
          "assignments[4]": {
            "value": "={{ $json.duration || '60 minutes' }}"
          }
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "gemini-model",
      "name": "Google Gemini AI",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        816,
        448
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "id": "7ZkDDnjsiPRXf6eh",
          "name": "project gcp: n8n-khmuhtadin"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ai-processor",
      "name": "AI 会议处理器",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        784,
        224
      ],
      "parameters": {
        "text": "=You are an AI assistant that analyzes Google Meet notes to extract actionable insights.\n\nMEETING DETAILS:\nTitle: {{ $json.meetingTitle }}\nDate: {{ $json.meetingDate }}\nDuration: {{ $json.duration }}\nAttendees: {{ $json.attendees.join(', ') }}\n\nMEETING NOTES:\n{{ $json.meetingNotes }}\n\n=== INSTRUCTIONS ===\nPlease analyze the meeting notes and extract the following information in JSON format:\n\n1. ACTION_ITEMS: Array of tasks with assignee, description, due_date, and priority\n2. KEY_DECISIONS: Array of important decisions made\n3. SUMMARY: Brief meeting summary (2-3 sentences)\n4. FOLLOW_UP_EMAILS: Array of follow-up emails to send with recipient, subject, and content\n5. NEXT_MEETING: Information about next meeting if mentioned\n6. IMPORTANT_DATES: Any dates or deadlines mentioned\n\nReturn ONLY valid JSON with this structure:\n{\n  \"action_items\": [\n    {\n      \"assignee\": \"person@email.com\",\n      \"description\": \"Task description\",\n      \"due_date\": \"2025-01-15\",\n      \"priority\": \"high|medium|low\"\n    }\n  ],\n  \"key_decisions\": [\"Decision 1\", \"Decision 2\"],\n  \"summary\": \"Meeting summary here\",\n  \"follow_up_emails\": [\n    {\n      \"recipient\": \"person@email.com\",\n      \"subject\": \"Email subject\",\n      \"content\": \"Email content\"\n    }\n  ],\n  \"next_meeting\": {\n    \"date\": \"2025-01-20\",\n    \"time\": \"10:00 AM\",\n    \"topic\": \"Follow-up discussion\"\n  },\n  \"important_dates\": [\n    {\n      \"date\": \"2025-01-15\",\n      \"description\": \"Project deadline\"\n    }\n  ]\n}",
        "batching": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "split-action-items",
      "name": "拆分行动项",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1184,
        32
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "action_items"
      },
      "typeVersion": 1
    },
    {
      "id": "create-tasks",
      "name": "创建 Google 任务",
      "type": "n8n-nodes-base.googleTasks",
      "position": [
        1408,
        32
      ],
      "parameters": {
        "task": "My Tasks",
        "title": "={{ $json.description }}",
        "additionalFields": {
          "notes": "=Meeting: {{ $('Extract Meeting Data').item.json.meetingTitle }}\nAssignee: {{ $json.assignee }}\nPriority: {{ $json.priority }}\nDue Date: {{ $json.due_date }}\n\nCreated from Google Meet automation on {{ $now.toFormat('yyyy-MM-dd HH:mm') }}"
        }
      },
      "credentials": {
        "googleTasksOAuth2Api": {
          "id": "Af2b9A5rnrReAwkO",
          "name": "GCP: n8n-khmuhtadin"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "split-emails",
      "name": "拆分跟进邮件",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1184,
        224
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "follow_up_emails"
      },
      "typeVersion": 1
    },
    {
      "id": "send-emails",
      "name": "发送跟进邮件",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1408,
        224
      ],
      "webhookId": "f752a312-37ec-4456-8015-1b5e2a5a5138",
      "parameters": {
        "sendTo": "={{ $json.recipient }}",
        "message": "=<div style=\"font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;\">\n  <h2 style=\"color: #2563eb;\">{{ $json.subject }}</h2>\n  \n  <div style=\"background: #f8fafc; padding: 20px; border-radius: 8px; margin: 20px 0;\">\n    <h3 style=\"margin-top: 0; color: #374151;\">Meeting Summary</h3>\n    <p><strong>Meeting:</strong> {{ $('Extract Meeting Data').item.json.meetingTitle }}</p>\n    <p><strong>Date:</strong> {{ $('Extract Meeting Data').item.json.meetingDate }}</p>\n    <p><strong>Duration:</strong> {{ $('Extract Meeting Data').item.json.duration }}</p>\n  </div>\n  \n  <div style=\"margin: 20px 0;\">\n    {{ $json.content }}\n  </div>\n  \n  <hr style=\"border: none; border-top: 1px solid #e5e7eb; margin: 30px 0;\">\n  \n  <p style=\"color: #6b7280; font-size: 14px;\">\n    This email was automatically generated from your Google Meet notes.<br>\n    Generated on {{ $now.toFormat('MMMM dd, yyyy \\at HH:mm') }}\n  </p>\n</div>",
        "options": {},
        "subject": "={{ $json.subject }}"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "8p11S7abjY8KddB9",
          "name": "contactmuhtadin"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "create-summary-doc",
      "name": "创建会议摘要文档",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        1408,
        416
      ],
      "parameters": {
        "title": "=('Meeting Summary - ' + $('Extract Meeting Data').item.json.meetingTitle + ' - ' + $now.toFormat('yyyy-MM-dd'))",
        "folderId": "default"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "id": "rlvvfYKhxvwjpMC2",
          "name": "GCP: n8n-khmuhtadin"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "final-response",
      "name": "成功响应",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1856,
        128
      ],
      "parameters": {
        "options": {},
        "respondWith": "allIncomingItems"
      },
      "typeVersion": 1.4
    },
    {
      "id": "cedd4268-e3b3-4b1c-bfe3-02c7f099cb83",
      "name": "如果",
      "type": "n8n-nodes-base.if",
      "position": [
        336,
        320
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0df05311-3c5d-4f7c-915e-f8e66171d6cc",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.body.meetingTitle }}",
              "rightValue": ""
            },
            {
              "id": "d6ccea8b-afd0-4955-8b37-2d44e3ea3648",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.body.meetingNotes }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ede05363-8a89-4706-a74b-63e8d39886d4",
      "name": "结构化输出解析器",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        944,
        448
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"action_items\": [\n    {\n      \"assignee\": \"person@email.com\",\n      \"description\": \"Task description\",\n      \"due_date\": \"2025-01-15\",\n      \"priority\": \"high|medium|low\"\n    }\n  ],\n  \"key_decisions\": [\"Decision 1\", \"Decision 2\"],\n  \"summary\": \"Meeting summary here\",\n  \"follow_up_emails\": [\n    {\n      \"recipient\": \"person@email.com\",\n      \"subject\": \"Email subject\",\n      \"content\": \"Email content\"\n    }\n  ],\n  \"next_meeting\": {\n    \"date\": \"2025-01-20\",\n    \"time\": \"10:00 AM\",\n    \"topic\": \"Follow-up discussion\"\n  },\n  \"important_dates\": [\n    {\n      \"date\": \"2025-01-15\",\n      \"description\": \"Project deadline\"\n    }\n  ]\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "11bcb195-3a58-4cd1-8a0d-e69cc954847a",
      "name": "合并",
      "type": "n8n-nodes-base.merge",
      "position": [
        1632,
        112
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "adcb521c-7b87-4c7d-b443-94ffb124ee23",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Extract Meeting Data",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Error Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Success Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini AI": {
      "ai_languageModel": [
        [
          {
            "node": "AI Meeting Processor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Split Action Items": {
      "main": [
        [
          {
            "node": "Create Google Tasks",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Google Tasks": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Meeting Processor": {
      "main": [
        [
          {
            "node": "Split Action Items",
            "type": "main",
            "index": 0
          },
          {
            "node": "Split Follow-up Emails",
            "type": "main",
            "index": 0
          },
          {
            "node": "Create Meeting Summary Document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Meeting Data": {
      "main": [
        [
          {
            "node": "AI Meeting Processor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Follow-up Emails": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Split Follow-up Emails": {
      "main": [
        [
          {
            "node": "Send Follow-up Emails",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Meeting Processor",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Create Meeting Summary Document": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    }
  }
}
常见问题

如何使用这个工作流?

复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。

这个工作流适合什么场景?

中级 - 项目管理, AI 摘要总结

需要付费吗?

本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。

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

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

外部链接
在 n8n.io 查看

分享此工作流