Install
openclaw skills install @myd2002/feishu-ingestPoll Feishu groups for new messages, download message resources, read Feishu docs/wiki/sheets/bitables, compile message-source markdown, judge which chat segments are worth preserving, and ingest valuable materials into the Research KB through a prepare/apply workflow.
openclaw skills install @myd2002/feishu-ingest把飞书群作为可定时扫描资料源处理。prepare 拉取增量群消息、下载消息资源、读取飞书云文档、把普通群消息编译成可定位的 Markdown 源文件,并输出供 OpenClaw 分析的 inputItems[]。apply 校验 OpenClaw 生成的页面、归档源文件、写入 Gitea 知识库、更新 catalog.json / index.md,并返回 sourceItems[] 给后端持久化。当前“群文件”来自群消息历史里的 file/image 等 message resource;不单独爬取群文件目录,飞书文件夹消息记录为 unsupported。
不要伪造飞书内容。缺少凭据、机器人不在群、无权限读取消息/文件/文档时,返回 need_authorization 或明确错误。飞书文件夹和超大文件记录为 unsupported。
飞书内容往往是碎片化线索,入库前必须先判断它在知识库图谱里的位置。写 pages.json 前,OpenClaw 应私下做一次知识图谱规划:哪些文件/文档/消息片段值得成为实体页,哪些已有 overview/、projects/、concepts/、resources/ 或其他页面需要补充新证据和跳转。不要把低价值聊天硬写成页面,也不要把稳定概念、具体资源或团队导航更新遗漏掉。
当前 scripts/ 只保留真实入口和依赖:
run_task.py:唯一命令入口,提供 prepare 和 apply 子命令。feishu_reader.py:prepare 主逻辑,拉消息、处理附件/云文档/消息片段、生成分析上下文。kb_writer.py:apply 主逻辑,校验 sourceItemKeys、归档源文件、写页面/catalog/index、生成 sourceItems[]。feishu_platform.py:飞书开放平台客户端,负责 token、消息历史、消息资源、Doc/Wiki/Sheet/Bitable 读取。text_extractors.py:本地文件文本预览,支持文本、CSV/JSON/YAML/代码、DOCX、PPTX、XLSX、PDF 可选解析、ZIP 清单。gitea_api.py:Gitea 内容读写客户端,支持 dry-run。catalog.py:catalog 合并、索引渲染、图关系归一。task_io.py:payload/result JSON 读写。utils.py:hash、slug、frontmatter 清理、关键词、路径安全等通用函数。旧探索脚本已删除;飞书读取统一走 feishu_platform.py,知识库写入统一走 kb_writer.py。
环境变量:
FEISHU_APP_IDFEISHU_APP_SECRETGITEA_URLGITEA_BOT_TOKENGITEA_BOT_USERNAME 或 GITEA_ORGTEAM_KB_REPO可选:
OPENCLAW_SHARED_DIR:token 缓存、prepare 临时文件和中间上下文目录。飞书应用需要机器人能力、机器人已进群、读取群消息历史权限、读取群消息资源权限。读取云文档还需要对应 Doc/Wiki/Sheet/Bitable 权限和文档授权。
后端资料源会传入:
source.config.chatId / openChatId / open_chat_id:飞书群 ID。scanIntervalMinutes:后端定时扫描间隔。initialLookbackHours:首次扫描回扫窗口,默认 168 小时。maxMessages:每轮最多拉取消息数,默认 200。messageSegmentWindowMinutes:把相邻群消息编译成一个消息源文件的时间窗口,默认 10 分钟。maxMessagesPerSegment:每个消息源文件最多包含的消息数,默认 12。maxFileSizeMb:单个群文件进入分析的最大体积,上限 100MB。includeFiles / includeMessages / includeDocuments:是否处理群文件、普通群消息、飞书云文档。fetchRecentMessages=false:只处理后端传入的 source.items[],不主动拉群消息。urls / docUrls / wikiUrls / tokens / documents / links:额外飞书文档、Wiki、表格、多维表格 URL 或 token。source.lastSnapshot.lastMessageCreateTime:上一轮处理到的消息创建时间,prepare 用它做增量游标。运行:
python3 scripts/run_task.py prepare --input <payload.json> --context-output <context.json>
prepare 输出:
inputItems[]:OpenClaw 需要分析的候选资料。sourceItems[]:prepare 阶段已经确定为跳过、无权限、失败、暂不支持的资料项。instructions.analysisTemplates:每种资料类型的分析模板。skipResult:没有新候选资料时直接写给后端的成功结果;如果没有写入任何页面且 sourceItems[] 中存在 need_authorization 或 fetch_failed,后端会把任务标记为 failed 并保留 result/sourceItems 作为诊断。inputItems[] 类型:
sourceKind=feishu_file:群消息里的文件/图片等下载资源,required=true。后续按本地文件同样思路分析,并归档原始文件。sourceKind=feishu_document:飞书云文档/Wiki/Sheet/Bitable 编译出的 Markdown 源,required=true。sourceKind=feishu_message_segment:按时间窗口整理后的群消息片段,required=false。源文件包含发送时间、message_id、sender、消息原文和机器可读定位。强制规则:
required=true 的 input item 必须出现在至少一个页面的 sourceItemKeys 中。notes/。sourceItemKeys。不要写 source_files/,源文件归档由 apply 完成。qa/ 页面。overview/、concepts/、resources/、projects/ 等相关页面时,要在正文里写 Markdown 链接,并维护 relatedConcepts / relatedResources / relatedCodePages / relatedPages。relatedPages 用于 overview、项目、论文、综述、会议、实验、技术文档、笔记等普通 Wiki 页面之间的关联。运行:
python3 scripts/run_task.py apply --input <payload.json> --context <context.json> --pages <pages.json>
apply 会:
sourceItemKeys。source_files/feishu/<sourceId>/files/。source_files/feishu/<sourceId>/messages/。source_files/feishu/<sourceId>/documents/。catalog.json、index.md。sourceItems[],标记每个资料项为 ingested、skipped、need_authorization、fetch_failed 或 unsupported。papers/ 论文/技术报告适用:论文 PDF、arXiv、会议论文、技术报告。覆盖:摘要、研究问题、方法、数据/实验、主要结论、局限、可复用点、相关概念与资源。
surveys/ 综述/调研适用:行业调研、文献综述、方案对比、landscape。覆盖:范围、分类框架、对比表、趋势、空白/争议、推荐阅读、相关概念与资源。优先做结构化比较。
projects/ 项目/需求/方案适用:需求文档、项目计划、路线图、方案评审。覆盖:背景、目标、范围、里程碑、关键决策、风险、下一步、相关页面。
code/ 代码/仓库/接口适用:代码文件、仓库说明、API 文档、SDK、脚本。覆盖:仓库/模块、架构、入口、关键 API、运行/部署、风险与 TODO、相关概念。
meetings/ 会议/讨论适用:会议纪要、长讨论、同步会摘要。覆盖:背景、讨论要点、决策、行动项、开放问题、相关页面。不要逐字转写。
experiments/ 实验/评测适用:实验记录、benchmark、ablation、结果表、失败复盘。覆盖:假设、设置、指标、结果、分析、复现信息、后续实验。
tech-notes/ 技术笔记/排障适用:部署手册、配置说明、排障过程、命令记录。覆盖:问题、环境、步骤、配置、排错、参考、相关页面。
notes/ 群消息沉淀适用:经过价值判断的普通群消息片段。覆盖:背景、要点、结论/价值、后续动作、消息定位。消息定位至少包含时间范围和 message_id。
concepts/ 概念页适用:从资料中抽出的稳定概念、方法、术语。覆盖:定义、使用场景、相关方法、常见误区、相关资源。概念页要链接回支撑资料页。
resources/ 资源页适用:工具、链接、数据集、附件、图片、暂不能深度解析但值得登记的资料。覆盖:资源是什么、内容摘要、使用方法、适用场景、限制、相关页面。
overview/ 总览/导航页适用:飞书消息或文档显著改变团队级主题导航、项目资料地图、阶段性资料包、研究方向入口或跨资料综合时。覆盖:主题边界、相关实体页、关键概念/资源、当前状态、待补证据。没有明确导航或综合价值时不要硬建 overview。
成功结果必须包含:
{
"success": true,
"processedSources": ["source-item-key"],
"createdPages": [],
"updatedPages": [],
"archivedFiles": [],
"skippedSources": [],
"errors": [],
"commitId": "",
"snapshot": { "lastMessageCreateTime": 0 },
"sourceItems": []
}
sourceItems[] 每项尽量包含:itemKey、sourceKind/kind、status、title、sha256、relativePath/originalPath、archivedPath、url、externalId、messageTime、size、lastError、metadata。前端飞书资料源卡片中的资料项状态统计来自后端持久化后的 source_items 累计数据;最新游标/消息/候选数来自本轮 snapshot。
如果没有新增消息、文件或文档,prepare 可以直接写入成功的 skip result。若只有普通群消息且 OpenClaw 判断都不值得入库,apply 允许 pages: [] 并更新快照,避免下轮重复处理。