ChatGPT销售增长营收AI 评分 · 66/100AI 辅助编辑·未发现明显提示词注入风险n8n.io

n8n 自动会议纪要:AI 提取决策与行动项,分发至 Notion、Slack 和 Gmail

通过 webhook 接收会议转录文本 → GPT-4 结构化分析 → 多通道同步分发摘要、任务与提醒

有一点经验步骤流程提示词
给谁
需要自动化会议跟进的产品团队、远程公司、运营团队
你会得到
会议结束后 8-12 秒内自动生成结构化摘要、决策清单、带优先级与责任人的行动项,并同步到 Slack、Notion、Gmail、Google Calendar 和 Sheets
你需要
n8n · webhook · code · openai · slack · gmail · google-sheets

硬约束

前置条件:n8n 实例(自托管或云)、OpenAI API key、Slack workspace 与 bot token(chat:write)、Notion 集成 token 及两个数据库(Meeting Notes + Action Items)、Google Workspace(Gmail/Calendar/Sheets)OAuth2 凭证。预计搭建时间 25-35 分钟。费用:GPT-3.5 约 $0.0024/会议(作者估算)。

他们做了什么

模板作者 Daniel Shashko 在 n8n 上构建了一个工作流,通过 webhook 接收会议转录文本,使用 GPT-4 提取结构化信息,并通过代码节点计算优先级和完整度评分,最终分发到 Slack、Notion、Gmail、Google Calendar 和 Google Sheets。

效果如何

作者报告称整个流程从提交到全部分发完成约需 8-12 秒,可生成带唯一 ID 和优先级分数的行动项,并计算 0-100 的会议完整度评分。(来源:作者自述,未经验证)

值得知道

模板中多个关键字段为占位符:Slack 频道 ID、Notion pageId、Google Sheet ID(GOOGLE_SHEET_ID)、邮件域名(@company.com)均需手动替换。Notion 需预先创建两个数据库并配置字段。作者估算 GPT-3.5 成本约 $0.0024/会议,但实际费用取决于 token 用量和模型选择。搭建时间预计 25-35 分钟。本站未实际运行测试。

n8n 工作流模板

结构已检查 · 未实际运行

下载后在 n8n 选择“Import from File”,或复制 JSON 后粘贴到编辑器。先配置自己的账号,再用测试数据运行;模板默认未启用。

配置与测试清单

需要绑定的凭证

  • 导入后按各需鉴权节点绑定你自己的凭证;本附件不含原作者密钥。

需要替换的配置

  • 源模板来自 n8n 公开库 #10286(约 25 个节点)。导入后先保持未启用,核对触发器、表达式与外部 API 端点。
  • Sticky Note 中的说明仅供参考;按自己的账号、表结构或频道 ID 替换占位配置。

测试输入与预期结果

  • 在测试环境手动执行一次主路径,确认每个需凭证的节点已连接且无鉴权错误。
  • 用一条合成/脱敏样例数据跑通,核对输出字段与下游写入目标,再考虑生产启用。

模板处理说明

  • 已移除原作者凭证绑定、webhookId 与执行数据,工作流设为未启用;节点、连线与原文提示词保持原样。未在 n8n 中实际运行。
  • 未改业务逻辑;运行前请自行核对密钥、配额与隐私合规。

模板获取日期: 2026-10-24

