with one click
读取飞书 IM 消息。支持会话历史和跨会话搜索。
npx skills add https://github.com/hashSTACS-Global/EnClaws --skill feishu-im-readCopy and paste this command into Claude Code to install the skill
读取飞书 IM 消息。支持会话历史和跨会话搜索。
npx skills add https://github.com/hashSTACS-Global/EnClaws --skill feishu-im-readCopy and paste this command into Claude Code to install the skill
通过飞书交互式卡片向用户提问并等待回答。支持单选、多选和自由文本输入。工具调用后立即返回,用户答案将以新消息形式回传。
为当前用户完成飞书个人 OAuth 授权。在任何会话过程中,当需要用户授权时,始终执行本技能的授权流程。
飞书多维表格管理。支持创建/查询/更新应用、数据表、字段、记录和视图的完整操作。
飞书日历与日程管理。支持日程 CRUD、参与者管理、忙闲查询。
飞书群组管理。支持按关键词搜索群组、获取群详情、列出群成员(排除机器人)。使用当前用户个人 OAuth token。
创建飞书云文档。使用当前用户的个人 OAuth token。标题须与用户输入逐字一致;成功回复含 Markdown 文档链接。
| name | feishu-im-read |
| description | 读取飞书 IM 消息。支持会话历史和跨会话搜索。 |
| overrides | feishu_im_user_get_messages, feishu_im_user_search_messages, feishu_im_user_get_thread_messages, feishu_pre_auth |
| inline | true |
模块兼容:所有脚本均提供
.js和.mjs两个版本。优先使用.js,若报require is not defined错误则改用同名.mjs文件。
直接用 exec 执行,不要检查文件或环境。
使用 tenant_access_token,机器人必须在群组中。
node ./im-read.js --action "get_messages" --open-id "SENDER_OPEN_ID" --chat-id "oc_xxx"
可选:--thread-id "omt_xxx" --relative-time "today" --start-time "ISO8601" --end-time "ISO8601" --sort-rule "create_time_asc" --page-size 20 --page-token "xxx"
使用 user_access_token。
node ./im-read.js --action "search_messages" --open-id "SENDER_OPEN_ID" --query "关键词"
可选:--chat-id "oc_xxx" --sender-ids "ou_xxx,ou_yyy" --message-type "file" --chat-type "group"
| 参数 | 何时询问 |
|---|---|
--chat-id / --target-open-id | 用户未指明会话(当前会话 chat_id 可从上下文获取) |
--query | search_messages 时未提供关键词 |
若返回 {"error":"auth_required"} 或 {"error":"permission_required"},不要询问用户是否授权,直接立即执行以下命令发送授权链接:
required_scopes 字段,将其数组值用空格拼接后传入 --scope 参数:node ../feishu-auth/auth.js --auth-and-poll --open-id "SENDER_OPEN_ID" --chat-id "CHAT_ID" --timeout 60 --scope "<required_scopes 用空格拼接>"
若返回中不包含 required_scopes,则不加 --scope 参数(使用默认权限)。
{"status":"authorized"} → 重新执行原始命令
{"status":"polling_timeout"} → 立即重新执行此 auth 命令(不会重复发卡片)
CHAT_ID 不知道可省略
若返回中包含 "auth_type":"tenant",说明需要管理员在飞书开放平台开通应用权限,必须将 reply 字段内容原样发送给用户。
机器人拿到消息 content 后,按下列规则判别,严格按 kind 分派,不要跨层调用:
| 识别特征 | kind | 后续动作 |
|---|---|---|
msg_type === "folder"(content: {file_key, file_name},file_key 前缀 file_v3_0110n_) | im_folder_attachment | ❌ 不可下载。走下方"文件夹附件兜底"话术,禁止把 file_v3_... 当 folder_token 调云盘 API,禁止拿 file_name 去云盘搜索 |
msg_type === "file" 且 file_name 以 .zip / .tar.gz / .tgz / .rar / .7z 结尾 | im_archive | 调 feishu-im-file-analyze(自动下载 + 解压 + 逐文件抽文本) |
msg_type === "file"(其他单个文件,file_key 前缀 file_v3_0010n_) | im_file | 调 feishu-im-file-analyze(支持 pdf/docx/pptx/xlsx/... 等) |
正文含 /drive/folder/[A-Za-z0-9]+(纯字母数字 token,非 file_ 前缀) | drive_folder_link | 提取 folder_token → 调 feishu-drive / feishu-search-doc |
正文含 /wiki/[A-Za-z0-9]+ | wiki_node_link | 提取 node_token → 走 wiki 路径 |
| 其他 | plain_text | 按文本处理 |
权威字段是
msg_type。早期文档说"msg_type 枚举不含 folder"并不正确——实测飞书 API 会返回msg_type: "folder",content 形如{"file_key":"file_v3_0110n_xxx","file_name":"..."},与msg_type=file格式一致,仅靠 content 字段无法区分,必须看msg_type。file_key 前缀0110n(folder)vs0010n(file)可作次要判据。
IM file_key(以 file_ 开头,如 file_v3_0110n_...)⇄ 云盘 folder_token(纯字母数字、无前缀)是两套独立 ID 体系。飞书 /drive/* skill 已在入口硬拒绝 file_* 前缀的 token,传入会直接 invalid_folder_token_im_file_key 报错。改前缀、换格式都不通——根本不在同一个命名空间里。
im_folder_attachment)识别到此类消息后,立即回复以下内容,禁止尝试任何云盘查询:
📁 收到文件夹消息「{name}」。
当前飞书 open API 未公开
msg_type=folder附件的下载接口(尝试走im:resource会报 234003File not in msg.),机器人无法直接读取内部文件。请改用以下任一方式:
- 本地把文件夹压缩为 .zip 后发给我(最省事,zip 是标准附件可直接读)
- 把文件夹上传到飞书云盘 → 右键"分享" → 把
https://xxx.feishu.cn/drive/folder/xxx链接发给我- 把里面的文件逐个发送
file_v3_... 当 folder_token 调 /drive/v1/files → 必然失败/drive/v1/files → 拿到云盘根目录列表<folder name> 里的展示名去云盘搜索,把无关结果凑上当关联