diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md b/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md index b06ae1e1..4185a6db 100755 --- a/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md +++ b/02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md @@ -1,7 +1,7 @@ --- name: 飞书管理 -description: 飞书日志/文档自动写入与知识库管理 -triggers: 飞书日志、写入飞书、飞书知识库、飞书运营报表、派对效果数据、104场写入、运营报表填写、派对截图填表发群、Excel写飞书、批量写飞书表格、表格日报 +description: 飞书日志/文档自动写入与知识库管理(含统一文章上传) +triggers: 飞书日志、写入飞书、飞书知识库、飞书运营报表、派对效果数据、104场写入、运营报表填写、派对截图填表发群、Excel写飞书、批量写飞书表格、表格日报、飞书文章上传、MD转飞书JSON、同标题更新飞书 owner: 水桥 group: 水 version: "1.1" @@ -279,6 +279,36 @@ python3 scripts/wanzhi_feishu_project_sync.py --- +## 统一文章上传(强制唯一入口) + +以后凡是“写文章并上传飞书”,统一走这一条,不再分散用旧脚本。 + +### 一键命令(推荐) + +```bash +python3 /Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_article_unified_publish.py \ + --parent MyvRwCVNSiTg5ok6e3fc6uA5nHg \ + --title "文章标题" \ + --md "/绝对路径/文章.md" \ + --json "/绝对路径/文章_feishu_blocks.json" \ + --webhook "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" +``` + +### 统一规则(已固化进脚本) + +1. **先本地转 JSON**:`md_to_feishu_json.py`,自动清理分隔线/空块,减少飞书样式杂乱和报错。 +2. **同标题优先更新**:在父节点下命中同名/相似标题时更新,不重复新建。 +3. **支持图片上传**:读取 `image_paths` 上传到文档素材。 +4. **图片块失败兜底**:若飞书 API 对图片块返回 `invalid param`,正文照常写入,图片保留在文档素材(可手动插入)。 + +### 当前已验证经验(线上) + +- 飞书 docx 接口在当前租户中,`block_type 12/18/27` 图片块都可能返回 `1770001 invalid param`。 +- 因此采用“**正文稳定写入 + 图片素材保留 + 可手动插图**”作为稳定方案。 +- 后续若飞书放开该能力,再切回全自动嵌图。 + +--- + ## Wiki 子文档创建(日记分享 / 新研究) 在指定飞书 Wiki 节点下创建子文档,用于日记分享、新研究等内容沉淀。 @@ -316,6 +346,9 @@ JSON 格式:与 `团队入职流程与新人登记表_feishu_blocks.json` 相 ├── feishu_video_clip_README.md ├── wanzhi_feishu_project_sync.py # 玩值电竞→飞书项目同步 ├── feishu_wiki_create_doc.py # Wiki 子文档创建(日记/研究) + ├── md_to_feishu_json.py # Markdown -> 飞书 blocks JSON(美观清洗) + ├── feishu_publish_blocks_with_images.py # 同标题更新 + 图片上传 + 发布 + ├── feishu_article_unified_publish.py # 统一入口:文章发布(推荐唯一) └── .feishu_tokens.json # Token 存储 ``` @@ -351,5 +384,5 @@ python3 /Users/karuo/Documents/个人/卡若AI/02_卡人(水)/飞书管理/s --- -**版本**: v3.3 | **更新**: 2026-02-20 -**特性**: 静默授权、倒序插入、TNTWF规范、四象限分类、**写入完成后自动打开飞书日志页面**、**运营报表子技能(截图→填表→发群竖状格式、会议纪要图片上传、月度统计)** +**版本**: v3.4 | **更新**: 2026-02-25 +**特性**: 静默授权、倒序插入、TNTWF规范、四象限分类、**写入完成后自动打开飞书日志页面**、**运营报表子技能(截图→填表→发群竖状格式、会议纪要图片上传、月度统计)**、**统一文章上传(MD->JSON->飞书,同标题优先更新,支持图片上传)** diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json index 8cdb7262..76bb1654 100644 --- a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/.feishu_tokens.json @@ -1,6 +1,6 @@ { - "access_token": "u-4RmqO0mFN44EsJhMOG0bsrl5mqW5k1iVWEaaIMQ00xD2", - "refresh_token": "ur-60CxwKhnldVH9Bd5qTDYxnl5mMW5k1MjgEaaZBQ00Ay6", + "access_token": "u-57b3lfJ8Z7XH0uHVO_Tnx2l5moqBk1qXXEaaFAM00wS6", + "refresh_token": "ur-579x5jnChbCqtQoGJxgcPpl5moMBk1Uph8aaEBw00xzj", "name": "飞书用户", - "auth_time": "2026-02-25T05:55:28.028336" + "auth_time": "2026-02-25T05:58:38.159179" } \ No newline at end of file diff --git a/02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_article_unified_publish.py b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_article_unified_publish.py new file mode 100644 index 00000000..df668388 --- /dev/null +++ b/02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_article_unified_publish.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +""" +统一入口:本地 Markdown 文章发布到飞书 Wiki(先转 JSON,再发布) + +能力: +1) MD -> 飞书 blocks JSON(自动美化:去分隔线、清理空块、弱化复杂 Markdown) +2) 同名/相似标题优先更新,不新建重复文档 +3) 自动上传图片(来自 image_paths),图片块失败时保底写正文并保留文档素材 +4) 可选 webhook 发群 + +用法: +python3 feishu_article_unified_publish.py \ + --parent MyvRwCVNSiTg5ok6e3fc6uA5nHg \ + --title "卡若:xxx" \ + --md "/abs/path/article.md" \ + --json "/abs/path/article_feishu_blocks.json" \ + --webhook "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" +""" + +import argparse +import subprocess +import sys +from pathlib import Path + + +ROOT = Path("/Users/karuo/Documents/个人/卡若AI") +MD2JSON = ROOT / "02_卡人(水)/水桥_平台对接/飞书管理/脚本/md_to_feishu_json.py" +PUBLISH = ROOT / "02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_publish_blocks_with_images.py" + + +def run(cmd: list[str]) -> None: + print("▶", " ".join(cmd)) + p = subprocess.run(cmd, text=True) + if p.returncode != 0: + raise SystemExit(p.returncode) + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument("--parent", required=True, help="飞书 Wiki 父节点 token") + ap.add_argument("--title", required=True, help="文档标题(同名/相似会更新)") + ap.add_argument("--md", required=True, help="Markdown 文章路径") + ap.add_argument("--json", required=True, help="输出 blocks JSON 路径") + ap.add_argument("--webhook", default="", help="飞书群 webhook(可选)") + args = ap.parse_args() + + md_path = Path(args.md).expanduser().resolve() + json_path = Path(args.json).expanduser().resolve() + if not md_path.exists(): + raise SystemExit(f"❌ MD 不存在: {md_path}") + json_path.parent.mkdir(parents=True, exist_ok=True) + + # Step 1: 本地转 JSON + run(["python3", str(MD2JSON), str(md_path), str(json_path)]) + + # Step 2: 发布(同标题优先更新) + cmd = [ + "python3", str(PUBLISH), + "--parent", args.parent, + "--title", args.title, + "--json", str(json_path), + ] + if args.webhook: + cmd.extend(["--webhook", args.webhook]) + run(cmd) + + print("✅ 统一发布完成") + + +if __name__ == "__main__": + main() + diff --git a/02_卡人(水)/水溪_整理归档/经验库/待沉淀/2026-02-25_飞书文章统一上传_Skill经验.md b/02_卡人(水)/水溪_整理归档/经验库/待沉淀/2026-02-25_飞书文章统一上传_Skill经验.md new file mode 100644 index 00000000..94884dc5 --- /dev/null +++ b/02_卡人(水)/水溪_整理归档/经验库/待沉淀/2026-02-25_飞书文章统一上传_Skill经验.md @@ -0,0 +1,49 @@ +# 2026-02-25 飞书文章统一上传(Skill 经验沉淀) + +## 一、目标 + +把“写文章上传飞书”统一成一条稳定链路: + +`Markdown -> 飞书 blocks JSON -> 同标题更新/发布 -> 图片上传 -> 发群` + +以后统一走 `飞书管理` Skill,不再分散用临时脚本。 + +## 二、统一入口(唯一推荐) + +脚本: + +`02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_article_unified_publish.py` + +能力: + +1. 先本地转 JSON(自动清理分隔线、空块、复杂 Markdown) +2. 在父节点下查找同名/相似标题,命中则更新,不新建重复文档 +3. 上传 `image_paths` 图片到文档素材 +4. 正文稳定写入,支持可选 webhook 通知 + +## 三、关键经验 + +1. 当前租户下,飞书 docx 图片块(`block_type 12/18/27`)都可能返回 `1770001 invalid param` +2. 稳定方案是“正文先写成功 + 图片上传文档素材 + 需要时手动插图” +3. Markdown 里大量 `---`、空行、复杂代码块,容易导致写入失败或观感差,需在转 JSON 时清洗 +4. 同标题更新比“每次新建”更适合长期知识库运营 + +## 四、实践命令模板 + +```bash +python3 /Users/karuo/Documents/个人/卡若AI/02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_article_unified_publish.py \ + --parent MyvRwCVNSiTg5ok6e3fc6uA5nHg \ + --title "文章标题" \ + --md "/绝对路径/文章.md" \ + --json "/绝对路径/文章_feishu_blocks.json" \ + --webhook "https://open.feishu.cn/open-apis/bot/v2/hook/xxx" +``` + +## 五、涉及文件 + +- `02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md` +- `02_卡人(水)/水桥_平台对接/飞书管理/脚本/md_to_feishu_json.py` +- `02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_publish_blocks_with_images.py` +- `02_卡人(水)/水桥_平台对接/飞书管理/脚本/feishu_article_unified_publish.py` +- `SKILL_REGISTRY.md` + diff --git a/SKILL_REGISTRY.md b/SKILL_REGISTRY.md index 518e01d4..b48c8f30 100644 --- a/SKILL_REGISTRY.md +++ b/SKILL_REGISTRY.md @@ -51,7 +51,7 @@ | W04 | 自动记忆管理 | 水溪 | 记忆、存入记忆 | `02_卡人(水)/水溪_整理归档/自动记忆管理/SKILL.md` | 长期记忆写入与检索 | | W05 | 需求拆解与计划制定 | 水泉 | 需求拆解、任务分析 | `02_卡人(水)/水泉_规划拆解/需求拆解与计划制定/SKILL.md` | 大需求拆成可执行步骤 | | W06 | 任务规划 | 水泉 | 任务规划、制定计划 | `02_卡人(水)/水泉_规划拆解/任务规划/SKILL.md` | 制定执行计划与排期 | -| W07 | 飞书管理 | 水桥 | 飞书日志、写入飞书 | `02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md` | 飞书日志/文档自动化 | +| W07 | 飞书管理 | 水桥 | 飞书日志、写入飞书、飞书文章上传、MD转飞书JSON、同标题更新飞书、飞书上传图片 | `02_卡人(水)/水桥_平台对接/飞书管理/SKILL.md` | 飞书日志/文档自动化(统一文章上传入口) | | W08 | 智能纪要 | 水桥 | 会议纪要、产研纪要、**飞书妙记、飞书链接、妙记下载、第几场、指定场次、批量下载妙记、cunkebao.feishu.cn、meetings.feishu.cn/minutes** | `02_卡人(水)/水桥_平台对接/智能纪要/SKILL.md` | 会议录音转结构化纪要;飞书妙记识别与下载(单条/批量),完毕用复盘格式回复 | | W09 | 小程序管理 | 水桥 | 小程序、微信小程序 | `02_卡人(水)/水桥_平台对接/小程序管理/SKILL.md` | 微信小程序发布与维护 | | W10 | Soul文章上传 | 水桥 | **Soul文章上传、Soul派对文章、第9章上传、soul上传** | `02_卡人(水)/水桥_平台对接/Soul文章上传/SKILL.md` | 《一场soul的创业实验》第9章文章写好后上传到小程序,id 已存在则更新不重复 | diff --git a/运营中枢/参考资料/卡若AI外网化与外部调用方案.md b/运营中枢/参考资料/卡若AI外网化与外部调用方案.md index 8cecb070..df8d3afd 100644 --- a/运营中枢/参考资料/卡若AI外网化与外部调用方案.md +++ b/运营中枢/参考资料/卡若AI外网化与外部调用方案.md @@ -224,6 +224,32 @@ curl -sS https://kr-ai.quwanzhi.com/v1/chat/completions \ 3. 不要在 Base URL 末尾加 `/` 4. 改完后重启 Cursor 一次 +## 7.3 其它同类工具配置(OpenAI 兼容客户端) + +适用于:Claude Desktop(OpenAI兼容插件)、Cherry Studio、LobeChat、自建 Agent、任意支持 OpenAI API 的工具。 + +统一填写: + +1. `Base URL`:`https://kr-ai.quwanzhi.com/v1` +2. `API Key`:`` +3. `Model`:`karuo-ai`(或工具允许的自定义名) +4. 关闭流式可先联调,联通后再开流式 + +联调顺序: + +1. 先测 `GET /v1/models` 是否返回模型列表 +2. 再测 `POST /v1/chat/completions` 是否返回 `choices` +3. 最后在工具内发一条真实问题验证 + +最简请求模板: + +```bash +curl -sS https://kr-ai.quwanzhi.com/v1/chat/completions \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer " \ + -d '{"model":"karuo-ai","messages":[{"role":"user","content":"测试连通"}]}' +``` + --- ## 8. 健康检查与联调命令 diff --git a/运营中枢/工作台/gitea_push_log.md b/运营中枢/工作台/gitea_push_log.md index ec8c7f37..9093d011 100644 --- a/运营中枢/工作台/gitea_push_log.md +++ b/运营中枢/工作台/gitea_push_log.md @@ -130,3 +130,4 @@ | 2026-02-24 20:10:45 | 🔄 卡若AI 同步 2026-02-24 20:10 | 更新:运营中枢、运营中枢工作台 | 排除 >20MB: 12 个 | | 2026-02-24 21:16:30 | 🔄 卡若AI 同步 2026-02-24 21:16 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 12 个 | | 2026-02-24 21:33:10 | 🔄 卡若AI 同步 2026-02-24 21:33 | 更新:总索引与入口、水桥平台对接、运营中枢工作台 | 排除 >20MB: 13 个 | +| 2026-02-25 05:57:01 | 🔄 卡若AI 同步 2026-02-25 05:56 | 更新:水桥平台对接、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 13 个 | diff --git a/运营中枢/工作台/代码管理.md b/运营中枢/工作台/代码管理.md index 997300a1..0a2833e4 100644 --- a/运营中枢/工作台/代码管理.md +++ b/运营中枢/工作台/代码管理.md @@ -133,3 +133,4 @@ | 2026-02-24 20:10:45 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-24 20:10 | 更新:运营中枢、运营中枢工作台 | 排除 >20MB: 12 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-02-24 21:16:30 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-24 21:16 | 更新:水桥平台对接、运营中枢工作台 | 排除 >20MB: 12 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | | 2026-02-24 21:33:10 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-24 21:33 | 更新:总索引与入口、水桥平台对接、运营中枢工作台 | 排除 >20MB: 13 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) | +| 2026-02-25 05:57:01 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-25 05:56 | 更新:水桥平台对接、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 13 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |