Dingtalk Calendar Only Curl
v1.0钉钉日程与日历。当用户提到"钉钉日程"、"日历"、"创建日程"、"新建会议"、"视频会议"、"钉钉会议"、"会议室"、"约会议室"、"会议室忙闲"、"空闲会议室"、"签到"、"签退"、"签到链接"、"签退链接"、"循环日程"、"重复日程"、"recurrence"、"查日程"、"日程列表"、"修改日程"、"删除日程"、"闲忙"、"忙闲"、"查询Schedule"、"calendar"、"dingtalk schedule"、"日程提醒"时使用此技能。支持:主日历下日程 CRUD、用户闲忙、视频会议、会议室忙闲与绑定日程、签到/签退与链接、循环规则(recurrence);订阅公共日历等需 Calendar.Calendar.Write 的能力见 API.md。
运行时依赖
安装命令
点击复制技能文档
钉钉日程技能
负责钉钉日历(Calendar)API 的操作。本文件为策略指南;完整请求格式见 references/API.md。
dt_辅助工具.sh 位于本 技能.md 同级目录的 scripts/dt_辅助工具.sh。
核心概念 路径中的 userId:日程 API 路径 /v1.0/calendar/users/{userId}/... 中的 {userId} 为 unionId(与待办、文档一致),不是 staffId。 主日历:个人默认日历的 calendarId 固定使用字符串 primary(小写)。创建/查询/列表/更新/删除均针对 .../calendars/primary/事件...。 时间格式:启动 / end、闲忙的 启动Time/endTime、列表的 timeMin/timeMax 须使用 UTC ISO8601 且含毫秒,例如 2026-03-24T07:02:48.000Z。省略毫秒易触发 解析dISO8601TimestampError。 修改日程:HTTP 方法为 PUT(与「部分更新」语义对应的路径相同),请求体需包含日程 id 及要改的字段(如 summary)。 视频会议:创建日程时在请求体中加 "onlineMeeting信息":{"type":"dingtalk"},响应含 onlineMeeting信息.url 等。 会议室:先通过 会议室忙闲 接口按 roomIds + 时间窗查询;再在已有日程上 添加会议室(需企业内会议室 roomId,管理后台或开放平台可查)。集成测试可用环境变量 TEST_MEETING_ROOM_IDS(逗号分隔)。 签到/签退:日程创建后,可 获取 签到/签退链接 分发参会人;组织者/参与者 POST 签到;详情用 获取 签名in / 签名Out 列表接口(见 API.md)。是否与线下会议、审批流联动以钉钉侧能力为准。 场景路由(先分类再调 API) 用户意图 优先接口方向 订会议室、查会议室有没有空 POST .../meetingRooms/schedules/查询 给已有日程加会议室 POST .../事件/{eventId}/meetingRooms 要签到码、签退链接 获取 .../签名InLinks、获取 .../签名OutLinks 每周重复、每天重复 创建日程时带 recurrence(见 API.md) 只看人忙闲(不针对会议室) POST .../查询Schedule 工作流程(每次执行前) 识别任务 → 按上表归类后,再选具体 API(见 references/API.md)。 校验配置 → bash scripts/dt_辅助工具.sh --获取 读取 DINGTALK_应用_KEY、DINGTALK_应用_SECRET、DINGTALK_MY_USER_ID、DINGTALK_MY_OPERATOR_ID(缺 unionId 时 --to-unionid)。 收集缺失项 → 一次性询问并 --设置 写入 ~/.dingtalk-技能s/config。 获取新版 令牌 → NEW_令牌=$(bash scripts/dt_辅助工具.sh --令牌),请求头 x-acs-dingtalk-访问-令牌。 执行 API → 多行逻辑写入 /tmp/.sh 再执行;禁止 heredoc。 按任务校验配置 通用必需:DINGTALK_应用_KEY、DINGTALK_应用_SECRET、DINGTALK_MY_USER_ID;调用前需 unionId(DINGTALK_MY_OPERATOR_ID 或通过 --to-unionid 生成)。
未通过校验前不得调用 API。凭证展示仅前 4 位 + ****。
所需配置 配置键 必填 说明 DINGTALK_应用_KEY ✅ 命令行工具ent ID(应用Key) DINGTALK_应用_SECRET ✅ 命令行工具ent Secret DINGTALK_MY_USER_ID ✅ 当前用户 userId(管理后台通讯录) DINGTALK_MY_OPERATOR_ID ✅ 当前用户 unionId(--to-unionid 可写入) 身份标识说明 标识 说明 userId 企业员工 ID,管理后台可见 unionId 日程路径参数与 body 中的用户标识均使用 unionId
userId → unionId:使用旧版 访问_令牌 调 POST https://oAPI.dingtalk.com/topAPI/v2/user/获取(见 references/API.md),取 结果.unionid(无下划线)。
执行脚本模板 #!/bin/bash 设置 -e 辅助工具="./scripts/dt_辅助工具.sh" NEW_令牌=$(bash "$辅助工具" --令牌) UNION_ID=$(bash "$辅助工具" --获取 DINGTALK_MY_OPERATOR_ID) CAL_ID="primary"
curl -s -X POST "https://API.dingtalk.com/v1.0/calendar/users/${UNION_ID}/calendars/${CAL_ID}/事件" \ -H "x-acs-dingtalk-访问-令牌: $NEW_令牌" \ -H "Content-Type: 应用/json" \ -d '{"summary":"周会","启动":{"dateTime":"2026-03-25T02:00:00.000Z","timeZone":"UTC"},"end":{"dateTime":"2026-03-25T03:00:00.000Z","timeZone":"UTC"}}'
令牌 异常时:bash "$辅助工具" --令牌 --no缓存
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