dingtalk-feishu-sync-schedule

# dingtalk-feishu-sync-schedule

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "dingtalk-feishu-sync-schedule" with this command: npx skills add alittlebao/dingtalk-feishu-sync-schedule

dingtalk-feishu-sync-schedule

功能:将钉钉日历日程同步到飞书日历(钉钉 → 飞书,单向) 同步范围:本周(今天 + 未来6天) 定时同步:每天 09:00 / 12:00 / 15:00 自动执行


执行同步

python3 /root/.openclaw/workspace/skills/dingtalk-feishu-sync-schedule/sync_week_ahead.py

脚本自动处理:

  • 获取钉钉本周所有日程(过滤已取消)
  • 刷新飞书 access_token(自动检测,过期刷新)
  • 清理飞书旧同步日程(根据描述含"从钉钉自动同步"判断)
  • 重建所有日程到飞书

保护机制:手动创建的飞书日程不会被删除(只删带同步标记的)


配置文件

钉钉 ~/.dingtalk/config.json

字段说明
app_key钉钉应用 Key,从 OpenClaw 配置自动读取
app_secret钉钉应用 Secret,从 OpenClaw 配置自动读取
user_id钉钉 unionid,Agent 根据用户手机号自动获取并填充

飞书 ~/.feishu/config.json

字段说明
app_id飞书应用 ID,从 OpenClaw 配置自动读取
app_secret飞书应用 Secret,从 OpenClaw 配置自动读取
user_open_id飞书用户 open_id,从 OpenClaw 配置自动读取
calendar_id飞书日历 ID,Agent 自动获取并填充
access_token运行时 token,Agent 自动管理
refresh_token刷新凭证,用户授权后 Agent 自动获取

首次配置流程

当配置文件缺失或不完整时,按以下步骤引导用户:

Step 0: 开通应用权限

在开始配置前,需在钉钉和飞书开放平台分别为两个应用开通日历相关权限:

钉钉应用(需管理员权限)

登录 钉钉开放平台 → 找到对应应用 → 权限管理 → 开通以下权限:

  • Calendarcalendar:calendar:read (读取日历)
  • Calendarcalendar:calendar:write (写入日历)

飞书应用(需管理员权限)

登录 飞书开放平台 → 找到对应应用 → 权限管理 → 开通以下权限:

  • calendar:calendar:read (读取日历)
  • calendar:calendar:write (写入日历)

如果应用为企业内部自用,需确认管理员已审批通过上述权限申请。权限开通后约5分钟生效。

Step 1: 初始化配置

python3 /root/.openclaw/workspace/skills/dingtalk-feishu-sync-schedule/scripts/init_config.py

钉钉配置读取优先级:

  1. ~/.dingtalk/config.json — 优先读取
  2. ~/.openclaw/openclaw.json — 缺失时自动补充并回写 dingtalk/config.json
  3. 仍缺失 → 提示用户输入

飞书配置:从 ~/.openclaw/openclaw.json 读取,写入 ~/.feishu/config.json

Step 2: 获取钉钉 unionid

Agent 询问用户提供以下任一信息:

方式1: 直接提供 unionid 用户直接输入 unionid,Agent 直接写入 ~/.dingtalk/config.json,跳过 API 调用。

方式2: 提供手机号 Agent 调用钉钉 API 获取 unionid 后写入配置:

API 1: 通过手机号获取 userid

POST https://oapi.dingtalk.com/topapi/v2/user/getbymobile?access_token={access_token}
Body: {"mobile": "用户手机号"}

access_token 通过 GET https://api.dingtalk.com/v1.0/oauth2/accessToken 获取(Body: {"appKey":"app_key","appSecret":"app_secret"}

API 2: 通过 userid 获取 unionid

POST https://oapi.dingtalk.com/topapi/v2/user/get?access_token={access_token}
Body: {"language": "zh_CN", "userid": "Step1返回的userid"}

获取后自动写入 ~/.dingtalk/config.jsonuser_id 字段。

Step 3: 飞书授权(获取 refresh_token)

生成授权链接(app_id 从配置文件读取):

https://open.feishu.cn/open-apis/authen/v1/index?app_id={app_id}&scope=calendar:calendar:read%20calendar:calendar:write&redirect_uri=https://example.com

引导用户访问链接,授权后将 url 中 ?code=xxx 的 code 部分给 Agent。

用 code 换取 refresh_token

