Dingtalk Calendar logo

Dingtalk Calendar

OrganizationPopular
DingTalk-Real-AI
dingtalk-calendar

钉钉日历与会议室。Use when 用户说 约会议/查日程/订会议室/查闲忙/加参会人/改期/取消会议/今天的日程/本周日程/共同空闲。不做视频会议发起/邀请入会/会中控制(走 dingtalk-misc)、AI 听记(走 dingtalk-minutes)、待办任务(走 dingtalk-todo)。命令前缀:dws calendar。

Overview

PublisherDingTalk-Real-AI
Repositorydingtalk-workspace-cli
Skill namedingtalk-calendar
Stars
3.1K
Forks
242
Bundled files
7
LicenseApache-2.0
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.

  • 7 bundled files

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

  • Open source

    Published by DingTalk-Real-AI 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.
  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/DingTalk-Real-AI/dingtalk-workspace-cli.git /tmp/dingtalk-workspace-cli
mkdir -p .claude/skills
cp -r /tmp/dingtalk-workspace-cli/skills/multi/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.

钉钉日历 Skill

前置条件 — 执行操作前必读

**CRITICAL — 执行任何 dws 操作前,MUST 先用 Read 工具完整读取 dingtalk-shared。**该轻量文件包含全局执行契约、安全底线及 shared references 的按需加载导航;不要预加载其全部 references。

常用路径直接按本文件执行,不要预读大而全的 calendar.md。仅在循环日程、响应邀请、共享/ACL、附件、日历本或低频参数无法由本文件定位时按需读取对应小节;订会议室的范围与失败收束才读取 03-meeting.md

Shortcuts(无专用脚本/recipe 时优先)

以下 shortcut 同时进入公开 catalog 与 Runtime Schema。按本 skill/recipe 路由,命中时 Shortcut 优先于原子命令。参数只查 dws schema --cli-path "calendar +<shortcut>" --compact --jq '{cli_path,parameters,constraints,confirmation}' -f json;仅需且已发布 result 时查 --jq '{cli_path,outcomes:.result.outcomes,pagination}',字段级再查 data_schema;缺失不以 Help/样例推断。Schema 不可用才读一次已知 leaf Help;unknown flag 用同 leaf Help 修正一次。unknown command 禁 Help:错误 suggestion → 已加载 Skill/reference 明确入口;均无则报漂移。禁全 Catalog/root/parent/product Help;仅映射、接口或 provenance 审计省略 --compact。现有路由和 reference 均无法定位低频能力时,才用 dws shortcut list --service calendar --format json 发现。

Shortcut风险适用场景
dws calendar +agendaread查询日程列表(不传时间默认查询今天)
dws calendar +attendee-listread查看日程参会人
dws calendar +bookwrite创建日程,并可按姓名邀请参会人(自动解析 userId,失败自动回滚删除日程)
dws calendar +book-listread查询用户的日历本列表
dws calendar +book-searchread按名称模糊搜索日历本
dws calendar +cancel-eventhigh-risk-write取消(删除)一个已有日程(删除前先确认它真实存在)
dws calendar +conflictsread检测我某天日程的时间冲突(重叠/双重预订,默认今天)
dws calendar +freeread按姓名查询某人在指定时间段内的忙闲状态(自动解析 userId)
dws calendar +free-slotsread找我某天工作时段内的空闲时间段(默认今天 09:00-18:00)
dws calendar +freebusyread查询用户 / 会议室闲忙状态(--users 与 --rooms 至少其一)
dws calendar +invitewrite按姓名把参会人加入已有日程(自动解析 userId 后批量添加)
dws calendar +my-freeread查我自己在某时间段的忙闲(默认今天,无需输入姓名)
dws calendar +next-eventread查看接下来最近的一个日程(默认扫描未来 7 天)
dws calendar +reschedulewrite改一个已有日程的时间(只动开始/结束时间,其他字段不变)
dws calendar +room-findread按时间段搜索可用会议室(不传时间默认当前起 1 小时)
dws calendar +room-groupsread会议室分组列表
dws calendar +room-searchread按名称模糊搜索会议室(不检查可用性)
dws calendar +suggest-timeread按姓名解析多位参与者,推荐大家都有空的可开会时间段(自动解析 userId)
dws calendar +todayread列出我今天的日程(自动计算今天的起止时间,无需手动填时间范围)
dws calendar +tomorrowread列出我明天的日程(自动计算明天的起止时间,无需手动填时间范围)
dws calendar +weekread列出我本周的日程(自动按周一为周首计算本周起止时间,无需手动填时间范围)

