cc-lark 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +47 -0
- package/.github/workflows/release.yml +47 -0
- package/.github/workflows/sync-upstream.yml +127 -0
- package/.prettierrc.json +7 -0
- package/README.md +214 -0
- package/dist/core/api-error.d.ts +193 -0
- package/dist/core/api-error.d.ts.map +1 -0
- package/dist/core/api-error.js +263 -0
- package/dist/core/api-error.js.map +1 -0
- package/dist/core/auth-errors.d.ts +13 -0
- package/dist/core/auth-errors.d.ts.map +1 -0
- package/dist/core/auth-errors.js +14 -0
- package/dist/core/auth-errors.js.map +1 -0
- package/dist/core/config.d.ts +60 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +115 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/device-flow.d.ts +80 -0
- package/dist/core/device-flow.d.ts.map +1 -0
- package/dist/core/device-flow.js +231 -0
- package/dist/core/device-flow.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lark-client.d.ts +136 -0
- package/dist/core/lark-client.d.ts.map +1 -0
- package/dist/core/lark-client.js +315 -0
- package/dist/core/lark-client.js.map +1 -0
- package/dist/core/token-store.d.ts +67 -0
- package/dist/core/token-store.d.ts.map +1 -0
- package/dist/core/token-store.js +215 -0
- package/dist/core/token-store.js.map +1 -0
- package/dist/core/types.d.ts +286 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +11 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/uat-client.d.ts +64 -0
- package/dist/core/uat-client.d.ts.map +1 -0
- package/dist/core/uat-client.js +227 -0
- package/dist/core/uat-client.js.map +1 -0
- package/dist/core/version.d.ts +26 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +50 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +116 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/bitable/app.d.ts +20 -0
- package/dist/tools/bitable/app.d.ts.map +1 -0
- package/dist/tools/bitable/app.js +301 -0
- package/dist/tools/bitable/app.js.map +1 -0
- package/dist/tools/bitable/field.d.ts +19 -0
- package/dist/tools/bitable/field.d.ts.map +1 -0
- package/dist/tools/bitable/field.js +315 -0
- package/dist/tools/bitable/field.js.map +1 -0
- package/dist/tools/bitable/index.d.ts +21 -0
- package/dist/tools/bitable/index.d.ts.map +1 -0
- package/dist/tools/bitable/index.js +39 -0
- package/dist/tools/bitable/index.js.map +1 -0
- package/dist/tools/bitable/record.d.ts +22 -0
- package/dist/tools/bitable/record.d.ts.map +1 -0
- package/dist/tools/bitable/record.js +434 -0
- package/dist/tools/bitable/record.js.map +1 -0
- package/dist/tools/bitable/table.d.ts +21 -0
- package/dist/tools/bitable/table.d.ts.map +1 -0
- package/dist/tools/bitable/table.js +361 -0
- package/dist/tools/bitable/table.js.map +1 -0
- package/dist/tools/calendar/calendar.d.ts +18 -0
- package/dist/tools/calendar/calendar.d.ts.map +1 -0
- package/dist/tools/calendar/calendar.js +192 -0
- package/dist/tools/calendar/calendar.js.map +1 -0
- package/dist/tools/calendar/event.d.ts +20 -0
- package/dist/tools/calendar/event.d.ts.map +1 -0
- package/dist/tools/calendar/event.js +465 -0
- package/dist/tools/calendar/event.js.map +1 -0
- package/dist/tools/calendar/index.d.ts +19 -0
- package/dist/tools/calendar/index.d.ts.map +1 -0
- package/dist/tools/calendar/index.js +37 -0
- package/dist/tools/calendar/index.js.map +1 -0
- package/dist/tools/chat/chat.d.ts +11 -0
- package/dist/tools/chat/chat.d.ts.map +1 -0
- package/dist/tools/chat/chat.js +106 -0
- package/dist/tools/chat/chat.js.map +1 -0
- package/dist/tools/chat/index.d.ts +11 -0
- package/dist/tools/chat/index.d.ts.map +1 -0
- package/dist/tools/chat/index.js +20 -0
- package/dist/tools/chat/index.js.map +1 -0
- package/dist/tools/chat/members.d.ts +9 -0
- package/dist/tools/chat/members.d.ts.map +1 -0
- package/dist/tools/chat/members.js +80 -0
- package/dist/tools/chat/members.js.map +1 -0
- package/dist/tools/common/get-user.d.ts +11 -0
- package/dist/tools/common/get-user.d.ts.map +1 -0
- package/dist/tools/common/get-user.js +112 -0
- package/dist/tools/common/get-user.js.map +1 -0
- package/dist/tools/common/index.d.ts +11 -0
- package/dist/tools/common/index.d.ts.map +1 -0
- package/dist/tools/common/index.js +20 -0
- package/dist/tools/common/index.js.map +1 -0
- package/dist/tools/common/search-user.d.ts +9 -0
- package/dist/tools/common/search-user.d.ts.map +1 -0
- package/dist/tools/common/search-user.js +88 -0
- package/dist/tools/common/search-user.js.map +1 -0
- package/dist/tools/doc/create.d.ts +17 -0
- package/dist/tools/doc/create.d.ts.map +1 -0
- package/dist/tools/doc/create.js +159 -0
- package/dist/tools/doc/create.js.map +1 -0
- package/dist/tools/doc/fetch.d.ts +17 -0
- package/dist/tools/doc/fetch.d.ts.map +1 -0
- package/dist/tools/doc/fetch.js +123 -0
- package/dist/tools/doc/fetch.js.map +1 -0
- package/dist/tools/doc/index.d.ts +21 -0
- package/dist/tools/doc/index.d.ts.map +1 -0
- package/dist/tools/doc/index.js +33 -0
- package/dist/tools/doc/index.js.map +1 -0
- package/dist/tools/doc/shared.d.ts +69 -0
- package/dist/tools/doc/shared.d.ts.map +1 -0
- package/dist/tools/doc/shared.js +172 -0
- package/dist/tools/doc/shared.js.map +1 -0
- package/dist/tools/doc/update.d.ts +25 -0
- package/dist/tools/doc/update.d.ts.map +1 -0
- package/dist/tools/doc/update.js +208 -0
- package/dist/tools/doc/update.js.map +1 -0
- package/dist/tools/drive/file.d.ts +13 -0
- package/dist/tools/drive/file.d.ts.map +1 -0
- package/dist/tools/drive/file.js +212 -0
- package/dist/tools/drive/file.js.map +1 -0
- package/dist/tools/drive/index.d.ts +12 -0
- package/dist/tools/drive/index.d.ts.map +1 -0
- package/dist/tools/drive/index.js +25 -0
- package/dist/tools/drive/index.js.map +1 -0
- package/dist/tools/im/format-messages.d.ts +99 -0
- package/dist/tools/im/format-messages.d.ts.map +1 -0
- package/dist/tools/im/format-messages.js +277 -0
- package/dist/tools/im/format-messages.js.map +1 -0
- package/dist/tools/im/helpers.d.ts +53 -0
- package/dist/tools/im/helpers.d.ts.map +1 -0
- package/dist/tools/im/helpers.js +85 -0
- package/dist/tools/im/helpers.js.map +1 -0
- package/dist/tools/im/index.d.ts +25 -0
- package/dist/tools/im/index.d.ts.map +1 -0
- package/dist/tools/im/index.js +44 -0
- package/dist/tools/im/index.js.map +1 -0
- package/dist/tools/im/message-read.d.ts +19 -0
- package/dist/tools/im/message-read.d.ts.map +1 -0
- package/dist/tools/im/message-read.js +526 -0
- package/dist/tools/im/message-read.js.map +1 -0
- package/dist/tools/im/message.d.ts +22 -0
- package/dist/tools/im/message.d.ts.map +1 -0
- package/dist/tools/im/message.js +233 -0
- package/dist/tools/im/message.js.map +1 -0
- package/dist/tools/im/resource.d.ts +19 -0
- package/dist/tools/im/resource.d.ts.map +1 -0
- package/dist/tools/im/resource.js +185 -0
- package/dist/tools/im/resource.js.map +1 -0
- package/dist/tools/im/time-utils.d.ts +70 -0
- package/dist/tools/im/time-utils.d.ts.map +1 -0
- package/dist/tools/im/time-utils.js +277 -0
- package/dist/tools/im/time-utils.js.map +1 -0
- package/dist/tools/index.d.ts +85 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +135 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/oauth.d.ts +15 -0
- package/dist/tools/oauth.d.ts.map +1 -0
- package/dist/tools/oauth.js +379 -0
- package/dist/tools/oauth.js.map +1 -0
- package/dist/tools/search/doc-search.d.ts +9 -0
- package/dist/tools/search/doc-search.d.ts.map +1 -0
- package/dist/tools/search/doc-search.js +219 -0
- package/dist/tools/search/doc-search.js.map +1 -0
- package/dist/tools/search/index.d.ts +11 -0
- package/dist/tools/search/index.d.ts.map +1 -0
- package/dist/tools/search/index.js +18 -0
- package/dist/tools/search/index.js.map +1 -0
- package/dist/tools/sheets/index.d.ts +11 -0
- package/dist/tools/sheets/index.d.ts.map +1 -0
- package/dist/tools/sheets/index.js +18 -0
- package/dist/tools/sheets/index.js.map +1 -0
- package/dist/tools/sheets/sheet.d.ts +11 -0
- package/dist/tools/sheets/sheet.d.ts.map +1 -0
- package/dist/tools/sheets/sheet.js +332 -0
- package/dist/tools/sheets/sheet.js.map +1 -0
- package/dist/tools/task/index.d.ts +12 -0
- package/dist/tools/task/index.d.ts.map +1 -0
- package/dist/tools/task/index.js +30 -0
- package/dist/tools/task/index.js.map +1 -0
- package/dist/tools/task/task.d.ts +13 -0
- package/dist/tools/task/task.d.ts.map +1 -0
- package/dist/tools/task/task.js +225 -0
- package/dist/tools/task/task.js.map +1 -0
- package/dist/tools/task/tasklist.d.ts +13 -0
- package/dist/tools/task/tasklist.d.ts.map +1 -0
- package/dist/tools/task/tasklist.js +206 -0
- package/dist/tools/task/tasklist.js.map +1 -0
- package/dist/tools/wiki/index.d.ts +11 -0
- package/dist/tools/wiki/index.d.ts.map +1 -0
- package/dist/tools/wiki/index.js +20 -0
- package/dist/tools/wiki/index.js.map +1 -0
- package/dist/tools/wiki/node.d.ts +11 -0
- package/dist/tools/wiki/node.d.ts.map +1 -0
- package/dist/tools/wiki/node.js +112 -0
- package/dist/tools/wiki/node.js.map +1 -0
- package/dist/tools/wiki/space.d.ts +11 -0
- package/dist/tools/wiki/space.d.ts.map +1 -0
- package/dist/tools/wiki/space.js +125 -0
- package/dist/tools/wiki/space.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +36 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +101 -0
- package/dist/utils/logger.js.map +1 -0
- package/eslint.config.js +13 -0
- package/package.json +54 -0
- package/skills/feishu-bitable/SKILL.md +248 -0
- package/skills/feishu-bitable/references/examples.md +813 -0
- package/skills/feishu-bitable/references/field-properties.md +763 -0
- package/skills/feishu-bitable/references/record-values.md +911 -0
- package/skills/feishu-calendar/SKILL.md +244 -0
- package/skills/feishu-channel-rules/SKILL.md +18 -0
- package/skills/feishu-channel-rules/references/markdown-syntax.md +138 -0
- package/skills/feishu-create-doc/SKILL.md +719 -0
- package/skills/feishu-fetch-doc/SKILL.md +93 -0
- package/skills/feishu-im-read/SKILL.md +163 -0
- package/skills/feishu-task/SKILL.md +293 -0
- package/skills/feishu-troubleshoot/SKILL.md +70 -0
- package/skills/feishu-update-doc/SKILL.md +285 -0
- package/src/core/api-error.ts +342 -0
- package/src/core/auth-errors.ts +27 -0
- package/src/core/config.ts +134 -0
- package/src/core/device-flow.ts +314 -0
- package/src/core/index.ts +16 -0
- package/src/core/lark-client.ts +391 -0
- package/src/core/token-store.ts +249 -0
- package/src/core/types.ts +302 -0
- package/src/core/uat-client.ts +298 -0
- package/src/core/version.ts +53 -0
- package/src/index.ts +138 -0
- package/src/tools/bitable/app.ts +390 -0
- package/src/tools/bitable/field.ts +406 -0
- package/src/tools/bitable/index.ts +43 -0
- package/src/tools/bitable/record.ts +559 -0
- package/src/tools/bitable/table.ts +472 -0
- package/src/tools/calendar/calendar.ts +254 -0
- package/src/tools/calendar/event.ts +606 -0
- package/src/tools/calendar/index.ts +41 -0
- package/src/tools/chat/chat.ts +127 -0
- package/src/tools/chat/index.ts +24 -0
- package/src/tools/chat/members.ts +93 -0
- package/src/tools/common/get-user.ts +127 -0
- package/src/tools/common/index.ts +24 -0
- package/src/tools/common/search-user.ts +99 -0
- package/src/tools/doc/create.ts +184 -0
- package/src/tools/doc/fetch.ts +149 -0
- package/src/tools/doc/index.ts +38 -0
- package/src/tools/doc/shared.ts +228 -0
- package/src/tools/doc/update.ts +240 -0
- package/src/tools/drive/file.ts +265 -0
- package/src/tools/drive/index.ts +29 -0
- package/src/tools/im/format-messages.ts +391 -0
- package/src/tools/im/helpers.ts +109 -0
- package/src/tools/im/index.ts +49 -0
- package/src/tools/im/message-read.ts +676 -0
- package/src/tools/im/message.ts +303 -0
- package/src/tools/im/resource.ts +225 -0
- package/src/tools/im/time-utils.ts +347 -0
- package/src/tools/index.ts +205 -0
- package/src/tools/oauth.ts +460 -0
- package/src/tools/search/doc-search.ts +250 -0
- package/src/tools/search/index.ts +22 -0
- package/src/tools/sheets/index.ts +22 -0
- package/src/tools/sheets/sheet.ts +382 -0
- package/src/tools/task/index.ts +34 -0
- package/src/tools/task/task.ts +265 -0
- package/src/tools/task/tasklist.ts +262 -0
- package/src/tools/wiki/index.ts +24 -0
- package/src/tools/wiki/node.ts +131 -0
- package/src/tools/wiki/space.ts +152 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/logger.ts +132 -0
- package/tests/core/config.test.ts +238 -0
- package/tests/core/device-flow.test.ts +490 -0
- package/tests/core/lark-client.test.ts +378 -0
- package/tests/core/token-store.test.ts +438 -0
- package/tests/index.test.ts +360 -0
- package/tests/tools/doc/create.test.ts +224 -0
- package/tests/tools/doc/fetch.test.ts +182 -0
- package/tests/tools/doc/shared.test.ts +183 -0
- package/tests/tools/doc/update.test.ts +330 -0
- package/tests/tools/im/format-messages.test.ts +184 -0
- package/tests/tools/im/time-utils.test.ts +178 -0
- package/tests/utils/logger.test.ts +140 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feishu-calendar
|
|
3
|
+
description: |
|
|
4
|
+
飞书日历与日程管理工具集。包含日历管理、日程管理、参会人管理、忙闲查询。
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 飞书日历管理 (feishu-calendar)
|
|
8
|
+
|
|
9
|
+
## 🚨 执行前必读
|
|
10
|
+
|
|
11
|
+
- ✅ **时区固定**:Asia/Shanghai(UTC+8)
|
|
12
|
+
- ✅ **时间格式**:ISO 8601 / RFC 3339(带时区),例如 `2026-02-25T14:00:00+08:00`
|
|
13
|
+
- ✅ **create 最小必填**:summary, start_time, end_time
|
|
14
|
+
- ✅ **user_open_id 强烈建议**:从 SenderId 获取(ou_xxx),确保用户能看到日程
|
|
15
|
+
- ✅ **ID 格式约定**:用户 `ou_...`,群 `oc_...`,会议室 `omm_...`,邮箱 `email@...`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 📋 快速索引:意图 → 工具 → 必填参数
|
|
20
|
+
|
|
21
|
+
| 用户意图 | 工具 | action | 必填参数 | 强烈建议 | 常用可选 |
|
|
22
|
+
|---------|------|--------|---------|---------|---------|
|
|
23
|
+
| 创建会议 | feishu_calendar_event | create | summary, start_time, end_time | user_open_id | attendees, description, location |
|
|
24
|
+
| 查某时间段日程 | feishu_calendar_event | list | start_time, end_time | - | - |
|
|
25
|
+
| 改日程时间 | feishu_calendar_event | patch | event_id, start_time/end_time | - | summary, description |
|
|
26
|
+
| 搜关键词找会 | feishu_calendar_event | search | query | - | - |
|
|
27
|
+
| 回复邀请 | feishu_calendar_event | reply | event_id, rsvp_status | - | - |
|
|
28
|
+
| 查重复日程实例 | feishu_calendar_event | instances | event_id, start_time, end_time | - | - |
|
|
29
|
+
| 查忙闲 | feishu_calendar_freebusy | list | time_min, time_max, user_ids[] | - | - |
|
|
30
|
+
| 邀请参会人 | feishu_calendar_event_attendee | create | calendar_id, event_id, attendees[] | - | - |
|
|
31
|
+
| 删除参会人 | feishu_calendar_event_attendee | batch_delete | calendar_id, event_id, user_open_ids[] | - | - |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 🎯 核心约束(Schema 未透露的知识)
|
|
36
|
+
|
|
37
|
+
### 1. user_open_id 为什么必填?
|
|
38
|
+
|
|
39
|
+
**工具使用用户身份**:日程创建在用户主日历上,用户本人能看到。
|
|
40
|
+
|
|
41
|
+
**但为什么还要传 user_open_id**:将发起人也添加为**参会人**,确保:
|
|
42
|
+
- ✅ 发起人会收到日程通知
|
|
43
|
+
- ✅ 发起人可以回复 RSVP 状态(接受/拒绝/待定)
|
|
44
|
+
- ✅ 发起人出现在参会人列表中
|
|
45
|
+
- ✅ 其他参会人能看到发起人
|
|
46
|
+
|
|
47
|
+
**如果不传**:
|
|
48
|
+
- ⚠️ 用户能看到日程,但不会作为参会人
|
|
49
|
+
- ⚠️ 如果只有其他参会人,发起人不在列表中(不符合常规逻辑)
|
|
50
|
+
|
|
51
|
+
### 2. 参会人权限(attendee_ability)
|
|
52
|
+
|
|
53
|
+
工具已默认设置 `attendee_ability: "can_modify_event"`,参会人可以编辑日程和管理参与者。
|
|
54
|
+
|
|
55
|
+
| 权限值 | 能力 |
|
|
56
|
+
|--------|------|
|
|
57
|
+
| `none` | 无权限 |
|
|
58
|
+
| `can_see_others` | 可查看参与人列表 |
|
|
59
|
+
| `can_invite_others` | 可邀请他人 |
|
|
60
|
+
| `can_modify_event` | 可编辑日程(推荐) |
|
|
61
|
+
|
|
62
|
+
### 3. 统一使用 open_id(ou_...格式)
|
|
63
|
+
|
|
64
|
+
- ✅ 创建日程:`user_open_id = SenderId`
|
|
65
|
+
- ✅ 邀请参会人:`attendees[].id = "ou_xxx"`
|
|
66
|
+
- ✅ 删除参会人:`user_open_ids = ["ou_xxx"]`(工具已优化,直接传 open_id 即可)
|
|
67
|
+
|
|
68
|
+
⚠️ **ID 格式区分**:
|
|
69
|
+
- `ou_xxx`:用户的 open_id(**你应该使用的**)
|
|
70
|
+
- `user_xxx`:日程内部的 attendee_id(list 接口返回,仅用于内部记录)
|
|
71
|
+
|
|
72
|
+
### 4. 会议室预约是异步流程
|
|
73
|
+
|
|
74
|
+
添加会议室类型参会人后,会议室进入异步预约流程:
|
|
75
|
+
1. API 返回成功 → `rsvp_status: "needs_action"`(预约中)
|
|
76
|
+
2. 后台异步处理
|
|
77
|
+
3. 最终状态:`accept`(成功)或 `decline`(失败)
|
|
78
|
+
|
|
79
|
+
**查询预约结果**:使用 `feishu_calendar_event_attendee.list` 查看 `rsvp_status`。
|
|
80
|
+
|
|
81
|
+
### 5. instances action 仅对重复日程有效
|
|
82
|
+
|
|
83
|
+
**⚠️ 重要**:`instances` action **仅对重复日程有效**,必须满足:
|
|
84
|
+
1. event_id 必须是重复日程的 ID(该日程具有 `recurrence` 字段)
|
|
85
|
+
2. 如果对普通日程调用,会返回错误
|
|
86
|
+
|
|
87
|
+
**如何判断**:
|
|
88
|
+
1. 先用 `get` action 获取日程详情
|
|
89
|
+
2. 检查返回值中是否有 `recurrence` 字段且不为空
|
|
90
|
+
3. 如果有,则可以调用 `instances` 获取实例列表
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## 📌 使用场景示例
|
|
95
|
+
|
|
96
|
+
### 场景 1: 创建会议并邀请参会人
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"action": "create",
|
|
101
|
+
"summary": "项目复盘会议",
|
|
102
|
+
"description": "讨论 Q1 项目进展",
|
|
103
|
+
"start_time": "2026-02-25 14:00:00",
|
|
104
|
+
"end_time": "2026-02-25 15:30:00",
|
|
105
|
+
"user_open_id": "ou_aaa",
|
|
106
|
+
"attendees": [
|
|
107
|
+
{"type": "user", "id": "ou_bbb"},
|
|
108
|
+
{"type": "user", "id": "ou_ccc"},
|
|
109
|
+
{"type": "resource", "id": "omm_xxx"}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### 场景 2: 查询用户未来一周的日程
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"action": "list",
|
|
119
|
+
"start_time": "2026-02-25 00:00:00",
|
|
120
|
+
"end_time": "2026-03-03 23:59:00"
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 场景 3: 查看多个用户的忙闲时间
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"action": "list",
|
|
129
|
+
"time_min": "2026-02-25 09:00:00",
|
|
130
|
+
"time_max": "2026-02-25 18:00:00",
|
|
131
|
+
"user_ids": ["ou_aaa", "ou_bbb", "ou_ccc"]
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**注意**:user_ids 是数组,支持 1-10 个用户。当前不支持会议室忙闲查询。
|
|
136
|
+
|
|
137
|
+
### 场景 4: 修改日程时间
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"action": "patch",
|
|
142
|
+
"event_id": "xxx_0",
|
|
143
|
+
"start_time": "2026-02-25 15:00:00",
|
|
144
|
+
"end_time": "2026-02-25 16:00:00"
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### 场景 5: 搜索日程(按关键词)
|
|
149
|
+
|
|
150
|
+
```json
|
|
151
|
+
{
|
|
152
|
+
"action": "search",
|
|
153
|
+
"query": "项目复盘"
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 场景 6: 回复日程邀请
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
{
|
|
161
|
+
"action": "reply",
|
|
162
|
+
"event_id": "xxx_0",
|
|
163
|
+
"rsvp_status": "accept"
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
## 🔍 常见错误与排查
|
|
170
|
+
|
|
171
|
+
| 错误现象 | 根本原因 | 解决方案 |
|
|
172
|
+
|---------|---------|---------|
|
|
173
|
+
| **发起人不在参会人列表中** | 未传 `user_open_id` | 强烈建议传 `user_open_id = SenderId` |
|
|
174
|
+
| **参会人看不到其他参会人** | `attendee_ability` 权限不足 | 工具已默认设置 `can_modify_event` |
|
|
175
|
+
| **时间不对** | 使用了 Unix 时间戳 | 改用 ISO 8601 格式(带时区):`2024-01-01T00:00:00+08:00` |
|
|
176
|
+
| **会议室显示"预约中"** | 会议室预约是异步的 | 等待几秒后用 `list` 查询 `rsvp_status` |
|
|
177
|
+
| **修改日程报权限错误** | 当前用户不是组织者,且日程未设置可编辑权限 | 确保日程创建时设置了 `attendee_ability: "can_modify_event"` |
|
|
178
|
+
| **无法查看参会人列表** | 当前用户无查看权限 | 确保是组织者或日程设置了 `can_see_others` 以上权限 |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 📚 附录:背景知识
|
|
183
|
+
|
|
184
|
+
### A. 日历架构模型
|
|
185
|
+
|
|
186
|
+
飞书日历采用 **三层架构**:
|
|
187
|
+
```
|
|
188
|
+
日历(Calendar)
|
|
189
|
+
└── 日程(Event)
|
|
190
|
+
└── 参会人(Attendee)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**关键理解**:
|
|
194
|
+
1. **用户主日历**:日程创建在发起用户的主日历上,用户本人能看到
|
|
195
|
+
2. **参会人机制**:通过添加参会人(attendee),让其他人的日历中也显示此日程
|
|
196
|
+
3. **权限模型**:日程的 `attendee_ability` 参数控制参会人能否编辑日程、邀请他人、查看参与人列表
|
|
197
|
+
|
|
198
|
+
### B. 参会人类型
|
|
199
|
+
|
|
200
|
+
- `type: "user"` + `id: "ou_xxx"` — 飞书用户(使用 open_id)
|
|
201
|
+
- `type: "chat"` + `id: "oc_xxx"` — 飞书群组
|
|
202
|
+
- `type: "resource"` + `id: "omm_xxx"` — 会议室
|
|
203
|
+
- `type: "third_party"` + `id: "email@example.com"` — 外部邮箱
|
|
204
|
+
|
|
205
|
+
### C. 日程的生命周期
|
|
206
|
+
|
|
207
|
+
1. **创建**:在用户主日历上创建日程(工具使用用户身份)
|
|
208
|
+
2. **邀请参会人**:通过 attendee API 将日程分享给其他参会人
|
|
209
|
+
3. **参会人回复**:参会人可以 accept/decline/tentative
|
|
210
|
+
4. **修改**:组织者或有权限的参会人可以修改
|
|
211
|
+
5. **删除**:删除后状态变为 `cancelled`
|
|
212
|
+
|
|
213
|
+
### D. 日历类型说明
|
|
214
|
+
|
|
215
|
+
| 类型 | 说明 | 能否删除 | 能否修改 |
|
|
216
|
+
|------|------|---------|---------|
|
|
217
|
+
| `primary` | 主日历(每个用户/应用一个) | ❌ 否 | ✅ 是 |
|
|
218
|
+
| `shared` | 共享日历(用户创建并共享) | ✅ 是 | ✅ 是 |
|
|
219
|
+
| `resource` | 会议室日历 | ❌ 否 | ❌ 否 |
|
|
220
|
+
| `google` | 绑定的 Google 日历 | ❌ 否 | ❌ 否 |
|
|
221
|
+
| `exchange` | 绑定的 Exchange 日历 | ❌ 否 | ❌ 否 |
|
|
222
|
+
|
|
223
|
+
### E. 回复状态(rsvp_status)说明
|
|
224
|
+
|
|
225
|
+
| 状态 | 含义(用户) | 含义(会议室) |
|
|
226
|
+
|------|------------|---------------|
|
|
227
|
+
| `needs_action` | 未回复 | 预约中 |
|
|
228
|
+
| `accept` | 已接受 | 预约成功 |
|
|
229
|
+
| `tentative` | 待定 | - |
|
|
230
|
+
| `decline` | 拒绝 | 预约失败 |
|
|
231
|
+
| `removed` | 已被移除 | 已被移除 |
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
### F. 使用限制(来自飞书 OAPI 文档)
|
|
235
|
+
|
|
236
|
+
1. **每个日程最多 3000 名参会人**
|
|
237
|
+
2. **单次添加参会人上限**:
|
|
238
|
+
- 用户类参会人:1000 人
|
|
239
|
+
- 会议室:100 个
|
|
240
|
+
3. **主日历不可删除**(type 为 primary 的日历)
|
|
241
|
+
4. **会议室预约可能失败**:
|
|
242
|
+
- 时间冲突
|
|
243
|
+
- 无预约权限
|
|
244
|
+
- 会议室配置限制
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: feishu-channel-rules
|
|
3
|
+
description: |
|
|
4
|
+
Lark/Feishu channel output rules. Always active in Lark conversations.
|
|
5
|
+
alwaysActive: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Lark Output Rules
|
|
9
|
+
|
|
10
|
+
## Writing Style
|
|
11
|
+
|
|
12
|
+
- Short, conversational, low ceremony — talk like a coworker, not a manual
|
|
13
|
+
- Prefer plain sentences over bullet lists when a brief answer suffices
|
|
14
|
+
- Get to the point and stop — no need for a summary paragraph every time
|
|
15
|
+
|
|
16
|
+
## Note
|
|
17
|
+
|
|
18
|
+
- Lark Markdown differs from standard Markdown in some ways; when unsure, refer to `references/markdown-syntax.md`
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# 飞书 Markdown 语法参考
|
|
2
|
+
|
|
3
|
+
> 本文件是飞书消息卡片支持的完整 Markdown 语法参考,供需要时查阅。
|
|
4
|
+
|
|
5
|
+
## 1. 标题
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
#### 四级标题
|
|
9
|
+
##### 五级标题
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
- **不支持**一二三级标题(`#`、`##`、`###`),会导致卡片显示异常
|
|
13
|
+
- 可用加粗替代标题效果
|
|
14
|
+
|
|
15
|
+
## 2. 换行
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
第一行\n第二行
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 3. 文本样式
|
|
22
|
+
|
|
23
|
+
| 语法 | 效果 |
|
|
24
|
+
|------|------|
|
|
25
|
+
| `**加粗**` | **加粗** |
|
|
26
|
+
| `*斜体*` | *斜体* |
|
|
27
|
+
| `~~删除线~~` | ~~删除线~~ |
|
|
28
|
+
|
|
29
|
+
> **注意**:加粗中间的内容只能是中文或英文,不能有中文符号或表情符号
|
|
30
|
+
|
|
31
|
+
## 4. 链接
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
[链接文本](https://www.example.com)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 5. @指定人
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
<at id=id_01></at>
|
|
41
|
+
<at ids=id_01,id_02,xxx></at>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- 用户的 id 必须是用户给你的,不能瞎编
|
|
45
|
+
- 可能是:以 `ou_` 开头的字符串、不超过 10 位的字符串、邮箱
|
|
46
|
+
|
|
47
|
+
## 6. 超链接
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
<a href='https://open.feishu.cn'></a>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 7. 彩色文本
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
<font color='green'>绿色文本</font>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
> 颜色枚举:`neutral`, `blue`, `turquoise`, `lime`, `orange`, `violet`, `wathet`, `green`, `yellow`, `red`, `purple`, `carmine`
|
|
60
|
+
|
|
61
|
+
## 8. 文字链接
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
<a href='https://open.feishu.cn'>这是文字链接</a>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## 9. 图片
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+

|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
> image_key 不支持 http 链接
|
|
74
|
+
|
|
75
|
+
## 10. 分割线
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
---
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 11. 标签
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
<text_tag color='red'>标签文本</text_tag>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
颜色枚举:`neutral`, `blue`, `turquoise`, `lime`, `orange`, `violet`, `wathet`, `green`, `yellow`, `red`, `purple`, `carmine`
|
|
88
|
+
|
|
89
|
+
## 12. 有序列表
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
1. 一级列表①
|
|
93
|
+
1.1 二级列表
|
|
94
|
+
1.2 二级列表
|
|
95
|
+
2. 一级列表②
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- 序号需在行首使用,序号后要跟空格
|
|
99
|
+
- 4 个空格代表一层缩进
|
|
100
|
+
|
|
101
|
+
## 13. 无序列表
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
- 一级列表①
|
|
105
|
+
- 二级列表
|
|
106
|
+
- 一级列表②
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
- 4 个空格代表一层缩进
|
|
110
|
+
- `-` 后面要跟空格
|
|
111
|
+
|
|
112
|
+
## 14. 代码块
|
|
113
|
+
|
|
114
|
+
````
|
|
115
|
+
```JSON
|
|
116
|
+
{"This is": "JSON demo"}
|
|
117
|
+
```
|
|
118
|
+
````
|
|
119
|
+
|
|
120
|
+
- 支持指定编程语言解析
|
|
121
|
+
- 未指定默认为 Plain Text
|
|
122
|
+
|
|
123
|
+
## 15. 人员组件
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
<person id='user_id' show_name=true show_avatar=true style='normal'></person>
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
- `show_name`:是否展示用户名(默认 true)
|
|
130
|
+
- `show_avatar`:是否展示用户头像(默认 true)
|
|
131
|
+
- `style`:展示样式(`normal`:普通样式,`capsule`:胶囊样式)
|
|
132
|
+
- **注意**:person 标签不能嵌套在 font 中
|
|
133
|
+
|
|
134
|
+
## 16. 数字角标
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
<number_tag background_color='grey' font_color='white' url='https://open.feishu.cn' pc_url='https://open.feishu.cn' android_url='https://open.feishu.cn' ios_url='https://open.feishu.cn'>1</number_tag>
|
|
138
|
+
```
|