Gemini工作计划AI 评分 · 77/100AI 辅助编辑·未发现明显提示词注入风险n8n.io

用 Gemini AI 自动总结会议笔记并推送到 Slack

定时触发 → 从 MeetGeek API 获取会议列表 → 拆分与格式化 → Gemini 生成摘要与行动项 → 重组为 Slack Block Kit → 发送频道通知

有一点经验步骤流程提示词贴士
给谁
需要自动每日会议简报的团队、项目经理、使用 Slack 的远程/混合团队
你会得到
每日自动获取会议数据,由 Gemini AI 生成摘要和行动项,以 Slack Block Kit 格式推送到指定频道
你需要
n8n · slack

硬约束

前置条件:n8n 实例;凭证类型 googlePalmApi(Gemini)、slackOAuth2Api(Slack)、httpBearerAuth(MeetGeek API)。来源使用 MeetGeek 作为示例笔记工具,可通过修改 HTTP Request 节点 URL 适配其他 API。触发器默认定时运行,可在 Schedule Trigger 节点调整。

他们做了什么

n8n 模板作者 sayonetech 创建了一个工作流模板,展示如何定时从会议笔记 API(以 MeetGeek 为例)获取数据,通过 Gemini AI 生成结构化摘要与行动项,最终以 Slack Block Kit 格式发送通知。模板包含 16 个节点,涵盖触发、HTTP 请求、数据拆分与格式化、AI 转换过滤、AI Agent 调用、代码重组、Slack 发送等完整链路。

效果如何

作者报告称该模板可实现每日自动会议简报推送,减少人工回顾长会议记录的时间。模板在 n8n.io 上获得 752 次浏览。(来源:author_report)

值得知道

MeetGeek API 仅为示例,可通过修改 HTTP Request 节点的 URL 适配其他笔记工具;触发周期可在 Schedule Trigger 节点调整;Slack 消息格式可通过修改 Code 节点自定义;AI Agent 的提示词支持调整摘要风格(长短、正式/ casual)。本站未实际导入运行该工作流,搭建时需自行测试 API 连通性与凭证有效性。

n8n 工作流模板

结构已检查 · 未实际运行

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

配置与测试清单

需要绑定的凭证

  • Google Gemini Chat Model 节点:绑定Google Gemini/PaLM API 凭证。
  • Send a message 节点:绑定Slack OAuth2 凭证。
  • summary 节点:绑定HTTP Bearer Auth 凭证。
  • Get meetings list 节点:绑定HTTP Bearer Auth 凭证。

需要替换的配置

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

测试输入与预期结果

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

模板处理说明

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

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

