到第6节了。这一节把前5节的知识全部串起来——数据采集、数据处理、报告生成、云端存储、消息推送。做一个完整的端到端自动化项目:日报自动生成系统。
1. 项目需求
目标
每天自动生成一份工作日报,推送到飞书群,并存档到乐享知识库。
输入
- OUCN 平台的任务数据(浏览器采集)
- 内部系统的审批数据(API 查询)
输出
- 一份 Markdown 格式的日报
- 飞书群推送
- 乐享知识库存档
流程
定时触发(每天 18:00)
↓
Skill 执行
├→ 浏览器采集 OUCN 数据(Skill)
├→ MCP 查询内部 API(MCP)
├→ AI 生成日报(Skill)
├→ 飞书推送( MCP)
└→ 乐享存档(MCP)
2. 数据采集层
浏览器采集(Skill + CDP)
async def collect_ouchn_data():
"""用浏览器采集 OUCN 数据"""
# 登录
await browser_login()
# 采集任务数据
tasks = []
for page in range(1, 10):
await browser.goto(f"/task/list?page={page}")
await browser.wait(".task-list")
items = await browser.query_all(".task-item")
for item in items:
tasks.append({
"title": await item.text(".title"),
"status": await item.text(".status"),
"count": await item.text(".count")
})
return tasks
API 查询(MCP 连接器)
async def get_approval_data():
"""用 MCP 查询审批数据"""
result = await mcp_call(
connector="内部系统", # 自定义 MCP Server
tool="get_approvals",
params={
"date": "today",
"status": "pending"
}
)
return result
3. 数据处理层
AI 生成报告
async def generate_daily_report(ouchn_data, approval_data):
"""用 AI 生成日报"""
prompt = f"""
根据以下数据生成今日工作日报:
## OUCN 任务
{format_tasks(ouchn_data)}
## 审批事项
{format_approvals(approval_data)}
要求:
1. 用 Markdown 格式
2. 包含完成统计和明细
3. 列出需要跟进的事项
4. 简洁明了
"""
report = await ai.generate(prompt)
return report
4. 输出层
飞书推送
async def notify_feishu(report):
"""飞书推送日报"""
# 先转成卡片格式
card = build_report_card(report)
await mcp_call(
connector="飞书",
tool="send_message",
params={
"chat_id": "daily-report",
"message_type": "interactive",
"content": card
}
)
乐享存档
async def archive_to_lexiang(report):
"""存档到乐享"""
# 先创建文档
doc = await mcp_call(
connector="乐享",
tool="create_doc",
params={
"title": f"日报 - {datetime.today().strftime('%Y-%m-%d')}",
"content": report,
"kbId": "daily-reports-kb"
}
)
return doc["docId"]
5. 定时调度
Automation 配置
automation:
name: "daily-report"
schedule: "每天 18:00"
timezone: "Asia/Shanghai"
skill: "daily-report-generator"
params:
recipients:
- "ouchn-daily"
- "zhangsan"
触发流程
18:00 → Automation 触发
↓
Skill 执行 daily-report-generator
↓
数据采集 → 处理 → 生成
↓
飞书推送 ← 乐享存档
6. 完整代码
Skill 定义
name: "daily-report-generator"
description: "每日自动生成工作日报"
steps:
- name: "collect_ouchn"
action: "browser_task"
params:
task: "采集 OUCN 今日任务"
- name: "query_approval"
action: "mcp_call"
params:
connector: "内部API"
tool: "get_today_approvals"
- name: "generate_report"
action: "ai_generate"
params:
prompt: "根据以下数据生成日报..."
- name: "notify_feishu"
action: "mcp_call"
params:
connector: "飞书"
tool: "send_message"
message: "{{ report }}"
- name: "archive_lexiang"
action: "mcp_call"
params:
connector: "乐享"
tool: "create_doc"
title: "日报 - {{ date }}"
content: "{{ report }}"
7. 运维监控
日志记录
async def run_daily_report():
start_time = time.time()
try:
# 各步骤日志
log("开始采集 OUCN 数据")
ouchn = await collect_ouchn_data()
log(f"OUCN 数据: {len(ouchn)} 条")
log("开始查询审批数据")
approval = await get_approval_data()
log(f"审批数据: {len(approval)} 条")
log("生成日报")
report = await generate_daily_report(ouchn, approval)
log("飞书推送")
await notify_feishu(report)
log("乐享存档")
await archive_to_lexiang(report)
log("日报生成完成")
except Exception as e:
log(f"日报生成失败: {e}")
# 告警
await notify_error(str(e))
finally:
duration = time.time() - start_time
log(f"总耗时: {duration:.1f}秒")
告警配置
async def notify_error(error_msg):
await mcp_call(
connector="飞书",
tool="send_message",
params={
"chat_id": "alert-group",
"content": f"❌ 日报生成失败:{error_msg}"
}
)
8. 扩展方向
这个系统可以扩展:
| 方向 | 说明 |
|---|---|
| 周报 | 加个周末汇总逻辑 |
| 月报 | 改为每月1号生成 |
| 多报表 | 加财务、运营等报表 |
| AI 分析 | 加入数据洞察和建议 |
小结
| 学会的 | 要点 |
|---|---|
| 端到端自动化 | 数据采集 → 处理 → 输出,全链路自动化 |
| 双通道采集 | 浏览器 + MCP API 互补 |
| AI 辅助 | 用 AI 生成结构化报告 |
| 多渠道输出 | 飞书推送 + 乐享存档 |
| 定时调度 | Automation 每天自动跑 |
| 运维监控 | 日志 + 错误告警 |
技术路线
第1节:理解 MCP ✅
↓
第2节:乐享连接器 ✅
↓
第3节:自定义 MCP Server ✅
↓
第4节:MCP + Skill 组合技 ✅
↓
第5节:消息通知全集成 ✅
↓
第6节(本文):综合实战 - 日报自动生成系统 ✅
📺 系列文章:
基础篇(Skill 开发)
- 第1-8节:8篇已完结
连接器篇(MCP 实战)
- 第1节:MCP 连接器入门
- 第2节:乐享知识库深度实战
- 第3节:自定义 MCP Server
- 第4节:MCP + Skill 组合技
- 第5节:消息通知全集成
- 第6节:综合实战 - 日报自动生成系统(本文)
MCP 实战系列完结 🎉