| name | lark-daily-log |
| description | 对话式日报填写。当员工在飞书里说"填日报/今天干了/写日报/今日工作",或者直接发一段自然语言描述今天工作时触发。把自然语言解析成结构化工时条目,写入飞书多维表 worklogs,并回一张日报卡片。支持多项目、多任务、工时、进度、加班标记,也能从日历/邮件/妙记自动起草。 |
lark-daily-log — 对话式日报
把"今天干了啥"一句话变成结构化日报,写进飞书多维表。
何时触发
- 员工说:"填日报 / 写日报 / 今天干了 / 今日工作 / log"
- 员工直接发一段工作描述:"今天改了 3 小时 bug,开了 2 小时会"
- 员工说:"帮我起草今天日报"(自动模式,从日历/邮件拉数据)
- 定时提醒(18:30 cron)问:"今天的日报还没填,要不要现在写?"
依赖
lark-cli base:写多维表
lark-cli contact:匹配员工 open_id → member_id
lark-cli calendar(自动模式):拉今天日程
lark-cli mail(自动模式):拉今天已发邮件
lark-cli minutes(自动模式):拉今天参与的妙记
数据表
worklogs:核心明细表,每条 = 一项工作
projects:项目字典,按 name/code 匹配
tasks:任务字典,按 title/task_id 匹配
members:成员字典
daily_summary:自动聚合的当日汇总
对话流程
模式 A:自然语言直填(最常用)
员工发:
今天:CRM登录重构 4小时 进度80%;客户列表页改bug 2小时;
下午和产品评审 1小时;面试了一个前端 1小时
Skill 执行:
- 用 AI 把这段话拆成结构化条目:
[
{"project":"CRM-V2","task":"T001 登录模块重构","category":"开发",
"content":"登录模块重构,进度推进到 80%","hours":4,"progress":80},
{"project":"CRM-V2","task":"T002 客户列表页","category":"开发",
"content":"修复客户列表分页 bug","hours":2},
{"project":"MEETING","category":"会议",
"content":"和产品评审客户详情页设计稿","hours":1},
{"project":"DAILY","category":"面试",
"content":"前端候选人一面","hours":1}
]
- 校验:
- 项目名/code 能否在 projects 表匹配上(匹配不上就追问)
- 工时合计是否合理(>10 小时提示加班,<4 小时确认是否填漏)
- 进度变化是否合理(不能从 80 退到 60)
- 批量写入
worklogs 表(一条条目一行)
- 更新对应
tasks 表的 progress 和 logged_hours
- 自动生成/更新
daily_summary
- 回一张日报卡片到 IM:
📝 张三 2026-08-10 日报(共 8h)
✅ CRM-V2 / 登录重构 4h ████████░░ 80%
✅ CRM-V2 / 客户列表 bug 2h
🤝 会议 / 设计评审 1h
🎯 面试 / 前端一面 1h
💡 今日亮点:登录模块推进 80%
⚠️ 卡点:无
📌 明日计划:完成登录模块联调(T001 明天到期)
[确认提交] [修改] [补一条]
模式 B:自动起草
员工说:"帮我起草今天日报"
- 拉取:
calendar 今天的日程
mail 今天发出的邮件
minutes 今天我参与的妙记
tasks 今天到期/更新的任务
- AI 草稿(标注每个条目的证据来源):
📋 今日日报草稿(基于日历/邮件/妙记)
1. [calendar 10:00-11:30] CRM-V2 需求评审会 1.5h
2. [minutes] 登录重构技术方案讨论 1h
3. [mail] 给客户发了 V2 上线时间确认邮件 0.5h
4. [task T001] 登录模块开发 5h(推测)
合计 8h,对吗?回复"确认"提交,或告诉我改哪里
- 员工确认/修改后写入
模式 C:补填
员工说:"补填昨天的日报"
- 询问日期或用昨天
- 走模式 A/B 流程
source 字段标记为"补填"
模式 D:查今日状态
员工说:"我今天日报填了吗"
- 查 daily_summary,没填就提醒,填了就展示
解析规则
| 员工说的 | 解析为 |
|---|
| "CRM 4h" | project=CRM-V2, hours=4 |
| "登录重构 4小时 80%" | task=T001, hours=4, progress=80 |
| "开了个会" | category=会议, project=MEETING |
| "修了个 bug 加班到 9 点" | category=开发, is_overtime=true |
| "面试" | category=面试, project=DAILY |
| "休假" | category=休假, project=LEAVE, hours=8 |
| "学习" | category=学习, project=DAILY |
边界处理
- 项目识别不唯一:列出匹配项让员工选("你说的 CRM 是 CRM-V2 还是旧版 CRM?")
- 工时合计 > 12:提示"你今天工作超过 12 小时,确认吗?"
- 漏填:cron 18:30 检查没填的人,IM 私聊提醒
- 跨天:"今天凌晨 1 点还在修 bug"——让员工选择归属哪一天
- 重复提交:同一天再填时,问"追加 / 覆盖 / 取消"
常用 lark-cli 命令参考
lark-cli base record-create --app-token <APP_TOKEN> --table-id worklogs \
--data '{"fields":{"date":1723248000000,"member":["mem_xxx"],...}}'
lark-cli base record-batch-create --app-token <APP_TOKEN> --table-id worklogs \
--records '[{"fields":{...}},{"fields":{...}}]'
lark-cli base record-list --app-token <APP_TOKEN> --table-id projects \
--filter '{"conjunction":"or","conditions":[{"field_name":"code","operator":"is","value":["CRM-V2"]}]}'
lark-cli base record-update --app-token <APP_TOKEN> --table-id tasks \
--record-id recxxx --data '{"fields":{"progress":80}}'
lark-cli im +messages-send --chat-id <CHAT_ID> --msg-type interactive --content '<card json>'
不做什么
- 不做自动提交:所有 AI 草稿都要员工确认才写表
- 不做考勤判定:工时只是员工自报,不替代打卡系统
- 不做绩效打分:日报就是日报,不掺和评价
- 不替员工编造工作内容:自动模式只从真实日历/邮件/妙记里抽取,不会瞎编