Skills dingtalk-calendar
钉钉日程与日历。当用户提到"钉钉日程"、"日历"、"创建日程"、"新建会议"、"视频会议"、"钉钉会议"、"会议室"、"约会议室"、"会议室忙闲"、"空闲会议室"、"签到"、"签退"、"签到链接"、"签退链接"、"循环日程"、"重复日程"、"recurrence"、"查日程"、"日程列表"、"修改日程"、"删除日程"、"闲忙"、"忙闲"、"querySchedule"、"calendar"、"dingtalk schedule"、"日程提醒"时使用此技能。支持:主日历下日程 CRUD、用户闲忙、视频会议、会议室忙闲与绑定日程、签到/签退与链接、循环规则(recurrence);订阅公共日历等需 Calendar.Calendar.Write 的能力见 api.md。
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/breath57/dingtalk-calendar-only-curl" ~/.claude/skills/clawdbot-skills-dingtalk-calendar && rm -rf "$T"
manifest:
skills/breath57/dingtalk-calendar-only-curl/SKILL.mdsource content
钉钉日程技能
负责钉钉日历(Calendar)API 的操作。本文件为策略指南;完整请求格式见
references/api.md。
位于本dt_helper.sh同级目录的SKILL.md。scripts/dt_helper.sh
核心概念
- 路径中的
:日程 API 路径userId
中的/v1.0/calendar/users/{userId}/...
为 unionId(与待办、文档一致),不是 staffId。{userId} - 主日历:个人默认日历的
固定使用字符串calendarId
(小写)。创建/查询/列表/更新/删除均针对primary
。.../calendars/primary/events... - 时间格式:
/start
、闲忙的end
/startTime
、列表的endTime
/timeMin
须使用 UTC ISO8601 且含毫秒,例如timeMax
。省略毫秒易触发2026-03-24T07:02:48.000Z
。ParsedISO8601TimestampError - 修改日程:HTTP 方法为 PUT(与「部分更新」语义对应的路径相同),请求体需包含日程
及要改的字段(如id
)。summary - 视频会议:创建日程时在请求体中加
,响应含"onlineMeetingInfo":{"type":"dingtalk"}
等。onlineMeetingInfo.url - 会议室:先通过 会议室忙闲 接口按
+ 时间窗查询;再在已有日程上 添加会议室(需企业内会议室roomIds
,管理后台或开放平台可查)。集成测试可用环境变量roomId
(逗号分隔)。TEST_MEETING_ROOM_IDS - 签到/签退:日程创建后,可 GET 签到/签退链接 分发参会人;组织者/参与者 POST 签到;详情用 GET signin / signOut 列表接口(见 api.md)。是否与线下会议、审批流联动以钉钉侧能力为准。
场景路由(先分类再调 API)
| 用户意图 | 优先接口方向 |
|---|---|
| 订会议室、查会议室有没有空 | |
| 给已有日程加会议室 | |
| 要签到码、签退链接 | 、 |
| 每周重复、每天重复 | 创建日程时带 (见 api.md) |
| 只看人忙闲(不针对会议室) | |
工作流程(每次执行前)
- 识别任务 → 按上表归类后,再选具体 API(见
)。references/api.md - 校验配置 →
读取bash scripts/dt_helper.sh --get
、DINGTALK_APP_KEY
、DINGTALK_APP_SECRET
、DINGTALK_MY_USER_ID
(缺 unionId 时DINGTALK_MY_OPERATOR_ID
)。--to-unionid - 收集缺失项 → 一次性询问并
写入--set
。~/.dingtalk-skills/config - 获取新版 Token →
,请求头NEW_TOKEN=$(bash scripts/dt_helper.sh --token)
。x-acs-dingtalk-access-token - 执行 API → 多行逻辑写入
再执行;禁止 heredoc。/tmp/<task>.sh
按任务校验配置
- 通用必需:
、DINGTALK_APP_KEY
、DINGTALK_APP_SECRET
;调用前需 unionId(DINGTALK_MY_USER_ID
或通过DINGTALK_MY_OPERATOR_ID
生成)。--to-unionid
未通过校验前不得调用 API。凭证展示仅前 4 位 +
。****
所需配置
| 配置键 | 必填 | 说明 |
|---|---|---|
| ✅ | Client ID(AppKey) |
| ✅ | Client Secret |
| ✅ | 当前用户 userId(管理后台通讯录) |
| ✅ | 当前用户 unionId( 可写入) |
身份标识说明
| 标识 | 说明 |
|---|---|
| 企业员工 ID,管理后台可见 |
| 日程路径参数与 body 中的用户标识均使用 unionId |
userId → unionId:使用旧版
access_token 调 POST https://oapi.dingtalk.com/topapi/v2/user/get(见 references/api.md),取 result.unionid(无下划线)。
执行脚本模板
#!/bin/bash set -e HELPER="./scripts/dt_helper.sh" NEW_TOKEN=$(bash "$HELPER" --token) UNION_ID=$(bash "$HELPER" --get DINGTALK_MY_OPERATOR_ID) CAL_ID="primary" curl -s -X POST "https://api.dingtalk.com/v1.0/calendar/users/${UNION_ID}/calendars/${CAL_ID}/events" \ -H "x-acs-dingtalk-access-token: $NEW_TOKEN" \ -H "Content-Type: application/json" \ -d '{"summary":"周会","start":{"dateTime":"2026-03-25T02:00:00.000Z","timeZone":"UTC"},"end":{"dateTime":"2026-03-25T03:00:00.000Z","timeZone":"UTC"}}'
Token 异常时:
bash "$HELPER" --token --nocache
references/api.md 查阅索引
grep -A 35 "^## 1. 创建日程" references/api.md grep -A 25 "^## 2. 查询单个日程" references/api.md grep -A 30 "^## 3. 查询日程列表" references/api.md grep -A 25 "^## 4. 更新日程" references/api.md grep -A 15 "^## 5. 删除日程" references/api.md grep -A 28 "^## 6. 查询闲忙" references/api.md grep -A 22 "^## 7. 视频会议" references/api.md grep -A 28 "^## 8. 查询会议室忙闲" references/api.md grep -A 25 "^## 9. 添加与移除会议室" references/api.md grep -A 18 "^## 10. 签到与签退链接" references/api.md grep -A 22 "^## 11. 签到与签退详情列表" references/api.md grep -A 18 "^## 12. 签到与签退操作" references/api.md grep -A 35 "^## 13. 循环日程" references/api.md grep -A 15 "^## 14. 订阅日历" references/api.md grep -A 15 "^## 错误码" references/api.md grep -A 18 "^## 所需应用权限" references/api.md