下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/hynn--weekly-meeting-todo-tracker.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @hynn/weekly-meeting-todo-tracker。把钉钉 AI 听记里的周会待办转成结构化在线 Excel 跟踪表,再按完成状态严格筛选、按责任人汇总生成单聊/群聊提醒消息,预览确认后发送并核对送达。当用户提到「周会待办」「待办跟踪表」「周会事项跟踪」「听记待办转表格」「待办拆分」「待办督办提醒」「已完成事项确认」「逾期通告」「群聊提醒」时使用。不用于:只建钉钉个人待办(走 dingtalk-todo)、AI 多维表场景(本技能仅操作在线 Excel)。
阅读全文 (展开查看完整说明)
概述
把「开完会就散」的口头待办固化成一张有状态、有责任人、有截止日期、可自动督办的在线表:听记 → 表格 → 按状态筛选 → 逐人提醒 → 送达核验。核心难点不在写表,而在筛选口径严格与消息在钉钉端渲染正确两件事,本技能把两者都沉淀成规则。
适用与不适用
- 适用:周会/例会后的待办入表与状态维护;按完成状态与截止窗口催办(单聊逐人、群聊 @ 多人);逾期通告;已闭环事项的核对与回执。
- 不适用:只创建个人钉钉待办 →
dingtalk-todo;数据在 AI 多维表而非在线 Excel →dingtalk-aitable(本技能仅操作在线 Excel);只看纪要不落地表格 →dingtalk-minutes;纯消息批量发送(无表格逻辑)→dingtalk-message-sender。
前置配置(首次使用填写)
真实坐标一律不写进正文,登记在本地文件(模板见 [references/coordinates.md](references/coordinates.md)):
| 占位符 | 含义 | 获取方式 |
|---|---|---|
<TODO_DOC_NODE_ID> | 跟踪表文档 nodeId | 打开表复制地址栏节点段,或 dws drive search --query "<表名>" |
<TODO_SHEET_ID> | 工作表 sheetId | 同上,链接中 sheetId= 参数 |
<TODO_DOC_URL> | 贴进提醒消息末尾的表链接 | 与上两项同源 |
<CID_WEEKLY_GROUP> | 周会/团队群 openConversationId | dws chat search --query "<群名>" |
<SELF_USER_ID> | 本人 userId(群发前的测试收件人) | dws profile list |
<ROBOT_CODE> | 完成通知机器人(可选) | dws chat bot list |
<MEMBER_MAP> | 责任人姓名 → openDingTalkId 的本地私有映射文件 | 首次按姓名查询后缓存,见下 |
- 责任人标识不写进技能:首次用
dws contact user search --query "<姓名>" --format json查 openDingTalkId,落到<MEMBER_MAP>本地文件复用;人员变动时只更新本地文件。 - 离职/转岗人员名下事项一律不发提醒,并在汇总里单独说明(口径见「筛选规则」)。
表结构与写入规范
- 列布局(示例,实际以表为准):A 序号 / B 责任人 / C 待办事项 / D 周次 / E 创建日期 / F 截止日期 / G 完成状态 / H 处理结果。
- 先探表再动手:表结构会演变。每次先
dws sheet info --jq ".nonEmptyRange"确认范围,读取后核对表头,不假设列布局。 - B 列不合并单元格,每行显式填写责任人;新事项按序追加到表末尾,周次填当前周,逐行不合并。
- 写入后必回读:
range read校验序号/责任人/事项/状态与提交值一致,才算写入成功。 - 创建日期口径:来源听记名含日期则用听记对应日期,否则用实际录入当日。
- 待办内容必须与听记原文一致,禁止概括精简;一条待办含多条子任务时拆成多行。
- 循环类固定事项(每月/每两周等)用独立状态标记,不纳入例会催办与逾期通告:其 F 列写循环口径文字而非具体日期,因此既不等于「未完成」也不等于「已逾期」;到期提醒交给独立定时任务,别在例会提醒里重复发。
- H 列(处理结果)按表内约定设为只读,成员闭环走沟通或待办回执,不由本技能代填。
筛选规则(决定催办是否精准)
- 严格按"完成状态"字段字面值筛选:催办只纳入状态恰为「未完成」或「已逾期」的事项;「逾期新开」「延期处理」「逾期完成」「逾期关闭」「已转办」「仅提醒」等一律不纳入。
- 用户当次指定的状态口径优先,口径外的状态主动询问是否纳入,不自行扩展。
- 用户指定截止窗口(如"只提醒下周六前到期")时叠加
F ≤ 截止日;无截止日期的事项不纳入,并在汇总里单独说明原因。 - 逾期通告仅纳入表中明确标记为「已逾期」的事项,不得凭"截止日期 < 今天"自行推断逾期。
- 逾期天数按当天日期计算,用于 🔴 标注。
- 发送前必须重新读表:用户常在预览确认期间实时改表,用旧快照发送会误催已完成的人。
截止窗口计算("下周六"这类相对口径)
- 先
date +"%Y-%m-%d %A"取当天日期与星期,禁止凭记忆假设日期。 - "下周六"统一指下一周的周六(= 本周周日 + 6 天)。
- 易错点:今天本身就是周四/周五/周六时,"本周六"已经很近,但按口径仍取下一周的周六。
- 算出截止日后叠加
F ≤ 截止日筛选;消息抬头必须写具体日期,例如「在下周六(3 月 15 日)前到期且未完成/已逾期」。
执行通道规则(均为实测结论)
- dws 必须由 Bash 直接调用(由宿主执行才会产生真实结果);Python subprocess、管道、重定向只会拿到占位符。
- 一次调用一条 dws 命令;禁止 bash 循环或
&&串接多条(易报 framing 错误);需要提速时用并行工具调用分批,每批 2-4 条。 - 偶报
identity changed during token resolution:加--verbose原样重试一次即可。 - Windows 控制台 GBK 会让 Python 打印中文乱码:解析结果写 UTF-8 文件,再用 Read 工具读取。
- dws 大输出会自动落盘:按提示路径读取或用
--jq投影压缩,不要对 dws 输出接 shell 管道。
提醒消息规范
- 用「1. 」空格编号列表,逐条分行;禁用「1、」顿号编号(不换行)。
- 截止日期
**加粗**;段落之间双换行(钉钉单换行会被合并成空格)。 - 逾期强调:钉钉消息 不支持
<font color>标红(red / #FF0000 均无效),统一用🔴 + 加粗,如🔴(截止 **2026/3/2**,已逾期 3 天);当天到期写(截止 **2026/3/5**,今日到期)。 - 延期/转办的实质备注保留在对应事项括号内;无实质信息的客套备注删掉。
- 表链接放消息末尾单独一行;结尾固定语:
若事项实际已完成,请提交结果/完成钉钉待办。 - 措辞只客观描述字段当前状态(如「未填写」「未完成」),不出现主观判断词(遗漏、误删、不上心等),也不写客套语与退路式表述。
听记录入工作流(新增待办)
dws minutes search --query "<会议关键词>" --format json定位听记dws minutes get todos --minutes-id "<id>" --format json取待办清单- 追加写入
dws sheet append(按序追加表末尾、B 列显式填责任人、周次填当前周);中文批量写入改用csv-put --csv @data.csv规避编码问题 range read回读验证;有偏差立即修表而不是补发消息
提醒发送流程
- 读表 → 按「筛选规则 + 截止窗口」算出应催办清单(按责任人分组)
- 构造消息:单聊逐人版、群聊 @ 合并版,逾期通告用变体抬头
- 先单聊发本人(
<SELF_USER_ID>)测格式,确认换行与编号在钉钉端正常 - 回复正文完整展示每条消息原文 → AskUserQuestion 确认 → 正式发送
- 逐条
query-send-status确认SUCCESS;失败的单独补发,已成功的绝不重发 - 如配置了
<ROBOT_CODE>,发一条任务完成 DING(可选,前缀按团队约定)
单聊提醒模板
【周会待办提醒】根据《<跟踪表名>》,你有 N 条未完成/已逾期事项,请抓紧推进:
1. {事项完整描述}(截止 **2026/3/10**)
2. {事项}🔴(截止 **2026/3/2**,已逾期 3 天)
若事项实际已完成,请提交结果/完成钉钉待办
跟踪表:<TODO_DOC_URL>单聊发送必须用 --open-dingtalk-id(部分场景 --user 会报 receiverUid 不能为空):
dws chat message send --open-dingtalk-id <openDingTalkId> --uuid "todo-p2p-YYYYMMDD-<pinyin>" --text "<正文>" --format json -y群聊提醒模板
抬头交代口径(截至日期 + 条数 + 截止范围)→ 按责任人分段 <@openDingTalkId>(N 条) + 编号列表 → 结尾固定语 + 表链接。
dws chat message send --group "<CID_WEEKLY_GROUP>" --title "周会待办提醒" --uuid "weekly-todo-reminder-YYYYMMDD-001" --at-open-dingtalk-ids "<id1>,<id2>" --text "<正文含 <@id> 占位符>" --format json -y--at-open-dingtalk-ids 列出的每个 id,正文必须有对应的 <@id> 占位符,一一对应;无关人员不 @。
逾期通告变体
抬头改为「逾期通告」口径,只列表中状态恰为「已逾期」的事项;易混淆情形(如"延期提交但未逾期")在末尾加一行「注:…」说明口径。发送命令与群提醒相同,仅改 --title 与 --uuid(overdue-notice-YYYYMMDD-001),同样先单聊测格式再发群。
Pitfalls(实测沉淀)
- 筛选口径一放宽就误催:把「逾期新开」「延期处理」当逾期一起催,会打扰已完成或已获批延期的同事;严格按状态字面值,口径外先问用户。
- 用旧快照发送:预览确认后、正式发送前的这段时间里用户可能已在表内改状态,必须重读表再发。
- 凭日期推断逾期:表内没标「已逾期」就不要自己算逾期并发通告,会出现"表里没这条"的争执。
<font color>标红无效:钉钉端会原样吐出标签,改用 🔴 + 加粗;列表项内的<br>同样无效。- 中文批量写入乱码:直接传中文长文本易被编码吃掉,改走
csv-put --csv @文件(@路径用正斜杠)。 - 把 dws 的 pending 当失败:
message send返回 pending +openTaskId是正常异步提交,必须查query-send-status再判定;误判会导致二次发送。 - @ 关系漏配:只传
--at-open-dingtalk-ids而正文没有<@id>占位符,会出现"消息发了但没人被 @";已发消息可用dws chat message edit --msg-id补 @,不必重发。 - 循环固定事项混进例会催办:这类行没有具体截止日期,混入筛选只会产出"无截止日期"的空催办,交给独立定时任务。
Verification
- [ ] 写入回读一致:新增行的序号/责任人/事项/状态与提交值逐列相符
- [ ] 应催办条数 = 表内满足状态字面值(且落在截止窗口内)的事项数,无口径外状态混入
- [ ] 未纳入事项在汇总中逐条给出原因(无截止日期 / 状态不符 / 超出窗口)
- [ ] 每条消息
query-send-status返回SUCCESS,发送总数与确认数一致,无重发 - [ ] 正式发送前已重新读表,且消息原文已在回复正文完整展示并获确认
输出契约
每次执行完成后报告三段:数据概览(总数、各状态数、本次纳入条数);发送结果(成功 / 失败数与失败明细);未纳入事项说明(原因逐条列出)。
资源
- [references/coordinates.md](references/coordinates.md) —— 坐标与人员映射登记表模板(真实值本地填写,勿提交)