ClawSkills logoClawSkills

Lark Calendar & Tasks

在 Lark (飞书) 中创建、更新和删除日历事件及任务。包含员工通讯录,可自动将姓名解析为 user_id。

介绍

# Lark Calendar & Task Skill

在 Lark (飞书) 中创建、更新和删除日历事件及任务。

## 概述

该技能提供以下内容的完整 CRUD 操作: - **日历事件** — 会议、预约、日程 - **任务** — 带有截止日期的行动项

## 配置

**所需环境变量**(位于 `.secrets.env` 中): ```bash FEISHU_APP_ID=cli_a9f52a4ed7b8ded4 FEISHU_APP_SECRET=<your-app-secret> ```

**默认日历:** `[email protected]` (Claw 日历)

**默认时区:** `Asia/Singapore`

## 快速参考

### 创建日历事件

```bash node skills/lark-calendar/scripts/create-event.mjs \ --title "Meeting with Team" \ --description "Discuss Q2 roadmap" \ --start "2026-02-03 14:00:00" \ --end "2026-02-03 15:00:00" \ --attendees "Boyang,RK" \ --location "Meeting Room A" ```

**参数:** | 参数 | 必需 | 描述 | |-------|----------|-------------| | `--title` | ✅ | 事件标题 | | `--description` | ❌ | 事件描述 | | `--start` | ✅ | 开始时间 (YYYY-MM-DD HH:MM:SS) | | `--end` | ✅ | 结束时间 (YYYY-MM-DD HH:MM:SS) | | `--attendees` | ❌ | 逗号分隔的姓名 (自动解析为 user_ids) | | `--attendee-ids` | ❌ | 直接使用逗号分隔的 user_ids | | `--location` | ❌ | 事件地点 | | `--timezone` | ❌ | 时区 (默认: Asia/Singapore) | | `--calendar` | ❌ | 日历 ID (如省略则使用默认值) |

### 更新日历事件

```bash node skills/lark-calendar/scripts/update-event.mjs \ --event-id "f9900f6b-b472-4b17-a818-7b5584abdc37_0" \ --title "Updated Title" \ --start "2026-02-03 15:00:00" \ --end "2026-02-03 16:00:00" ```

### 删除日历事件

```bash node skills/lark-calendar/scripts/delete-event.mjs \ --event-id "f9900f6b-b472-4b17-a818-7b5584abdc37_0" ```

### 列出日历事件

```bash # List events for next 7 days node skills/lark-calendar/scripts/list-events.mjs

# List events in date range node skills/lark-calendar/scripts/list-events.mjs \ --start "2026-02-01" \ --end "2026-02-28" ```

### 创建任务

```bash node skills/lark-calendar/scripts/create-task.mjs \ --title "Review PR #123" \ --description "Code review for authentication module" \ --due "2026-02-05 18:00:00" \ --assignees "Boyang,jc" ```

**参数:** | 参数 | 必需 | 描述 | |-------|----------|-------------| | `--title` | ✅ | 任务标题 | | `--description` | ❌ | 任务描述 | | `--due` | ✅ | 截止日期 (YYYY-MM-DD HH:MM:SS) | | `--assignees` | ❌ | 逗号分隔的姓名 (自动解析) | | `--assignee-ids` | ❌ | 直接使用逗号分隔的 user_ids | | `--timezone` | ❌ | 时区 (默认: Asia/Singapore) |

### 更新任务

```bash node skills/lark-calendar/scripts/update-task.mjs \ --task-id "35fc5310-a1b1-49c7-be75-be631d3079ee" \ --title "Updated Task" \ --due "2026-02-06 18:00:00" ```

### 删除任务

```bash node skills/lark-calendar/scripts/delete-task.mjs \ --task-id "35fc5310-a1b1-49c7-be75-be631d3079ee" ```

### 管理事件参与者

```bash # Add attendees node skills/lark-calendar/scripts/manage-attendees.mjs \ --event-id "xxx" --add "RK,jc"

# Remove attendees node skills/lark-calendar/scripts/manage-attendees.mjs \ --event-id "xxx" --remove "jc" ```

### 管理任务成员

