ChatGPT理财降低账单AI 评分 · 待评分AI 辅助编辑·未发现明显提示词注入风险n8n.io

将会议笔记自动转为 Asana 任务与 Slack 摘要

表单提交会议文本 → GPT-4o 提取决策与行动项 → 创建 Asana 任务 → 聚合发送 Slack 摘要

有一点经验步骤流程提示词贴士
给谁
销售团队、项目经理、需要自动追踪会议行动项的人
你会得到
每次提交会议笔记后,自动在 Asana 创建带负责人和截止日的任务,并在 Slack 发送含可点击链接的摘要
你需要
n8n · asana · slack

硬约束

需要:n8n 实例;OpenAI API key;Asana 工作区 OAuth2 连接;Slack 工作区 OAuth2 连接。费用:作者估算每次分析约 $0.01–0.03(GPT-4o)。表单可共享给团队使用。

他们做了什么

该 n8n 模板由作者 kareem 发布,展示了一个工作流:通过表单收集会议笔记,调用 GPT-4o 提取决策、行动项、痛点、预算和下次会议日期,自动在 Asana 创建任务,并向 Slack 频道发送聚合摘要。模板包含完整的节点配置与连线。

效果如何

作者报告称,该工作流适用于销售团队和项目经理,可减少手动追踪会议行动项的工作量;GPT-4o 每次分析费用约 $0.01–0.03;表单可共享给团队;Slack 消息包含可点击的任务链接。(来源:作者报告)

值得知道

1. Asana 节点的 assignee 参数硬编码为 'me'(即 OAuth2 授权用户),如需分配给他人需自行修改。2. 需要有效的 Asana 和 Slack OAuth2 连接,配置权限范围取决于各工作区的安全策略。3. 费用估算 $0.01–0.03/次来自作者报告,未经验证,实际费用取决于笔记长度和 GPT-4o 定价。4. 模板未提供直接的 workflow JSON 下载链接,需通过 n8n 模板页面导入或手动复制 workflow.json。5. 本站未执行实测,复现前建议先用测试数据验证端到端流程。

n8n 工作流模板

结构已检查 · 未实际运行

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

配置与测试清单

需要绑定的凭证

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

需要替换的配置

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

测试输入与预期结果

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

模板处理说明

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

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

