Dingtalk Calendar logo

Dingtalk Calendar

Community
breath57
dingtalk-calendar

钉钉日程与日历。当用户提到"钉钉日程"、"日历"、"创建日程"、"新建会议"、"视频会议"、"钉钉会议"、"会议室"、"约会议室"、"会议室忙闲"、"空闲会议室"、"签到"、"签退"、"签到链接"、"签退链接"、"循环日程"、"重复日程"、"recurrence"、"查日程"、"日程列表"、"修改日程"、"删除日程"、"闲忙"、"忙闲"、"querySchedule"、"calendar"、"dingtalk schedule"、"日程提醒"时使用此技能。支持:主日历下日程 CRUD、用户闲忙、视频会议、会议室忙闲与绑定日程、签到/签退与链接、循环规则(recurrence);订阅公共日历等需 Calendar.Calendar.Write 的能力见 api.md。

Overview

Publisherbreath57
Repositorydingtalk-skills
Skill namedingtalk-calendar
Stars
102
Forks
10
Bundled files
2
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 2 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by breath57 on GitHub. Read the source before you install it.

Installation

Install the Dingtalk Calendar AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/breath57/dingtalk-skills/tree/main/.agents/skills/dingtalk-calendar
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/breath57/dingtalk-skills.git /tmp/dingtalk-skills
mkdir -p .claude/skills
cp -r /tmp/dingtalk-skills/.agents/skills/dingtalk-calendar .claude/skills/dingtalk-calendar
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Dingtalk Calendar in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Dingtalk Calendar on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Dingtalk Calendar is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

钉钉日程技能

负责钉钉日历(Calendar)API 的操作。本文件为策略指南;完整请求格式见 references/api.md。

dt_helper.sh 位于本 SKILL.md 同级目录的 scripts/dt_helper.sh。

核心概念

  • 路径中的 userId:日程 API 路径 /v1.0/calendar/users/{userId}/... 中的 {userId} 为 unionId(与待办、文档一致),不是 staffId。
  • 主日历:个人默认日历的 calendarId 固定使用字符串 primary(小写)。创建/查询/列表/更新/删除均针对 .../calendars/primary/events...。
  • 时间格式:start / end、闲忙的 startTime/endTime、列表的 timeMin/timeMax 须使用 UTC ISO8601 且含毫秒,例如 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)

用户意图优先接口方向
订会议室、查会议室有没有空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。

按任务校验配置

  • 通用必需:DINGTALK_APP_KEY、DINGTALK_APP_SECRET、DINGTALK_MY_USER_ID;调用前需 unionId(DINGTALK_MY_OPERATOR_ID 或通过 --to-unionid 生成)。

未通过校验前不得调用 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(无下划线)。

执行脚本模板

bash
#!/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 查阅索引

bash
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

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Dingtalk Calendar AI skill do?

钉钉日程与日历。当用户提到"钉钉日程"、"日历"、"创建日程"、"新建会议"、"视频会议"、"钉钉会议"、"会议室"、"约会议室"、"会议室忙闲"、"空闲会议室"、"签到"、"签退"、"签到链接"、"签退链接"、"循环日程"、"重复日程"、"recurrence"、"查日程"、"日程列表"、"修改日程"、"删除日程"、"闲忙"、"忙闲"、"querySchedule"、"calendar"、"dingtalk schedule"、"日程提醒"时使用此技能。支持:主日历下日程 CRUD、用户闲忙、视频会议、会议室忙闲与绑定日程、签到/签退与链接、循环规则(recurrence);订阅公共日历等需 Calendar.Calendar.Write 的能力见 api.md。

Why use Dingtalk Calendar on TypingMind?

Because you install it once and use it with any model. Dingtalk Calendar is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Dingtalk Calendar in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/breath57/dingtalk-skills/tree/main/.agents/skills/dingtalk-calendar. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Dingtalk Calendar?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Dingtalk Calendar?

As many as you like. As long as a model supports skills, you can use Dingtalk Calendar with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Dingtalk Calendar AI skill free?

It is published on GitHub by breath57. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