步骤

  1. 配置 Webhook 触发器与输入源

    在 n8n 中添加 Webhook 节点,方法设为 POST,路径设为 meeting-transcript。将生成的 URL 配置为 Zoom、Google Meet、Otter.ai 等服务的 webhook 端点,或创建手动提交表单。支持 JSON、form data 等多种输入格式。

  2. 配置 OpenAI 分析节点

    添加 OpenAI 节点,选择 Chat 资源,配置 API 凭证。模型选 GPT-4 或 GPT-3.5-turbo,temperature 0.3,max tokens 1500。节点包含 system prompt 定义输出 JSON 结构,以及 user prompt 模板注入会议元数据与转录文本。

    运行提示词 · 来源原文。OpenAI 节点 system message 字段

    You are an executive assistant AI specializing in meeting analysis. Extract and structure information from meeting transcripts. Return ONLY valid JSON with these exact keys:
    
    {
      "executive_summary": "2-3 sentence overview",
      "key_decisions": ["decision 1", "decision 2"],
      "action_items": [
        {"task": "description", "owner": "name", "due_date": "YYYY-MM-DD or 'not specified'", "priority": "High/Medium/Low"},
      ],
      "discussion_topics": ["topic 1", "topic 2"],
      "open_questions": ["question 1"],
      "next_steps": ["step 1", "step 2"],
      "risks_identified": ["risk 1"],
      "follow_up_meeting_needed": true/false,
      "sentiment": "Positive/Neutral/Negative",
      "engagement_level": "High/Medium/Low"
    }

    运行提示词 · 来源原文。OpenAI 节点 user message 字段(n8n 表达式,运行时替换变量)

    Meeting: {{ $json.title }}
    Date: {{ $json.date }}
    Attendees: {{ $json.attendees.join(', ') }}
    Duration: {{ $json.duration }} minutes
    
    Transcript:
    {{ $json.transcript }}
  3. 配置智能合成与评分代码节点

    添加 Code 节点(Synthesize Intelligence),运行 JavaScript 计算行动项优先级分数(0-40 范围)和会议完整度评分(0-100)。代码解析 OpenAI 返回的 JSON,为每个行动项生成唯一 ID、排序,并标记未分配任务。可根据需要调整阈值。

    运行提示词 · 来源原文。Synthesize Intelligence Code 节点 jsCode 字段

    const meetingData = $('Parse Meeting Input').first().json;
    const aiResponse = JSON.parse($input.first().json.choices[0].message.content);
    
    // Calculate priority scores
    function calculatePriorityScore(actionItem) {
      const priorityScores = { 'High': 3, 'Medium': 2, 'Low': 1 };
      const hasOwner = actionItem.owner && actionItem.owner !== 'not specified' ? 1 : 0;
      const hasDueDate = actionItem.due_date && actionItem.due_date !== 'not specified' ? 1 : 0;
      return (priorityScores[actionItem.priority] || 2) * 10 + hasOwner * 5 + hasDueDate * 5;
    }
    
    // Enrich action items
    const enrichedActionItems = aiResponse.action_items.map((item, index) => ({
      id: `${Date.now()}-${index}`,
      task: item.task,
      owner: item.owner || 'Unassigned',
      due_date: item.due_date !== 'not specified' ? item.due_date : '',
      priority: item.priority,
      priority_score: calculatePriorityScore(item),
      status: 'Not Started',
      meeting_title: meetingData.title,
      meeting_date: meetingData.date,
      created_at: new Date().toISOString()
    }));
    
    // Sort by priority score
    enrichedActionItems.sort((a, b) => b.priority_score - a.priority_score);
    
    return {
      json: {
        // Meeting metadata
        meeting_id: `meeting-${Date.now()}`,
        meeting_title: meetingData.title,
        meeting_date: meetingData.date,
        attendees: meetingData.attendees,
        attendee_count: meetingData.attendee_count,
        duration: meetingData.duration,
        organizer: meetingData.organizer,
        meeting_url: meetingData.meeting_url,
        recording_url: meetingData.recording_url,
        
        // AI Analysis
        executive_summary: aiResponse.executive_summary,
        key_decisions: aiResponse.key_decisions,
        action_items: enrichedActionItems,
        action_item_count: enrichedActionItems.length,
        high_priority_count: enrichedActionItems.filter(a => a.priority === 'High').length,
        discussion_topics: aiResponse.discussion_topics,
        open_questions: aiResponse.open_questions,
        next_steps: aiResponse.next_steps,
        risks_identified: aiResponse.risks_identified,
        follow_up_meeting_needed: aiResponse.follow_up_meeting_needed,
        sentiment: aiResponse.sentiment,
        engagement_level: aiResponse.engagement_level,
        
        // Calculated flags
        requires_urgent_attention: enrichedActionItems.some(a => a.priority === 'High'),
        has_unassigned_tasks: enrichedActionItems.some(a => a.owner === 'Unassigned'),
        completeness_score: calculateCompletenessScore(enrichedActionItems, aiResponse)
      }
    };
    
    function calculateCompletenessScore(actionItems, analysis) {
      let score = 50; // Base score
      
      // Penalties
      if (actionItems.length === 0) score -= 20;
      if (actionItems.filter(a => a.owner === 'Unassigned').length > 0) score -= 10;
      if (actionItems.filter(a => !a.due_date).length > 0) score -= 10;
      if (analysis.open_questions.length > 3) score -= 10;
      
      // Bonuses
      if (analysis.key_decisions.length > 0) score += 15;
      if (analysis.next_steps.length > 0) score += 10;
      if (actionItems.every(a => a.owner !== 'Unassigned')) score += 15;
      if (actionItems.every(a => a.due_date)) score += 10;
      
      return Math.max(0, Math.min(100, score));
    }
  4. 配置 Slack 摘要推送

    添加 Slack 节点,认证方式选 OAuth2,创建 Slack app 并授予 chat:write 权限。将频道 ID 占位符替换为实际频道(如 #meeting-summaries)。消息模板使用 mrkdwn 格式,含会议摘要、决策、行动项和完整度评分。

    运行提示词 · 来源原文。Slack 节点 text 字段(mrkdwn 消息模板)

    📋 *Meeting Summary: {{ $json.meeting_title }}*
    
    🗓️ *Date:* {{ $json.meeting_date.split('T')[0] }} | *Duration:* {{ $json.duration }}min
    👥 *Attendees:* {{ $json.attendee_count }} people
    📊 *Completeness:* {{ $json.completeness_score }}%
    
    *Executive Summary:*
    {{ $json.executive_summary }}
    
    *✅ Key Decisions ({{ $json.key_decisions.length }}):*
    {{ $json.key_decisions.map((d, i) => `${i+1}. ${d}`).join('\n') }}
    
    *🎯 Action Items ({{ $json.action_item_count }}):*
    {{ $json.action_items.slice(0, 5).map(a => `• [${a.priority}] ${a.task} - *${a.owner}* ${a.due_date ? '(Due: ' + a.due_date + ')' : ''}`).join('\n') }}
    {{ $json.action_item_count > 5 ? `\n...and ${$json.action_item_count - 5} more` : '' }}
    
    {{ $json.has_unassigned_tasks ? '⚠️ *Warning:* Some tasks are unassigned' : '' }}
    {{ $json.recording_url ? '🎥 <' + $json.recording_url + '|Watch Recording>' : '' }}
  5. 配置 Notion 数据库同步

    在 Notion 中创建两个数据库:Meeting Notes(字段:title, date, attendees, summary, action items, completeness, recording URL)和 Action Items(字段:title, assigned to, due date, priority, status, meeting relation)。共享给集成,添加 Notion token。配置 Create Meeting Note 和 Create Task in Notion 节点,填入数据库 page ID。

  6. 配置邮件通知与日历提醒

    添加 Gmail 节点,配置 OAuth2 或 SMTP 凭证。邮件模板为 HTML,含优先级颜色标识和会议上下文。添加 Google Calendar 节点,启用 Calendar API,在行动项截止日期当天 9:00 创建提醒事件(可调整),将任务责任人添加为参与者。

    运行提示词 · 来源原文。Gmail 节点 message 字段(HTML 邮件模板)

    =<h2>New Action Item from Meeting</h2>
    
    <p><strong>Meeting:</strong> {{ $json.meeting_title }}<br>
    <strong>Date:</strong> {{ $json.meeting_date.split('T')[0] }}</p>
    
    <h3>Your Task:</h3>
    <p>{{ $json.task }}</p>
    
    <p><strong>Priority:</strong> <span style="color: {{ $json.priority === 'High' ? 'red' : $json.priority === 'Medium' ? 'orange' : 'green' }}">{{ $json.priority }}</span><br>
    <strong>Due Date:</strong> {{ $json.due_date || 'Not specified' }}</p>
    
    {{ $json.meeting_url ? '<p><a href="' + $json.meeting_url + '">View Meeting Details</a></p>' : '' }}
    
    <hr>
    <p style="font-size: 12px; color: #666;">This action item was automatically extracted from the meeting transcript using AI.</p>
  7. 配置分析追踪与测试验证

    创建 Google Sheet,列名:Meeting_ID, Title, Date, Attendees, Duration, Action_Items, High_Priority, Decisions, Completeness, Unassigned_Tasks, Follow_Up_Needed。配置 Google Sheets 节点追加数据。用 POST 发送样例转录文本测试,验证 Slack 消息、Notion 条目、邮件、日历事件和 Sheets 记录。

可复制提示词

搭建指导 · 本站建议版本。交给搭建助手,先确认输入和权限

这一段是提示词,页面不会在这里插入广告。

你是一个 n8n 工作流搭建助手。用户想要复现「AI 会议纪要自动分发」模板。请先确认用户已具备:n8n 实例、OpenAI API key、Slack bot token(chat:write)、Notion integration token、Google Workspace OAuth2 凭证。然后按步骤指导配置 webhook、OpenAI 节点、Slack/Notion/Gmail/Calendar/Sheets 节点,并提醒替换所有占位符(频道 ID、数据库 page ID、Sheet ID、邮件域名)。

搭建前请确认所有 API 凭证已就绪;Notion 需先创建两个数据库并共享给集成;测试时先用样例 JSON 触发

来源

AI meeting summary & action item tracker with Notion, Slack, and Gmail · tomax · n8n.io · 2025-10-29

留言与反馈

试过这个方法吗?分享效果、遇到的问题或改进建议。留言审核后公开,请勿填写敏感信息。

正在加载…

    相关用例