```bash # Add members node skills/lark-calendar/scripts/manage-task-members.mjs \ --task-id "xxx" --add "RK,jc"

# Remove members node skills/lark-calendar/scripts/manage-task-members.mjs \ --task-id "xxx" --remove "jc" ```

## 员工名录

姓名会自动解析为 Lark user_ids。支持的姓名:

| user_id | 姓名 | 角色 | |---------|-------|------| | `dgg163e1` | Boyang, by, 博洋 | Boss | | `gb71g28b` | RK | Leadership, R&D | | `53gc5724` | Ding | Leadership, Operations | | `217ec2c2` | Charline | HR | | `f2bfd283` | 曾晓玲, xiaoling | HR | | `f26fe45d` | HH | Research | | `45858f91` | zan, Eva | - | | `7f79b6de` | Issac | Operations | | `1fb2547g` | 王铁柱 | Operations | | `e5997acd` | 尼克, Nico | Operations | | `438c3c1f` | Ivan | Operations | | `17g8bab2` | Dodo | R&D, Product | | `73b45ec5` | 启超, QiChaoShi | R&D, Design | | `d1978a39` | chenglin | R&D, Frontend | | `ef6fc4a7` | 冠林, Green | R&D, Frontend | | `b47fa8f2` | sixian, sx, Sixian-Yu | R&D, Frontend | | `934fbf15` | jc, sagiri, 俊晨 | R&D, Backend | | `8c4aad87` | 大明, daming | R&D, Backend | | `ab87g5e1` | Emily Yobal | Intern | | `55fa337f` | jingda, 景达 | Intern | | `333c7cf1` | 刘纪源, 纪源, Aiden | Intern |

## 业务规则

1. **Boyang 会被自动添加** 为每个日历事件的参与者(自动操作) 2. **时区处理:** 使用 IANA 标识符 (例如 `Asia/Singapore`, `Asia/Shanghai`) 3. **时间格式:** 始终为 `YYYY-MM-DD HH:MM:SS` 4. **user_id vs open_id:** 该技能使用 `user_id` 格式 (例如 `dgg163e1`),而非 `open_id` (例如 `ou_xxx`)

## 编程方式使用

```javascript import { createEvent, updateEvent, deleteEvent } from './skills/lark-calendar/lib/calendar.mjs'; import { createTask, updateTask, deleteTask } from './skills/lark-calendar/lib/task.mjs'; import { resolveNames } from './skills/lark-calendar/lib/employees.mjs';

// Create event const result = await createEvent({ title: 'Team Sync', description: 'Weekly standup', startTime: '2026-02-03 10:00:00', endTime: '2026-02-03 10:30:00', attendeeIds: ['dgg163e1', 'gb71g28b'], location: 'Zoom', timezone: 'Asia/Singapore' });

// Create task const task = await createTask({ title: 'Review document', description: 'Q2 planning doc', dueTime: '2026-02-05 18:00:00', assigneeIds: ['dgg163e1'], timezone: 'Asia/Singapore' }); ```

## Lark API 参考

- [日历事件 API](https://open.larksuite.com/document/server-docs/calendar-v4/calendar-event/create) - [日历参与者 API](https://open.larksuite.com/document/server-docs/calendar-v4/calendar-event-attendee/create) - [任务 API](https://open.larksuite.com/document/server-docs/task-v2/task/create)

## 所需权限

确保您的 Lark 应用拥有以下权限范围: - `calendar:calendar` — 读写日历 ✅ (已启用) - `calendar:calendar:readonly` — 读取日历 ✅ (已启用) - `task:task:write` — 写入任务 ⚠️ (需要添加以创建任务) - `task:task:read` — 读取任务 - `contact:user.employee_id:readonly` — 读取用户信息 ✅ (已启用)

**添加权限步骤:** 1. 前往 [Lark 开放平台](https://open.larksuite.com/app/cli_a9f52a4ed7b8ded4/auth) 2. 添加权限范围:`task:task:write`, `contact:contact:readonly` (用于动态员工查找) 3. 重新发布应用版本

**注意:** 如果没有 `contact:contact:readonly`,该技能将使用静态的备用员工列表。团队变动时请更新 `lib/employees.mjs`。

更多产品