AI extracts todo items from DingTalk calendar event descriptions (what I promised to do + what the other party promised to do). After confirmation via DingTalk message, DingTalk todos are automatically created, and completion status is periodically checked. Compared with the Feishu version, DingTalk has no Miaoju (automatic meeting minutes), so it instead uses AI extraction from calendar event descriptions.
Trigger Methods
Automatically triggered when the user's conversation contains the following keywords:
"会议待办" "会后的待办" "追踪待办" "提取行动项" "整理会议纪要待办" "会议行动项"
Working Modes
Mode 1: Batch Extraction (specified time range)
Trigger: "Help me organize the todo items from meetings in the past week" / "Extract this week's meeting action items"
Workflow:
Step 1: 获取时间范围内的日程列表
└── dws calendar event list --start "2026-04-01T00:00:00+08:00" --end "2026-04-06T23:59:59+08:00" --yes -f json → 按日期范围获取日程
Step 2: 逐个获取日程详情(含描述)
└── dws calendar event get --id "eventId" --yes -f json → 获取日程描述和参与者
Step 3: AI 分析日程描述,提取待办事项
├── 识别承诺性语句("我会..."、"你帮我..."、"下周前...")
├── 区分我方待办和对方待办
├── 推断建议截止日(根据上下文关键词:今天/明天/下周/周五等)
└── 去重(与已有待办记录比对)
Step 4: 用户确认后,批量创建钉钉待办(含错误处理)
├── 对每个确认的待办执行 dws todo task create
├── 如果创建失败(errorCode 999 等),立即重试一次
├── 如果重试仍然失败:
│ ├── 将该待办写入 aitable 追踪表(状态标记为"创建失败")
│ └── 通过 DING 通知用户:"待办「XXX」创建失败,已记录到追踪表,请手动创建"
└── 汇总创建结果报告
Output format:
## 日程待办提取报告
找到 N 场日程,其中 M 场有可提取的待办事项。
### 日程:XXX会议(日期)
#### 我方待办
| # | 待办内容 | 建议截止日 |
|---|---------|-----------|
| 1 | 待办描述 | 周五 |
#### 对方待办
| # | 待办内容 | 承诺人 |
|---|---------|--------|
| 1 | 待办描述 | 张三 |
请确认需要创建钉钉待办的条目(回复编号,如 "1 3 5")。
Mode 2: Single Calendar Event Extraction
Trigger: "Extract the action items from today's product review meeting" / "What todos are there for the XXX meeting"
Workflow:
Step 1: 搜索匹配的日程
└── dws calendar event list --start "..." --end "..." --yes -f json → 按日期范围过滤匹配的日程
Step 2: 获取日程详情
└── dws calendar event get --id "eventId" --yes -f json
Step 3: AI 提取待办 → 用户确认 → 创建待办
Mode 3: Completion Check
Trigger: "Are all the meeting todos completed?" / "Check the completion status of todos"
Workflow:
Step 1: 查询所有待办
└── dws todo task list --yes -f json
Step 2: 查询会议待办追踪表
└── dws aitable record query --base-id <base-id> --table-id <table-id> --yes -f json
Step 3: 对比待办状态,生成报告
Output format:
## 会议待办完成情况
| 待办 | 来源日程 | 负责人 | 状态 |
|------|---------|--------|------|
| 待办内容1 | Q2规划会 | 我 | 已完成 ✓ |
| 待办内容2 | Q2规划会 | 我 | 进行中 |
| 待办内容3 | UI评审会 | 李四 | 已过期 ⚠️ |
总计:N 项待办,已完成 M 项,过期 K 项
Mode 4: Automatic Archiving
Trigger: Automatically executed (todos not completed for more than 14 days)
Workflow:
Step 1: 查询所有"已确认"但未完成的待办
Step 2: 筛选出创建时间超过 14 天的
Step 3: 更新状态为"已归档"
└── dws aitable record update --base-id <base-id> --table-id <table-id> --records '[{"recordId":"...","cells":{"确认状态":"已归档"}}]' --yes
Data Initialization
On first use, automatically create the aitable data table:
# 创建 Base
dws aitable base create --name "会议待办追踪" --yes -f json
# 返回 baseId,记为 <mt-base-id>
# 创建数据表
dws aitable table create --base-id <mt-base-id> --name "会议待办" --yes -f json
# 返回 tableId,记为 <mt-table-id>
# 添加业务字段(表创建后自动带一个"标题"primaryDoc字段,需额外添加业务字段)
dws aitable field create --base-id <mt-base-id> --table-id <mt-table-id> --fields '[{"fieldName":"会议主题","type":"text"},{"fieldName":"会议日期","type":"date"},{"fieldName":"日程ID","type":"text"},{"fieldName":"待办内容","type":"text"},{"fieldName":"待办类型","type":"text"},{"fieldName":"负责人","type":"text"},{"fieldName":"建议截止日","type":"date"},{"fieldName":"确认状态","type":"text"},{"fieldName":"关联任务ID","type":"text"}]' --yes -f json
Table structure: Meeting Todos (meeting_todos)
| Field Name | Type | Description |
|---|---|---|
| Meeting Topic | Text | Source calendar event title |
| Meeting Date | Date | Calendar event time |
| Calendar Event ID | Text | DingTalk calendar eventId |
| Todo Content | Text | Extracted todo description |
| Todo Type | Text | Our todo / Their todo |
| Assignee | Text | Who will do it |
| Suggested Due Date | Date | Inferred from context |
| Confirmation Status | Text | Pending confirmation/Confirmed/Skipped/Completed/Archived |
| Related Task ID | Text | DingTalk todo taskId |
dws CLI Command Reference
Get calendar event list
dws calendar event list --start "2026-04-01T00:00:00+08:00" --end "2026-04-06T23:59:59+08:00" --yes -f json
Get calendar event details
dws calendar event get --id "eventId" --yes -f json
Create DingTalk todo
dws todo task create --title "待办内容" --priority "20" --due "2026-04-10T18:00:00+08:00" --yes -f json
Note:
dws todo task createThe server occasionally throws a NullPointerException, returning errorCode 999. Suggestion: first use--dry-runto verify the parameter format, and retry once if it fails. During testing, you can add the--mockflag to skip actual creation.
View todo list
dws todo task list --page 1 --size 20 --status false --yes -f json
Update todo status
dws todo task done --task-id "taskId" --yes -f json
Write tracking record
dws aitable record create --base-id <mt-base-id> --table-id <mt-table-id> --records '[{"cells":{"标题":"Q2规划会-发送产品路线图","会议主题":"Q2规划会","会议日期":"2026-04-06","待办内容":"发送产品路线图","待办类型":"我方待办","确认状态":"已确认","关联任务ID":"todo_xxx"}}]' --yes -f json
Query tracking records
dws aitable record query --base-id <mt-base-id> --table-id <mt-table-id> --limit 50 --yes -f json
Send DING reminder
dws ding message send --robot-code "bot_code" --users "manager6950" --content "你有 N 个会议待办即将到期" --type "1" --yes
Learning Mode
- If the user repeatedly rejects a certain type of todo (such as "no need to record this kind of thing"), the AI records the reason for rejection
- Automatically skip similar content on the next extraction
- Rejection records are stored in the remarks field of the aitable tracking table
Linked Skill
| Linked Skill | Data Interaction | Description |
|---|---|---|
| personal-crm | Read contact data | Identify attendee identity |
| morning-brief | Provide to-do data | Display meeting to-dos in the morning briefing |
Notes
- DingTalk has no Miaojie (automatic meeting minutes), and to-do extraction depends on the quality of the schedule description. Users are advised to record discussion content and action items in detail when creating schedules
- All
dwscommands must include the--yesflag dws calendar event listsupports--startand--enddate filter parameters (ISO 8601 format); specifying a range is recommended to improve query efficiency- The to-do
--dueparameter format is ISO 8601 - Sending DING messages requires configuring robot-code first
Known Issues
dws todo task createThe server occasionally throws a NullPointerException and returns errorCode 999. Suggested action: first use--dry-runto verify whether the parameter format is correct, and retry once if it fails. This is a DingTalk server-side issue and does not affect the normal use of other to-do commands such asdws todo task list、dws todo task done.