步骤

  1. 配置定时触发与会议列表 API

    在 n8n 工作流中,先添加 Schedule Trigger 节点并设定运行周期(如每日)。随后添加 HTTP Request 节点(工作流中名为 Get meetings list),配置 URL 为 https://api.meetgeek.ai/v1/meetings/,认证方式选择 predefinedCredentialType 并指定 httpBearerAuth,填入你的 MeetGeek API Bearer Token。

  2. 拆分会议数据并重命名字段

    使用 Split Out 节点将 meetings 数组拆分为独立条目。接着用 Edit Fields (Set) 节点将 meeting_id 重命名为 extract_meeting_id(值设为 {{ $json.meeting_id }}),以便下游节点引用。再用 Date & Time 节点将 timestamp_start_utc 格式化为 yyyy-MM-dd,并保留其他输入字段。

  3. 过滤近 7 天的会议

    添加 AI Transform 节点,使用以下自动生成的代码过滤日期:读取所有输入项,计算今天和 7 天前的日期,仅保留 formattedDate 在此区间内的项目。节点 instructions 为 "Filter the formatted Date in the past week upto today"。

    运行提示词 · 来源原文。AI Transform 节点的 instructions 字段

    Filter the formatted Date in the past week upto today

    运行提示词 · 来源原文。AI Transform 节点的 jsCode 字段(由 n8n 根据 instructions 自动生成)

    const items = $input.all();
    const today = new Date();
    const oneWeekAgo = new Date();
    oneWeekAgo.setDate(today.getDate() - 7);
    
    const filteredItems = items.filter((item) => {
      const itemDate = new Date(item?.json?.formattedDate);
      return itemDate >= oneWeekAgo && itemDate <= today;
    });
    
    return filteredItems;
  4. 用 Gemini AI Agent 生成摘要与行动项

    添加 AI Agent 节点,promptType 设为 define,并在 text 字段粘贴完整提示词。将 Google Gemini Chat Model 节点连接为 AI Agent 的语言模型。同时添加 HTTP Request Tool 节点(工作流中名为 summary),URL 设为 =https://api.meetgeek.ai/v1/meetings/{{ $json.extract_meeting_id }}/summary/,认证为 httpBearerAuth,作为 AI Agent 可调用的工具。

    运行提示词 · 来源原文。AI Agent 节点的 text 字段(promptType=define 时的完整提示词)

    =# 📝 Meeting Notes Summarizer with Action Items
    
    You are an AI assistant that **summarizes meeting notes** and **extracts clear action items**.
    
    ---
    
    ## 🔹 Input Data
    - **meeting_id**: `{{ $json.extract_meeting_id }}`
    - **title**: `{{ $json.title }}`
    
    ---
    
    ## 🔹 Task Instructions
    1. Call the **Meeting Note Summary API** using the **HTTP Request node**, passing `meeting_id` as a path parameter.  
    2. For each API response, generate a summary for the corresponding meeting.  
    3. Provide a **concise summary** in **3–5 bullet points**.  
    4. Extract a structured **Action Items** list with:
       - **Task description**  
       - **Responsible person** (if mentioned, otherwise `Unassigned`)  
       - **Deadline** (if mentioned, otherwise `No deadline`)  
    5. Ensure each meeting summary **includes the meeting title** (`{{ $json.title }}`).  
    6. If the meeting notes are **empty or missing**, still return the JSON format but use:
       - `"summary": ["No summary available"]`  
       - `"action_items": []`  
    
    ---
    
    ## 🔹 Output Format (JSON)
    ```json
    {
      "title": "{{ $json.title }}",
      "summary": [
        "point 1",
        "point 2",
        "point 3"
      ],
      "action_items": [
        {
          "task": "Task description",
          "owner": "Person name / Unassigned",
          "deadline": "Date / No deadline"
        }
      ]
    }
  5. 将输出重组为 Slack Block Kit

    添加 Code 节点(工作流中名为 Restructure to slack block),输入为 AI Agent 的输出数组。节点执行以下操作:遍历每条笔记,清理并解析 JSON,生成 Slack Block Kit blocks 数组,包含 header(会议标题)、section(摘要要点)、section(行动项含任务/负责人/截止日期)、divider。若解析失败则回退到默认文本。

    运行提示词 · 来源原文。Code 节点(Restructure to slack block)的 jsCode 字段

    // Input: array of note-taker outputs
    const notes = $input.all().map(item => item.json);
    
    // Slack blocks array
    let blocks = [];
    
    notes.forEach((note, index) => {
      // Clean and parse JSON inside code block
      const cleaned = note.output.replace(/```json|```/g, '').trim();
      let parsed;
    
      try {
        parsed = JSON.parse(cleaned);
      } catch (err) {
        parsed = { title: `Meeting ${index + 1}`, summary: ["Could not parse notes"], action_items: [] };
      }
    
      // Meeting header with title
      blocks.push({
        type: "header",
        text: {
          type: "plain_text",
          text: parsed.title || `Meeting ${index + 1}`
        }
      });
    
      // Summary section
      if (parsed.summary && parsed.summary.length > 0) {
        blocks.push({
          type: "section",
          text: {
            type: "mrkdwn",
            text: "*Summary:*\n" + parsed.summary.map(s => `• ${s}`).join("\n")
          }
        });
      }
    
      // Action items section
      if (parsed.action_items && parsed.action_items.length > 0) {
        blocks.push({
          type: "section",
          text: {
            type: "mrkdwn",
            text: "*Action Items:*"
          }
        });
    
        parsed.action_items.forEach(item => {
          blocks.push({
            type: "section",
            text: {
              type: "mrkdwn",
              text: `• *Task:* ${item.task || "N/A"}\n   *Owner:* ${item.owner || "Unassigned"}\n   *Deadline:* ${item.deadline || "No deadline"}`
            }
          });
        });
      } else {
        // If no action items
        blocks.push({
          type: "section",
          text: {
            type: "mrkdwn",
            text: "_No action items available_"
          }
        });
      }
    
      // Divider
      blocks.push({ type: "divider" });
    });
    
    return { blocks };
  6. 发送 Slack 频道通知

    添加 Slack 节点(工作流中名为 Send a message),messageType 设为 block,blocksUi 设为 ={{ '{ "blocks": ' + JSON.stringify($json.blocks) + ' }' }},channelId 选择目标频道(如 #meeting-notes),认证方式选择 oAuth2 并配置 Slack OAuth2 凭证。executeOnce 设为 true 可控制发送行为。【首次测试安全】首次测试前,先把 channelId 改为测试频道或私信自己,或临时断开 Slack「Send a message」节点,确认 Block Kit 输出无误后再接生产频道。

可复制提示词

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

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

你正在搭建一个 n8n 工作流:定时从 MeetGeek API 获取会议列表,用 Gemini AI 生成摘要与行动项,最后以 Slack Block Kit 格式推送到频道。请先确认你已准备好 n8n 实例、MeetGeek API Bearer Token、Google Gemini (googlePalmApi) 凭证、Slack OAuth2 凭证,以及目标 Slack 频道 ID。

搭建前请准备好三种凭证:MeetGeek API 的 Bearer Token、Google Gemini 的 googlePalmApi 凭证、Slack 的 OAuth2 凭证。

来源

Automate meeting notes summaries with Gemini AI & Slack notifications · sayonetech · n8n.io · 2025-09-01

留言与反馈

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

正在加载…

    相关用例