一、为什么企业需要这个自动化方案? 在日常工作中,你是否遇到过这些痛点
每天开完会,在线文档记了一份,本地文档还有一份,领导突然问上周会议定了什么,翻半天找不到。 写日报时,要重新回忆今天开了哪些会、谁说了什么、有哪些待办 团队成员信息不同步,A 同事不知道 B 同事会议上承诺的交付时间 传统解决方式是人工整理,但问题在于:
耗时:每天至少20-30分钟整理会议记录 遗漏:人的记忆有限,关键信息容易丢失 不及时:往往晚上才想起来整理,信息时效性差 本文将教你用 n8n + 日历 + 大模型,搭建一个全自动的每日工作摘要生成器,包含:
每日10 点自动触发 自动抓取当天所有会议安排 自动读取会议关联的飞书文档/腾讯文档 用魔塔 API 自动提取「待办事项」「关键决策」「风险点」 最后生成一份日报,自动写入指定的飞书文档 全程零人工介入,每天为你节省 30 分钟。
二、工作流程 整个自动化流程分为 6 个关键环节:
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL 定时触发(每天 10:00)
↓
配置参数(飞书凭证、魔塔 API Key)
↓
获取飞书访问令牌
↓
抓取飞书日历今日会议
↓
过滤并提取会议详情
↓
AI 分析每个会议内容(魔塔 API)
↓
汇总生成每日摘要
↓
发送到飞书群聊机器人
【完整工作流画布截图】
技术栈选择
三、实操流程:从零搭建自动化日报系统 准备工作 在开始之前,你需要:
1. 注册 n8n 账号(14天免费试用,足以运行演示方案)
2. 准备飞书开放平台账号
3. 准备魔塔社区账号
4. 创建一个飞书群聊并添加机器人
获取飞书 API 凭证
1. 打开 https://open.feishu.cn/,点击开发者后台,创建企业自建应用
2. 在「凭证与基础信息」中复制 App ID 和 App Secret,后面会用到
3. 在「权限管理」中开通以下权限:
calendar:calendar (获取日历)
calendar:calendar.event (获取日历事件)
calendar:calendar.event:readonly (以应用身份读取日历)
在「版本管理与发布」中创建版本并发布
创建飞书群聊机器人
1. 在飞书电脑端中,点击左上角「+」→「创建群组」
2. 命名为:「每日工作摘要」
3. 添加需要接收日报的团队成员
4. 点击右上角「设置」→「群机器人」→「添加」→「自定义机器人」
5. 机器人名称:「日报助手」,点击「添加」
复制 Webhook 地址,格式类似:
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
保存好这个地址, 稍后要用
获取魔塔社区 API Key
访问 https://www.modelscope.cn/ 点击右上角「登录/注册」 使用手机号或邮箱完成注册 登录后,点击右上角头像 → 「账号奢姿」,点击左侧「访问令牌」 点击「新建访问令牌」,名称填写:「n8n 日报生成」 点击「确定」复制 API Key 保存好这个 Key,稍后要用
第一步 启用 n8n AI 工作流构建器 1. 登录 n8n 后,点击左上角 + 创建新工作流
2. 等待片刻,页面刷新后即可看到 AI 构建器入口
第二步 用自然语言生成工作流骨架 工作流构建器只需一条自然语言提示即可生成整个流程。
我们只需粘贴一段简洁的目标描述,构建器就会自动选择节点、连接线路并预填充参数。
点击「Build with AI」按钮,输入以下英文提示词(AI 构建器对英文支持更好)
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL Build an n8n workflow with the following nodes and exact names:
Node 1: "Daily Trigger at 10 AM" - Schedule Trigger node that runs every day at 10:00 AM, timezone Asia/Shanghai
Node 2: "Workflow Configuration" - Set node with these assignments:
- feishuAppId (string)
- feishuAppSecret (string)
- feishuCalendarId (string, default "primary")
- motaApiKey (string, for ModelScope API)
- feishuWebhook (string, for sending to Feishu group chat bot)
Node 3: "Get Feishu Access Token" - HTTP Request node:
- Method: POST
- URL: https://open.feishu.cn/open-apis/auth/v3/tenant_access_ token/internal
- Headers: Content-Type: application/json
- Body (JSON): {"app_id": "expression to get feishuAppId from Workflow Configuration", "app_ secret": "expression to get feishuAppSecret from Workflow Configuration"}
Node 4: "Extract Access Token" - Set node to extract tenant_access_ token from response as "accessToken"
Node 5: "Get Today Calendar Events" - HTTP Request node:
- Method: POST
- URL: https://open.feishu.cn/open-apis/calendar/v4/calendars/{use feishuCalendarId}/events/search
- Headers: Authorization: Bearer {use accessToken}, Content-Type: application/json
- Body (JSON): time range from today 00:00:00 to 23:59:59 unix timestamp
Node 6: "Filter and Process Events" - Code node to:
- Filter out cancelled events
- Extract: title, start_time, end_ time, description, attendees
- Return array of meeting objects
Node 7: "Check If Events Exist" - IF node checking if item count > 0
Node 8 (True branch): "Analyze Each Meeting with AI" - HTTP Request node:
- Method: POST
- URL: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
- Headers: Authorization: Bearer {use motaApiKey}, Content-Type: application/json
- Body: Call qwen-plus model with system prompt asking to extract action items, decisions, and risks from meeting content
Node 9: "Extract AI Response" - Code node to extract message.content from AI response
Node 10: "Aggregate All Summaries" - Aggregate node to collect all meeting summaries into one item
Node 11: "Generate Final Daily Report" - HTTP Request node calling ModelScope API again to create comprehensive daily summary from all meeting analyses
Node 12: "Extract Final Summary" - Code node to extract final summary text
Node 13 (False branch from Node 7): "No Meetings Message" - Set node with text "今日无会议安排"
Node 14: "Send to Feishu Bot" - HTTP Request node:
- Method: POST
- URL: {use feishuWebhook}
- Headers: Content-Type: application/json
- Body: {"msg_type": "text", "content": {"text": "summary text from Node 12 or Node 13"}}
Connect all nodes in the correct flow with proper branching at the IF node.
注意:n8n 的 AI 构建器会消耗积分(免费版每月 20 个),每次生成或修改算 1 次,失败不扣分。
现在我们已经搭建好了一个基本的工作流,下面我们将修改流程中的关键节点。。
第三步 配置飞书日历节点 生成的工作流中,第一个实际执行节点需要接入飞书 API。
在 n8n 中配置飞书凭证
配置 Workflow Configuration :
1. 点击节点进入编辑模式
2. 填写以下参数:
feishuAppId:你的飞书 App ID
feishuAppSecret::你的飞书 App Secret
feishuCalendarId : primary(日历ID)
motaApiKey:魔塔 API Key
feishuWebhook:飞书机器人 Webhook
填后,点击右上角「Execute Step」测试,应该返回包含这 5 个参数的数据
第四步 修改 Get Feishu Access Token 节点 AI 生成的这个节点存在 JSON 格式错误,需要手动修改。
点击「Get Feishu Access Token」节点,找到「Body」→「JSON」字段,当前内容可能是
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL {
"app_id": {{ $('Workflow Configuration').first().json.feishuAppId }},
"app_ secret": {{ $('Workflow Configuration').first().json.feishuAppSecret }}
}
改成
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL {
"app_id": "={{ $('Workflow Configuration').first().json.feishuAppId }}",
"app_ secret": "={{ $('Workflow Configuration').first().json.feishuAppSecret }}"
}
第五步 修改 Get Today Calendar Events 节点 先修改 URL表达式
点击「Get Today Calendar Events」节点,修改 URL 为:
=https://open.feishu.cn/open-apis/calendar/v4/calendars/{{ $('Workflow Configuration').first().json.feishuCalendarId }}/events/search
接着修改 Headers
确保 Headers 包含两个参数:
Header 1
● Name: Authorization
● Value: =Bearer {{ $('Extract Access Token').first().json.accessToken }}
Header 2
● Name: Content-Type
● Value: application/json
修改 JSON Body
修改 Body 为
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL {
"start_time": "={{ Math.floor(new Date().setHours(0,0,0,0)/1000) }}",
"end_ time": "={{ Math.floor(new Date().setHours(23,59,59,999)/1000) }}"
}
第六步 修改 Filter and Process Events 节点 替换 JavaScript 代码
点击「Filter and Process Events」节点,将代码替换为
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL
const input = $input.all ();
const meetings = [];
for (const item of input) {
const events = item.json .data ?.items || [];
for (const event of events) {
if (event.status === 'cancelled' ) {
continue ;
}
const meeting = {
title : event.summary || '未命名会议' ,
startTime : event.start_time ?.date_time || event.start_time ?.date || '' ,
endTime : event.end_time ?.date_time || event.end_time ?.date || '' ,
description : event.description || '无会议描述' ,
attendees : (event.attendees || []).map (a => a.attendee_ability || a.user_id ).join (', ' ) || '无参会人信息'
};
meetings.push (meeting);
}
}
if (meetings.length === 0 ) {
return [];
}
return meetings.map (m => ({ json : m }));
第八步 修改 Analyze Each Meeting with AI 节点 配置魔塔API调用,点击「Analyze Each Meeting with AI」节点,确认配置
Method: POST
URL
https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
Headers:
Name: Authorization Value: =Bearer {{ $('Workflow Configuration').first().json.motaApiKey }} Name: Content-Type Value: application/json JSON Body:
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL {
"model": "qwen-plus",
"messages": [
{
"role": "system",
"content": "你是一个会议分析助手。请分析会议内容并提取:\n1. 待办事项(标注负责人)\n2. 关键决策\n3. 风险点\n\n用简洁的中文 Markdown 格式输出。"
},
{
"role": "user",
"content": "=会议:{{ $json.title }}\n时间:{{ $json.startTime }} 至 {{ $json.endTime }}\n参会人:{{ $json.attendees }}\n内容:{{ $json.description }}"
}
]
}
第九步 修改 Extract AI Response 节点 点击「Extract AI Response」节点,将代码替换为
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL
const aiResponse = $input.first ().json ;
return {
json : {
meetingTitle : $('Filter and Process Events' ).item .json .title ,
aiSummary : aiResponse.choices [0 ].message .content
}
};
第十步 配置 Generate Final Daily Report 节点 配置最终摘要生成,点击「Generate Final Daily Report」节点,配置与第九步相同的 URL 和 Headers
JSON Body:
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL {
"model" : "qwen-plus" ,
"messages" : [
{
"role" : "system" ,
"content" : "你是一个工作日报生成助手。请基于所有会议的分析结果,生成一份结构化的每日工作摘要,包括:\n\n# 今日工作摘要\n\n## 会议概览\n[列出所有会议]\n\n## 待办事项汇总\n[按优先级分类]\n\n## 关键决策\n[重要决定]\n\n## 风险提示\n[需要关注的问题]\n\n用清晰的中文 Markdown 格式输出。"
},
{
"role" : "user" ,
"content" : "=请基于以下会议分析生成日报:\n\n{{ $json.aggregatedData }}"
}
]
}
第十一步 修改 Extract Final Summary 节点 点击「Extract Final Summary」节点,将代码替换为
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL
const response = $input.first ().json ;
const summary = response.choices [0 ].message .content ;
const now = new Date ();
const dateStr = now.toLocaleDateString ('zh-CN' , {
year : 'numeric' ,
month : '2-digit' ,
day : '2-digit' ,
weekday : 'long'
});
return {
json : {
dailySummary : `生成时间: ${dateStr} ${now.toLocaleTimeString('zh-CN')}\n\n${summary}`
}
};
第十二步 配置 Send to Feishu Bot 节点 配置飞书机器人发送,点击「Send to Feishu Bot」节点,确认配置
Method: POST
URL
={{ $('Workflow Configuration').first().json.feishuWebhook }}
Headers:
Name: Content-Type
Value: application/json
JSON Body
Plain Bash C++ C# CSS Diff HTML/XML Java Javascript Markdown PHP Python Ruby SQL {
"msg_type": "text",
"content": {
"text": "={{ $('Extract Final Summary').first().json.dailySummary || $('No Meetings Message').first().json.message || '生成日报失败' }}"
}
}
第十二步 测试与激活 按照从左到右的顺序,逐个点击「Execute Step」测试,有问题就逐个调试,最后点击工作流右上角的「Execute Workflow」察所有节点的执行状态,打开飞书群聊,查看是否收到日报消息。
测试成功后, 点击工作流右上角的「Inactive」开关,切换为「Active」,系统提示「Workflow activated successfully」就表示完成激活。
激活后,每天早上 10 点会自动执行,无需人工干预。