Install
openclaw skills install windows-calendar-sync将提醒同步到 Windows / Outlook 日历。当用户提到「提醒我」「设置提醒」「加到日历」「同步到日历」「日程」「calendar」「日历」时,使用此技能。支持 Microsoft Graph API 设备代码流认证,无需 Web 服务器,直接写入用户 Outlook 日历。
openclaw skills install windows-calendar-sync将提醒和日程写入用户本人的 Microsoft Outlook 日历(即 Windows 日历),同步到所有设备。
运行配置向导,脚本会自动引导你完成 Azure AD 应用注册 + OAuth 登录:
python "C:\Users\johnx\.qclaw\skills\windows-calendar-sync\scripts\setup_and_auth.py"
脚本会自动:
Azure AD 应用注册是免费的,无需信用卡,只需要一个 Microsoft 账户。
同样运行上面的命令,脚本检测到已有 Client ID 会跳过注册步骤,直接进行登录。
当用户提出以下类型的请求时,触发本技能:
工作流程:
2026-04-15T10:00:00)calendar_sync.py add 将事件写入 Outlook 日历scripts/calendar_sync.py — 添加 / 查询 / 删除日历事件添加事件:
python "C:\Users\johnx\.qclaw\skills\windows-calendar-sync\scripts\calendar_sync.py" add `
--title "团队周会" `
--start "2026-04-16T09:00:00" `
--duration 60 `
--reminder 15
参数说明:
| 参数 | 必填 | 说明 |
|---|---|---|
--title / -t | ✅ | 事件标题 |
--start / -s | ✅ | 开始时间,ISO 8601 格式 |
--end / -e | 与 --duration 二选一 | 结束时间 |
--duration / -d | 与 --end 二选一 | 持续分钟数(默认30分钟) |
--reminder / -r | 否 | 提前多少分钟提醒(默认15,设为0则不提醒) |
--body / -b | 否 | 事件描述 |
--location / -l | 否 | 地点 |
--category / -c | 否 | 分类标签(可多次指定) |
列出未来事件:
python "C:\Users\johnx\.qclaw\skills\windows-calendar-sync\scripts\calendar_sync.py" list --days 7
删除事件:
python "C:\Users\johnx\.qclaw\skills\windows-calendar-sync\scripts\calendar_sync.py" delete <event_id>
将自然语言时间转换为 ISO 8601:
| 用户输入 | 解析结果 | 示例 |
|---|---|---|
| 明天 10 点 | 2026-04-13T10:00:00 | |
| 今天下午 3 点半 | 2026-04-12T15:30:00 | |
| 下周一早上9点 | 下一个周一 09:00 | |
| 周五 18:00 | 本周/下周周五 18:00 | 结合当前日期判断 |
| 2 小时后 | 当前时间 + 2h |
时区:始终使用 Asia/Shanghai(中国用户),Windows 上自动检测本地时区。
创建定时提醒时,建议同时做两件事:
示例 — 用户说「每天早上 8 点提醒我做运动」:
# 1. 创建 cron 任务(精确提醒)
cron.schedule("0 8 * * *", message="运动时间到!💪", repeat="daily")
# 2. 写入日历(可视化作息安排)
# 调用 calendar_sync.py:
python "C:\Users\johnx\.qclaw\skills\windows-calendar-sync\scripts\calendar_sync.py" add `
--title "🏃 运动时间" `
--start "2026-04-13T08:00:00" `
--duration 60 `
--reminder 10
scripts/token_store.json,不要移动或删除Calendars.ReadWrite,不读写邮件或文件webLink,可直接在浏览器打开| 问题 | 解决方案 |
|---|---|
access_token 获取失败 | 运行 authenticate.py 重新认证 |
| Token 已过期 | 删除 token_store.json,重新运行 authenticate.py |
| 事件时间显示错误 | 确认 --start 使用 ISO 8601 格式,带 T 分隔符 |
| 提醒没响 | 检查 Outlook/Windows 日历的通知权限是否开启 |
| 想删除事件但不知道 ID | 先运行 list 命令查找事件 ID |