Use wecom-cli to operate WeCom meetings, todos, and smart sheets to track todo items generated from meetings.
Initial setup (automatic initialization)
Before performing any operation, first check whether the meeting todo configuration already exists in memory. If not, automatically create it according to the following process:
Step 1: Create a smart sheet
wecom-cli doc create_doc '{"doc_type": 10, "doc_name": "会议待办追踪"}'
Get from the returned result docid。
Step 2: Create sub-sheets and fields
wecom-cli doc smartsheet_add_sheet '{"docid": "<DOCID>", "sheet_name": "会议待办"}'
wecom-cli doc smartsheet_add_fields '{"docid": "<DOCID>", "sheet_id": "<SHEET_ID>", "fields": [
{"field_title": "会议主题", "field_type": "FIELD_TYPE_TEXT"},
{"field_title": "会议日期", "field_type": "FIELD_TYPE_TEXT"},
{"field_title": "待办内容", "field_type": "FIELD_TYPE_TEXT"},
{"field_title": "待办类型", "field_type": "FIELD_TYPE_SINGLE_SELECT"},
{"field_title": "负责人", "field_type": "FIELD_TYPE_TEXT"},
{"field_title": "建议截止日", "field_type": "FIELD_TYPE_TEXT"},
{"field_title": "确认状态", "field_type": "FIELD_TYPE_SINGLE_SELECT"},
{"field_title": "关联待办ID", "field_type": "FIELD_TYPE_TEXT"},
{"field_title": "会议ID", "field_type": "FIELD_TYPE_TEXT"}
]}'
Step 3: Save the configuration to memory
Save the following information to the memory file meeting-todo-config.md:
---
name: meeting-todo-config
description: 会议待办追踪智能表格配置信息
type: project
---
## 会议待办表配置
- docid: <DOCID>
- url: <创建时返回的URL>
- 表格名称: 会议待办追踪
- 会议待办 sheet_id: <SHEET_ID>
Operation process
In the following commands,
<DOCID>and<SHEET_ID>are read from meeting-todo-config in memory.
Mode 1: Batch extraction
Extract todos from all meetings within the specified time range.
Step 1: Get the meeting list
wecom-cli meeting list_user_meetings '{"begin_datetime": "2026-03-26 00:00", "end_datetime": "2026-04-02 23:59", "limit": 100}'
Step 2: Get meeting details one by one
wecom-cli meeting get_meeting_info '{"meetingid": "<MEETING_ID>"}'
Step 3: AI extracts todos from the meeting description
- Analyze the meeting subject, description, and participant information
- Distinguish between "our todos" and "their todos"
- Infer suggested due dates (such as "this Friday", "next Wednesday")
- Filter out unimportant record-keeping content
Step 4: Send a confirmation message
wecom-cli msg send_message '{"chat_type": 1, "chatid": "<USERID>", "msgtype": "text", "text": {"content": "## 会议待办提取结果\n\n### Q2产品规划会(3/28)\n**我方待办:**\n1. 把产品路线图发给张三(建议:本周五)\n2. 调研竞品定价策略(建议:下周三)\n**对方待办:**\n1. 提供用户调研数据 — 李四\n\n请确认需要创建待办的条目(回复编号,如 1,2 或 全部/跳过)"}}'
Step 5: Create todos after confirmation
# 创建企业微信待办
wecom-cli todo create_todo '{"content": "把产品路线图发给张三(来源:Q2产品规划会)", "remind_time": "2026-04-04 09:00:00"}'
# 获取返回的 todo_id,更新追踪表
wecom-cli doc smartsheet_add_records '{"docid": "<DOCID>", "sheet_id": "<SHEET_ID>", "records": [{"values": {
"会议主题": [{"type": "text", "text": "Q2产品规划会"}],
"会议日期": [{"type": "text", "text": "2026-03-28"}],
"待办内容": [{"type": "text", "text": "把产品路线图发给张三"}],
"待办类型": [{"text": "我方待办"}],
"负责人": [{"type": "text", "text": "我"}],
"建议截止日": [{"type": "text", "text": "2026-04-04"}],
"确认状态": [{"text": "已确认"}],
"关联待办ID": [{"type": "text", "text": "<TODO_ID>"}],
"会议ID": [{"type": "text", "text": "<MEETING_ID>"}]
}}]}'
Mode 2: Single meeting extraction
Only process one meeting specified by the user.
Interaction process:
- User: "Extract the action items from today's product review meeting"
- Find the corresponding meeting
- AI extracts todos and sends a confirmation
- The process is the same as steps 4-5 of Mode 1
# 按关键词搜索会议
wecom-cli meeting list_user_meetings '{"begin_datetime": "2026-04-02 00:00", "end_datetime": "2026-04-02 23:59", "limit": 100}'
# AI 从返回结果中按主题关键词筛选目标会议
Mode 3: Completion check
Check the completion status of all meeting todos.
Step 1: Query unfinished todos in the tracking sheet
wecom-cli doc smartsheet_get_records '{"docid": "<DOCID>", "sheet_id": "<SHEET_ID>"}'
# AI 筛选确认状态为"已确认"的记录
Step 2: Check todo status one by one
wecom-cli todo get_todo_detail '{"todo_id_list": ["TODO_ID_1", "TODO_ID_2", "..."]}'
Step 3: Update the tracking sheet status
# 已完成的待办
wecom-cli doc smartsheet_update_records '{"docid": "<DOCID>", "sheet_id": "<SHEET_ID>", "key_type": "CELL_VALUE_KEY_TYPE_FIELD_TITLE", "records": [{"record_id": "RECORD_ID", "values": {
"确认状态": [{"text": "已完成"}]
}}]}'
Example output format:
## 会议待办完成情况
| 待办 | 来源会议 | 截止日 | 状态 |
|------|---------|--------|------|
| 发送产品路线图 | Q2规划会 | 4/4 | 已完成 ✓ |
| 调研竞品定价 | Q2规划会 | 4/9 | 进行中 |
| 回复设计稿反馈 | UI评审会 | 4/1 | 已过期 ⚠️ |
Mode 4: Automatic archiving
Todos that remain unfinished for more than 14 days are automatically archived.
# 查询所有"已确认"状态的待办
wecom-cli doc smartsheet_get_records '{"docid": "<DOCID>", "sheet_id": "<SHEET_ID>"}'
# AI 计算"建议截止日"距今是否超过 14 天
# 超过 14 天的批量更新为"已归档"
wecom-cli doc smartsheet_update_records '{"docid": "<DOCID>", "sheet_id": "<SHEET_ID>", "key_type": "CELL_VALUE_KEY_TYPE_FIELD_TITLE", "records": [
{"record_id": "ID1", "values": {"确认状态": [{"text": "已归档"}]}},
{"record_id": "ID2", "values": {"确认状态": [{"text": "已归档"}]}}
]}'
Learning mode
If the user repeatedly rejects a certain type of todo (such as "meeting minutes-type records do not need to be recorded"), the AI should:
- Record the user's preference to memory
- Automatically filter similar content the next time todos are extracted
- State in the extraction result that "N record-type todos have been filtered according to preference"
Field type writing format (general rules)
For the complete field type format description, see crm-schema
| Field type | Writing format | Example |
|---|---|---|
| TEXT | [{"type":"text","text":"值"}] |
Meeting subject, todo content, date, etc. |
| SINGLE_SELECT | [{"text":"选项文本"}] |
Todo type, confirmation status, etc. |
Practical notes
Common pitfalls
- Do not pass key_type when updating — must include
"key_type": "CELL_VALUE_KEY_TYPE_FIELD_TITLE" - When an API call fails — Check error codes: 301085 means the docid is invalid (use url instead); 2022004 means the field was not found (call add_fields first); 2022003 means the record does not exist (call add_records first). When encountering an error, first use
smartsheet_get_sheet '{"url": "<URL>"}'to verify the table structure. - SINGLE_SELECT options do not match — the options for the confirmation status must match exactly
- SINGLE_SELECT options do not take effect at creation time —
smartsheet_add_fieldsThe passed-inproperty.optionswill not pre-create options; options are automatically created on the first record write via[{"text": "选项"}]. When creating a field, you can omit thepropertyparameter. - Meeting time range —
list_user_meetingsonly supports 30 days before and after - To-do ID association — after creating a to-do, save the returned
todo_idto the tracking table for subsequent status checks - Manually enter a to-do — if the user directly says "I promised to do X at today's meeting", there is no need to check the meeting; create it directly
Scheduled automation suggestions
| Task | Suggested time | Cron |
|---|---|---|
| To-do completion check | Weekdays 10:00 | 0 10 * * 1-5 |
| Auto archive | Every Sunday 22:00 | 0 22 * * 0 |
Data linkage
- To-dos created by this Skill can be displayed in the morning briefing via
wecomcli-workflow-morning-briefShow in Morning Briefing - Advisory Group Skill (
wecomcli-workflow-business-advisor) operations advisors will check the to-do completion rate