钉钉日程技能
name: dingtalk-calendar
by breath57 · published 2026-04-01
$ claw add gh:breath57/breath57-dingtalk-calendar-only-curl---
name: dingtalk-calendar
description: 钉钉日程与日历。当用户提到"钉钉日程"、"日历"、"创建日程"、"新建会议"、"视频会议"、"钉钉会议"、"会议室"、"约会议室"、"会议室忙闲"、"空闲会议室"、"签到"、"签退"、"签到链接"、"签退链接"、"循环日程"、"重复日程"、"recurrence"、"查日程"、"日程列表"、"修改日程"、"删除日程"、"闲忙"、"忙闲"、"querySchedule"、"calendar"、"dingtalk schedule"、"日程提醒"时使用此技能。支持:主日历下日程 CRUD、用户闲忙、视频会议、会议室忙闲与绑定日程、签到/签退与链接、循环规则(recurrence);订阅公共日历等需 Calendar.Calendar.Write 的能力见 api.md。
---
# 钉钉日程技能
负责钉钉日历(Calendar)API 的操作。本文件为**策略指南**;完整请求格式见 `references/api.md`。
> `dt_helper.sh` 位于本 `SKILL.md` 同级目录的 `scripts/dt_helper.sh`。
核心概念
场景路由(先分类再调 API)
| 用户意图 | 优先接口方向 |
|---|---|
| 订会议室、查会议室有没有空 | `POST .../meetingRooms/schedules/query` |
| 给已有日程加会议室 | `POST .../events/{eventId}/meetingRooms` |
| 要签到码、签退链接 | `GET .../signInLinks`、`GET .../signOutLinks` |
| 每周重复、每天重复 | 创建日程时带 `recurrence`(见 api.md) |
| 只看人忙闲(不针对会议室) | `POST .../querySchedule` |
工作流程(每次执行前)
1. **识别任务** → 按上表归类后,再选具体 API(见 `references/api.md`)。
2. **校验配置** → `bash scripts/dt_helper.sh --get` 读取 `DINGTALK_APP_KEY`、`DINGTALK_APP_SECRET`、`DINGTALK_MY_USER_ID`、`DINGTALK_MY_OPERATOR_ID`(缺 unionId 时 `--to-unionid`)。
3. **收集缺失项** → 一次性询问并 `--set` 写入 `~/.dingtalk-skills/config`。
4. **获取新版 Token** → `NEW_TOKEN=$(bash scripts/dt_helper.sh --token)`,请求头 `x-acs-dingtalk-access-token`。
5. **执行 API** → 多行逻辑写入 `/tmp/<task>.sh` 再执行;禁止 heredoc。
按任务校验配置
> 未通过校验前不得调用 API。凭证展示仅前 4 位 + `****`。
所需配置
| 配置键 | 必填 | 说明 |
|---|---|---|
| `DINGTALK_APP_KEY` | ✅ | Client ID(AppKey) |
| `DINGTALK_APP_SECRET` | ✅ | Client Secret |
| `DINGTALK_MY_USER_ID` | ✅ | 当前用户 userId(管理后台通讯录) |
| `DINGTALK_MY_OPERATOR_ID` | ✅ | 当前用户 unionId(`--to-unionid` 可写入) |
身份标识说明
| 标识 | 说明 |
|---|---|
| `userId` | 企业员工 ID,管理后台可见 |
| `unionId` | **日程路径参数与 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.mdMore tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...