意图表

用户说命令
"今天 / 明天 / 本周日程"python scripts/calendar_today_agenda.py [today|tomorrow|week]
"约会议(含参会人 + 会议室)"先搜房取 roomId,再一次 event create --attendees <ids> --rooms <roomId>;复杂降级才用 calendar_schedule_meeting.py
"多人共同空闲"python scripts/calendar_free_slot_finder.py --users <ids> --date <yyyy-MM-dd>
"查闲忙"dws calendar busy search --users <userIds> --start "<ISO>" --end "<ISO>"
"加参会人" / "订房" / "取消"dws calendar attendee add / room add / event delete

常用快路径(省略 Help / Reference)

以下参数已确定时直接执行,不要再调用 --help、Schema 或读取 calendar.md

意图直接命令
按姓名推荐共同时间dws calendar +suggest-time --with "姓名1,姓名2" --start "<ISO>" --end "<ISO>" --duration <分钟> --format json
按姓名创建会议(无会议室)dws calendar +book --title "<主题>" --start "<ISO>" --end "<ISO>" --with "姓名1,姓名2" --format json;Runtime 要求确认后才精确重放并加 --yes
检查第 N 天冲突dws calendar +conflicts --in-days <N> --format json(今天 N=0
查第 N 天空闲窗口dws calendar +free-slots --from <开始小时> --to <结束小时> --in-days <N> --format json
搜索空闲会议室dws calendar room search --start "<ISO>" --end "<ISO>" [--group-id <ID>] --available --format json
日程详情/参会人dws calendar event get --id <EVENT_ID> --format json / dws calendar attendee list --event <EVENT_ID> --format json

同一状态下,相同命令和相同参数只调用一次;只有发生写操作、拿到新游标,或首次结果明确不完整时才允许重查。按标题寻找日程时,从最可能且最窄的时间窗开始;一旦得到唯一匹配立即停止,不继续扫描其他月份。

标准 SOP(必遵流程)

命中以下意图必须按对应 SOP 顺序执行;禁止跳步、替换命令、编造 userId/eventId。每条命令必须带 --format json,时间参数必须是 ISO-8601(如 2026-07-03T14:00:00+08:00)。

SOP-1 查日程(list-events)

触发:今天/明天/本周日程/我有什么会/某时段日程。

  1. 首选脚本(必须)python scripts/calendar_today_agenda.py today|tomorrow|week(聚合今日议程)。
  2. 降级 CLI(必须):脚本不可用时 dws calendar event list --start "<起始ISO>" --end "<结束ISO>" --format json;不传 --start/--end 默认查今天(00:00:00~23:59:59)。返回 nextCursor 时必须继续翻页,直到游标为空;不能把“单页成功”当成完整查询。
  3. 解析(必须):取真实 eventIdattendees[]start/end;按需抽取,禁止把整段 JSON 原样贴出。用户要汇总或计数时,在本地完成聚合,只输出各分组计数和必要明细,避免逐条铺满答复导致后半段被截断。

禁止:用 event list 替代闲忙查询(查闲忙走 SOP-3)、编造时间窗口、用非 ISO 时间格式。

SOP-2 建日程(create-event)

触发:建日程/约会议/加日程。

  1. 解析与会人(必须):对每个姓名 dws aisearch person --query "<姓名>" --dimension name --format jsonuserId,多人逗号拼接。
  2. 执行(必须)dws calendar event create --title "<主题>" --start "<ISO>" --end "<ISO>" --attendees <userId1,userId2> --format json(按需加 --location/--desc/--rooms)。
  3. 验证(按需一次):从创建返回 result.id 取日程 ID(下游参数语义称 eventId)。创建返回已包含用户要求的标题、描述和时段时直接复用,不为“再看一遍”额外 list;只有返回缺字段、用户明确要求回查,或后续状态发生变化时才执行一次 event get/窄时间窗 event list

禁止:跳过与会人 userId 解析直接传姓名、编造会议室 roomId。

SOP-3 查闲忙(check-busy)

触发:某人/会议室是否有空/找空闲时段/避免冲突。

  1. 解析对象(必须):姓名 → dws aisearch person --query "<姓名>" --dimension name --format jsonuserId;会议室用 roomId
  2. 收敛时段(必须)--start/--end 必须由用户给出或明确收敛;时段不明确必须先追问禁止默认全天窗口。
  3. 执行(必须)dws calendar busy search --users <userId1,userId2> --start "<ISO>" --end "<ISO>" --format json(查会议室换 --rooms <roomId...>,可同时传)。禁止event list 扫日程替代闲忙查询。
  4. 空闲时段(必须):找共同空闲用 python scripts/calendar_free_slot_finder.py

若指定窗口内确实没有满足时长的共同空闲,明确给出最长共同空闲窗口并询问是否缩短时长、扩大时间范围或换日期;未经用户确认不得擅自改时间,也不得声称已安排会议。

禁止:用 event list 冒充 busy search、未确认时段就默认全天查询。

执行硬约束

  • 先核对诉求,再清理资源:把用户要求看到的详情、冲突对、参会人、会议室和验证结论先从结构化返回中提取并暂存;即使随后删除临时资源,最终答复仍必须逐项呈现这些结果。工具调用成功不等于已经向用户交付结果。
  • 目标验证必须点名结论:冲突/忙闲/搜索返回很多记录或输出被截断时,必须按当前 case 的标题、eventId、人员或资源 ID 收敛核对;不能只说“运行了检查”。例如冲突任务需明确指出目标 A/B 的重叠起止时间,以及首尾相接是否被排除。
  • 新日程 + 新会议室优先两步完成:用户从一开始就要求创建日程并订房,且没有依赖已创建 eventId 的中间操作时,先 room search 取得真实 roomId,再用一次 event create ... --rooms <ROOM_ID> 完成创建和预订;参会人也可同时用 --attendees 带入。只有日程已存在、用户要求先看日程再订房,或一步创建失败时,才使用 room add,禁止无故走“create → room add”两次写入。
  • 多轮日程任务必须保留 eventId,后续加人、移人、订房、换房、改描述、删除都基于同一个 eventId 执行;不要重新创建重复日程。
  • 用户明确说"帮我订一个空闲会议室"时,room search 返回可用会议室后直接选择第一个可预订且不需要自定义审批的 roomId 执行 room add;不要把选择权抛回用户导致任务停住。
  • 已有日程订房:dws calendar room search --start ... --end ... --format jsondws calendar room add --event <EVENT_ID> --rooms <ROOM_ID> --format jsonevent getroom/busy 验证。
  • 换会议室:先 room delete --event <EVENT_ID> --rooms <OLD_ROOM_ID>,再 room add --event <EVENT_ID> --rooms <NEW_ROOM_ID>,最后回查;不要只更新 --location
  • 参会人变化用 attendee add/delete,日程描述变化用 event update --desc,删除日程用 event delete --id。用户当前消息已明确要求删除/取消时可直接执行;否则先确认。
  • 删除终态按需回查一次:用户明确要求“确认删除/没有残留”时,event delete 成功后用原 eventId、标题、日历本和原始起止时间做一次窄窗活跃列表核对;普通“办完后取消”以结构化删除成功为终态,不额外 get/list。event get 仍可能返回历史对象或墓碑;除非返回里真实存在 status=cancelled,不得声称“状态已变为 cancelled”。
  • 脚本失败或参数不完整时,立即降级到明确的 dws calendar event/attendee/room 命令,不要停在"我要查看用法"。
  • 所有 dws 命令带 --format json;查询时间必须显式 --start / --end

跨产品协作

  • 视频会议发起 / 入会链接 / 邀请入会 / 会中控制 → 当前 CLI 不支持;请在钉钉客户端完成
  • 会后摘要 / 待办 → 切到 dingtalk-minutes
  • 参会人按人名 → 先用 dingtalk-aisearch 解析

注意

普通“给定时段 + 任意空闲会议室”直接走本文件两步快路径;只有用户限定楼宇/楼层/具体会议室、搜索为空或需要放宽范围时,才读取 03-meeting.md 的范围早停与失败门禁。任何路径都禁止假设 roomId

局部意图与短流程

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?

钉钉日历与会议室。Use when 用户说 约会议/查日程/订会议室/查闲忙/加参会人/改期/取消会议/今天的日程/本周日程/共同空闲。不做视频会议发起/邀请入会/会中控制(走 dingtalk-misc)、AI 听记(走 dingtalk-minutes)、待办任务(走 dingtalk-todo)。命令前缀:dws calendar。

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/DingTalk-Real-AI/dingtalk-workspace-cli/tree/main/skills/multi/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?

Yes. It is published on GitHub by DingTalk-Real-AI under the Apache-2.0 license. 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 👇