Agentic-feishu feishu-cal
飞书日历日程管理。用于创建、查看、更新、删除日程,邀请参会人。当用户提到会议(会议/开会)、日程(日程/排期)、日历、约时间、邀请人时触发。日历回答「什么时候在哪做什么」——需要到场的时间锚定事件。
install
source · Clone the upstream repo
git clone https://github.com/MidnightV1/agentic-feishu
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/MidnightV1/agentic-feishu "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/feishu_cal" ~/.claude/skills/midnightv1-agentic-feishu-feishu-cal && rm -rf "$T"
manifest:
skills/feishu_cal/SKILL.mdsource content
Feishu Calendar
Bot 拥有独立日历,创建的日程用户可见。涉及用户的事件必须将用户加为 attendee 才能同步到用户日历。
与 feishu-task 的边界:日历管理时间锚点(有开始/结束、需要"在场"的事件),任务管理承诺追踪(有状态流转、需要"做完"的事项)。重叠时:如"周三 14:00 面试候选人"建日历事件,如果还有准备工作("面试前看简历")额外建任务。
Time Formats
所有时间参数均使用 Asia/Shanghai 时区。
| 格式 | 示例 | 说明 |
|---|---|---|
| ISO | | 标准格式,首选 |
| 日期+时间 | | 等同于 ISO |
| 仅时间 | | 今天该时刻;若已过则顺延到明天 |
| tomorrow | | 明天指定时刻 |
| 相对偏移 | / | 从当前时刻起偏移 |
CLI 调用方式
cd ~/Agent\ Space/agentic-feishu && python3 tools/builtin/skill_cal.py <action> --params '<json>'
示例:
python3 tools/builtin/skill_cal.py list --params '{"days": 7}'
Actions
调用方式:
python3 tools/builtin/skill_cal.py <action> --params '<json>'
-
create — 创建日程。params:
。必须将请求用户(消息上下文中的 open_id)加为参会人,确保日程出现在用户日历中。创建后必须告知用户(标题 + 时间)。{summary, start_time, end_time, description?, attendees?}
接受:CSV 字符串、字符串列表、或字典列表(自动提取 open_id),代码自动归一化为字符串列表。attendees -
list — 列出近期日程。params:
。返回未来 N 天的事件列表。{days?=7} -
update — 更新日程。params:
。只传需要修改的字段。不支持通过 update 修改参会人,必须用 add_attendees / remove_attendees。{event_id, summary?, start_time?, end_time?, description?} -
delete — 删除日程。params:
。两阶段确认:第一次调用(不传{event_id, confirmed?}
或confirmed
)返回确认提示,不执行删除;第二次调用传confirmed=false
才真正删除。confirmed=true -
freebusy — 查询空闲/忙碌状态。params:
。{start_time, end_time, user_ids?}
为逗号分隔的 open_id 字符串或列表;不传则查 Bot 自身日历。user_ids -
list_attendees — 列出日程参会人。params:
。返回参会人列表,含{event_id}
(记录 ID)、attendee_id
(open_id)、user_id
、display_name
。status -
add_attendees — 添加参会人到已有日程。params:
。{event_id, attendee_ids}
为 open_id(逗号分隔字符串或列表)。attendee_ids -
remove_attendees — 移除日程参会人。params:
。CRITICAL:{event_id, attendee_ids}
必须是attendee_ids
返回的list_attendees
(内部记录 ID),不是 open_id。必须先调attendee_id
获取正确 ID。list_attendees
Coded Behaviors
以下由 Python 代码自动处理,无需在调用时特殊处理:
- Attendee 归一化:
/attendees
传入字符串、字典、或混合列表均自动提取为 open_id 字符串列表;CSV 字符串自动拆分attendee_ids - user_ids CSV:
的freebusy
传逗号分隔字符串时自动拆分为列表user_ids - 删除确认门控:
未传delete
时只返回提示文本,不触发 API 调用confirmed=true
Params Examples
# 创建日程,邀请两位参会人 feishu_cal("create", {"summary": "周会", "start_time": "2026-03-03T10:00", "end_time": "2026-03-03T11:00", "attendees": ["ou_xxx", "ou_yyy"]}) # 列出未来 3 天日程 feishu_cal("list", {"days": 3}) # 删除日程(第二阶段,已确认) feishu_cal("delete", {"event_id": "xxx", "confirmed": true}) # 移除参会人(attendee_ids 来自 list_attendees 的 attendee_id 字段,非 open_id) feishu_cal("remove_attendees", {"event_id": "xxx", "attendee_ids": "attendee_record_id_1,attendee_record_id_2"})
Limitations
不支持修改参会人,需单独调update
/add_attendeesremove_attendees
必须用remove_attendees
(记录 ID),误传 open_id 会失败,必须先attendee_idlist_attendees- 联系人管理(contact add/list/sync)待实现,当前 attendees 直接传 open_id