步骤

  1. 提交会议笔记

    在 n8n 中导入该模板后,工作流由一个表单触发器(Meeting Notes Form)启动。填写并提交以下字段:公司名称/项目名称、会议笔记全文(支持 AI 速记、手写笔记或共享文档粘贴)、Asana 项目 ID、Slack 频道名称。提交后工作流自动执行。

  2. AI 提取结构化信息

    表单数据进入 OpenAI 节点(AI Extract Data),模型使用 gpt-4o。system 提示词设定角色为提取会议结构化数据的助手;user 提示词要求从会议笔记中提取 key_decisions、action_items(含 assignee 与 due_date)、next_meeting_date、pain_points、budget_mentioned,并以指定 JSON 格式返回。

    运行提示词 · 来源原文。AI Extract Data 节点的 system 消息字段

    You are a helpful, intelligent personal assistant. You extract structured data from meeting notes.

    运行提示词 · 来源原文。AI Extract Data 节点的 user 消息字段(content);其中 {{ $json[...] }} 为 n8n 表达式,运行时替换为表单输入

    =Extract the following from these meeting notes:
    
    Meeting notes:
    {{ $json["Paste in your meeting notes here"] }}
    
    Return a JSON object with these exact keys:
    {
      "key_decisions": ["decision 1", "decision 2"],
      "action_items": [
        {
          "task": "task description",
          "assignee": "person name or 'Unassigned'",
          "due_date": "YYYY-MM-DD or null"
        }
      ],
      "next_meeting_date": "YYYY-MM-DD or null",
      "pain_points": ["pain point 1", "pain point 2"],
      "budget_mentioned": "dollar amount or null"
    }
    
    Rules:
    - If no action items found, return empty array
    - If no assignee mentioned, use "Unassigned"
    - If no due date mentioned, use null
    - Extract dates in YYYY-MM-DD format
  3. 创建 Asana 任务

    Structure Data 代码节点解析 GPT-4o 返回的 JSON,将每个 action_item 拆分为独立数据项,并携带完整会议上下文。随后 Create Asana Task 节点为每个行动项创建任务:任务标题取自 task 字段,负责人硬编码为 'me'(即 OAuth2 授权用户),截止日取自 due_date,备注包含 assignee、company_name 和完整 meeting_notes,项目归属由 Asana Project ID 指定。

    运行提示词 · 来源原文。Structure Data 节点的 JS Code 字段

    // Get the AI response
    const aiContent = $input.item.json.message.content;
    
    // Get form data
    const formTrigger = $('Meeting Notes Form').item.json;
    
    const formData = {
      company_name: formTrigger["Company Name / Project Name"],
      meeting_notes: formTrigger["Paste in your meeting notes here"],
      asana_project_id: formTrigger["Asana Project ID"],
      slack_channel: formTrigger["Slack Channel Name"] || "#general"
    };
    
    // Parse extracted data
    const extracted = {
      key_decisions: aiContent.key_decisions || [],
      action_items: aiContent.action_items || [],
      next_meeting_date: aiContent.next_meeting_date || null,
      pain_points: aiContent.pain_points || [],
      budget_mentioned: aiContent.budget_mentioned || null
    };
    
    // Create one item per action item with meeting context
    const outputItems = extracted.action_items.map(item => ({
      json: {
        task: item.task,
        assignee: item.assignee,
        due_date: item.due_date,
        company_name: formData.company_name,
        meeting_notes: formData.meeting_notes,
        asana_project_id: formData.asana_project_id,
        slack_channel: formData.slack_channel,
        key_decisions: extracted.key_decisions,
        pain_points: extracted.pain_points,
        next_meeting_date: extracted.next_meeting_date,
        budget_mentioned: extracted.budget_mentioned
      }
    }));
    
    return outputItems;
  4. 发送 Slack 摘要

    Combine Tasks 聚合节点将所有 Asana 任务输出合并为单一数据项。Format Slack Message 代码节点据此构建格式化 Slack 消息,包含关键决策、带可点击链接的行动项(含负责人与截止日)、痛点、预算与下次会议日期。Send to Slack 节点将消息发送到第 1 步指定的 Slack 频道。

    运行提示词 · 来源原文。Format Slack Message 节点的 JS Code 字段

    // Get aggregated tasks
    const aggregatedData = $input.item.json;
    const tasks = aggregatedData.Tasks || [];
    
    // Get meeting context
    const parseData = $('Structure Data').first().json;
    const company_name = parseData.company_name || "Unknown Company";
    const slack_channel = parseData.slack_channel || "#general";
    const key_decisions = parseData.key_decisions || [];
    const pain_points = parseData.pain_points || [];
    const next_meeting_date = parseData.next_meeting_date;
    const budget_mentioned = parseData.budget_mentioned;
    
    // Format action items
    const actionItems = tasks.map(task => ({
      name: task.name,
      assignee: task.assignee ? task.assignee.name.split('@')[0] : "Unassigned",
      due_date: task.due_on,
      url: task.permalink_url
    }));
    
    // Build Slack message
    let message = `*📝 Meeting Summary: ${company_name}*\n\n`;
    
    if (key_decisions.length > 0) {
      message += `*✅ Key Decisions:*\n`;
      key_decisions.forEach(d => message += `• ${d}\n`);
      message += `\n`;
    }
    
    if (actionItems.length > 0) {
      message += `*📋 Action Items Created (${actionItems.length}):*\n`;
      actionItems.forEach(item => {
        const dueDate = item.due_date ? ` - Due: ${item.due_date}` : "";
        message += `• <${item.url}|${item.name}> - ${item.assignee}${dueDate}\n`;
      });
      message += `\n`;
    }
    
    if (pain_points.length > 0) {
      message += `*⚠️ Pain Points:*\n`;
      pain_points.forEach(p => message += `• ${p}\n`);
      message += `\n`;
    }
    
    if (budget_mentioned) {
      message += `*💰 Budget: ${budget_mentioned}*\n\n`;
    }
    
    if (next_meeting_date) {
      message += `*📅 Next Meeting: ${next_meeting_date}*\n\n`;
    }
    
    const projectName = tasks[0]?.projects?.[0]?.name || "Asana";
    message += `_Project: ${projectName}_`;
    
    return [{ json: { channel: slack_channel, message: message } }];

可复制提示词

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

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

你是一个 n8n 模板导入助手。用户想要复现「会议笔记自动转 Asana 任务与 Slack 摘要」的工作流。请按以下顺序协助:
1. 确认用户已有 n8n 实例(云或自托管)及管理员权限;
2. 指导从 https://n8n.io/workflows/9875/ 导入模板;
3. 配置三个凭证:OpenAI API key、Asana OAuth2、Slack OAuth2;
4. 检查表单触发器字段与 AI 节点中的模型选择(gpt-4o);
5. 建议先用测试数据执行一次,验证 Asana 任务创建和 Slack 消息格式。

注意:Asana 节点的 assignee 当前硬编码为 'me',如需指定他人,需修改节点参数或在工作流中加入查找逻辑。

先配置凭证,再用样例会议笔记测试完整流程

来源

Transform meeting notes into Asana tasks & Slack summaries with GPT-4o · kareem · n8n.io · 2025-10-18

留言与反馈

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

正在加载…

    相关用例