POST https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal
Body: {"app_id": "xxx", "app_secret": "xxx"}

再用返回的 app_access_token 调用:

POST https://open.feishu.cn/open-apis/authen/v1/oidc/access_token
Body: {"app_access_token": "xxx", "grant_type": "authorization_code", "code": "用户给的code"}

返回的 refresh_token 自动写入配置文件。

Step 4: 获取 calendar_id

Agent 通过飞书 API 获取用户主日历 ID,自动写入配置文件。

Step 5: 验证

运行同步脚本验证配置正确性。


Token 管理

Token 类型有效期刷新方式
钉钉 access_token2小时每次同步自动获取(新token)
飞书 access_token2小时脚本自动检测,过期调用 refresh API
飞书 refresh_token30天过期后需重新授权(见上文 Step 3)

手动刷新飞书 token

python3 /root/.openclaw/workspace/skills/dingtalk-feishu-sync-schedule/utils/refresh_token.py

定时任务

查看

crontab -l | grep dingtalk

编辑

crontab -e

当前配置:

0 9,12,15 * * * /usr/bin/python3 /root/.openclaw/workspace/skills/dingtalk-feishu-sync-schedule/sync_week_ahead.py >> /var/log/dingtalk_sync.log 2>&1

日志

tail -f /var/log/dingtalk_sync.log

故障排查

症状可能原因处理方式
同步失败/钉钉日程获取为空unionid 错误或已失效重新执行 Step 2 获取 unionid
飞书日程创建失败access_token 过期手动刷新 token
refresh_token 过期超过30天未授权重新授权(Step 3)
日程时间差8小时时区问题检查脚本时区逻辑,API 返回时间已做 +08:00 转换
飞书日历空白calendar_id 指向错误日历重新获取 calendar_id

调试

直接运行脚本,查看实时输出:

python3 /root/.openclaw/workspace/skills/dingtalk-feishu-sync-schedule/sync_week_ahead.py

安全须知

  • 配置文件中的 app_secret / refresh_token 不可外泄
  • 脚本不打印任何 token 实际值(只打印前10位用于确认)
  • 同步日志不包含敏感信息
  • 所有敏感凭证仅存储在本地配置文件,不硬编码在脚本中

关键 API

钉钉

  • POST https://api.dingtalk.com/v1.0/oauth2/accessToken — 获取 access_token
  • GET https://api.dingtalk.com/v1.0/calendar/users/{unionId}/calendars/primary/events — 获取日历事件列表

飞书

  • POST https://open.feishu.cn/open-apis/authen/v1/refresh_access_token — 刷新 access_token
  • GET https://open.feishu.cn/open-apis/calendar/v4/calendars/{calendarId}/events — 获取日历事件
  • POST https://open.feishu.cn/open-apis/calendar/v4/calendars/{calendarId}/events — 创建日历事件
  • DELETE https://open.feishu.cn/open-apis/calendar/v4/calendars/{calendarId}/events/{eventId} — 删除日历事件

文件结构

dingtalk-feishu-sync-schedule/
├── sync_week_ahead.py         # 主同步脚本
├── scripts/
│   ├── config_loader.py      # 配置加载器
│   └── init_config.py        # 初始化脚本(从 openclaw.json 读取凭证)
├── utils/
│   └── refresh_token.py      # 飞书 token 刷新工具
└── SKILL.md                  # 本文件

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Huo15 Openclaw Enhance

火一五·克劳德·龙虾增强插件 v5.7.8 — 全面适配 openclaw 2026.4.24:peerDep ^4.24 + build/compat 同步到 4.24 + 14 处 api.on 全部去掉 as any 改成 typed hook(hookName 联合类型 + handler 自动推断 Pl...

Registry SourceRecently Updated
General

Content Trend Analyzer

Aggregates and analyzes content trends across platforms to identify hot topics, user intent, content gaps, and generates data-driven article outlines.

Registry SourceRecently Updated
General

Prompt Debugger

Debug prompts that produce unexpected AI outputs — diagnose failure modes, identify ambiguity and conflicting instructions, test variations, compare model re...

Registry SourceRecently Updated
General

Indie Maker News

独行者 Daily - 变现雷达。读对一条新闻,少走一年弯路。每天5分钟,给创业者装上商业雷达。聚焦一人公司、副业、创业变现资讯,智能分类,行动导向。用户下载即能用,无需本地部署!

Registry SourceRecently Updated