① 飞书应用配置(一次性,约 10 分钟)
- 打开 飞书开放平台,登录后点「创建企业自建应用」,名称建议填
笔记剪藏。 - 左侧「添加应用能力」,开启 机器人 能力。
- 左侧「权限管理」,搜索并开通以下权限:
im:message.p2p_msg:readonly— 接收用户发给机器人的单聊消息im:message.group_at_msg:readonly— 接收群里 @机器人 的消息im:message:send_as_bot— 机器人回复「已保存 ✅」(可选)
- 左侧「事件与回调」→ 订阅方式选择 「将事件发送至开发者服务器」,请求地址填:
首次保存时飞书会发送 URL 校验请求,服务端已实现自动应答。https://note.ahpengchuang.net/feishu/callback - 同一页面下方「加密策略」里能看到 Encrypt Key 与 Verification Token,把这两个值抄下来,下一步填到服务器配置里。
- 「事件与回调」→「添加事件」→ 搜索并订阅 接收消息 v2.0(
im.message.receive_v1)。 - 「版本管理与发布」创建版本并发布(企业管理员审批通过后生效)。
💡 单聊里直接发链接即可触发;群聊里需要 @笔记剪藏 再发链接。
② 服务器端配置(SSH 一次)
把飞书应用凭据填进服务端配置文件:
vim /www/wwwroot/note.ahpengchuang.net/config.json
{
"api_token": "…………", # Obsidian 插件用的令牌,本文件里查看
"feishu": {
"app_id": "cli_xxxxxxxx", # 飞书应用凭证页
"app_secret": "xxxxxxxx", # 飞书应用凭证页
"encrypt_key": "xxxxxxxx", # ①-5 抄下来的 Encrypt Key
"verification_token": "xxxxxxxx",# ①-5 抄下来的 Verification Token
"reply_enabled": true
},
"ytdlp_enabled": true, # 视频链接分支开关(仅对视频站点生效)
"ytdlp_timeout": 60,
"fetch_timeout": 15
}
改完重启服务:
systemctl restart note-sync
journalctl -u note-sync -n 30 --no-pager
💡 api_token 是 Obsidian 插件的访问令牌,首次部署时已自动生成,就在这个文件里。泄露后改掉并
systemctl restart note-sync 即可。③ Obsidian 插件安装与设置
安装(手动安装,无需第三方市场)
- 下载以下 3 个文件,放到你的仓库目录
<你的仓库>/.obsidian/plugins/feishu-note-sync/(文件夹需自建):
- 打开 Obsidian → 设置 → 第三方插件 → 关闭「安全模式」(如果还开着)→ 在已安装插件里启用 Feishu Note Sync。
- 进入该插件设置,填写:
- 服务器地址:
https://note.ahpengchuang.net(默认已填好) - API Token:服务器
config.json里的api_token - 同步文件夹:默认
飞书剪藏,可自行修改 - 自动同步间隔:默认 10 分钟,填 0 只手动同步
- 服务器地址:
- 点「测试连接」,提示「连接成功,服务端共 N 篇笔记」即配置完成。
插件功能一览
- 左侧栏云朵图标 / 命令面板「立即同步」— 拉取新笔记
- 命令「重新同步全部」— 清除进度从头同步(已在库里的笔记自动跳过,不会重复)
- 命令「打开使用教程」— 在浏览器打开本页
- 自动同步:按设置的间隔在后台静默拉取
④ 笔记同步使用教程(日常流程)
第 1 步:在飞书里发送链接
- 单聊:直接给机器人发一条含链接的消息,如
https://example.com/some-article;也可以先写一句评论再贴链接。 - 群聊:
@笔记剪藏 看看这篇 https://… - 富文本消息里插入的超链接同样能被识别;一条消息最多处理 3 个链接。
- 机器人会回复:
✅ 已保存《文章标题》,可在 Obsidian 同步查看。
第 2 步:服务器自动清洗
| 链接类型 | 处理方式 | 说明 |
|---|---|---|
| 普通网页 / 公众号 / 新闻 | trafilatura 主清洗主力 | 提取标题、作者、日期与正文,输出 Markdown(含图片与表格) |
| B站 / 抖音 / 西瓜 / 腾讯视频 / 快手 / YouTube | yt-dlp 视频分支按需开启 | 只取标题、UP主、时长、播放量、简介等元数据,不下载视频;仅对上述视频站点触发,不会常开。可在 config.json 用 ytdlp_enabled 关闭。注意:B站等对云服务器 IP 有反爬(HTTP 412),此类链接可能清洗失败并明确报错 |
| 反爬 / 结构特殊的页面 | 手写规则兜底 | og: 元信息 + 正文容器 + 逐行去噪的正则方案 |
第 3 步:同步到本地 Obsidian
- 点左侧栏云朵图标(或命令面板 →「立即同步」)。
- 新笔记出现在
飞书剪藏/文件夹,文件名即文章标题。 - 每篇笔记头部自动带 frontmatter 属性:
---
title: "文章标题"
source: https://原始链接
note_id: 12
extractor: trafilatura # 或 yt-dlp / rules
created: 2026-09-12 10:30:00
---
- 同步按
note_id增量进行,只拉新笔记;重复同步不会产生重复文件。 - 正文末尾保留「来源」链接,点击可回跳原文。
💡 想手动验证清洗效果?在服务器或本机执行:
curl -X POST https://note.ahpengchuang.net/api/clean \
-H "X-Api-Token: 你的TOKEN" -H "Content-Type: application/json" \
-d '{"url":"https://某篇文章"}'⑤ 常见问题
- 飞书保存回调地址时提示校验失败?
确认服务器config.json已按①-5 填好 Encrypt Key 后systemctl restart note-sync;若应用开启了加密策略,未配置密钥时校验会失败。 - 发链接机器人没反应?
① 应用是否已发布生效;② 群聊是否 @ 了机器人;③ 权限是否包含对应的消息接收权限;④journalctl -u note-sync -n 50看服务日志。 - 回复「⚠️ 清洗失败」?
目标网站反爬或需要登录。B站等站点对云服务器 IP 有反爬限制(HTTP 412),视频链接可能失败;普通文章链接不受影响。可稍后重试,或改用截图等其它方式收藏。 - 收到重复消息?
服务端已按 message_id / event_id 幂等去重,重复推送不会重复入库。 - 插件同步报 Token 无效?
核对插件设置里的 Token 与服务器config.json的api_token是否一致;更换后需重启 note-sync 服务。
⑥ API 一览(开发者)
| 接口 | 方法 | 鉴权 | 说明 |
|---|---|---|---|
/feishu/callback | POST | 飞书验签 | 事件回调:URL 验证 / 加解密 / 幂等 / 异步清洗 |
/api/ping | GET | X-Api-Token | 连通性与笔记总数 |
/api/notes?since_id=0&limit=50 | GET | X-Api-Token | 增量笔记列表(id, title, excerpt, source_url…) |
/api/note/<id> | GET | X-Api-Token | 笔记全文 content_md 与元数据 |
/api/clean | POST | X-Api-Token | {"url":"…"} 手动清洗一条链接 |
/healthz | GET | 无 | 健康检查 |
清洗管线安全约束:仅允许 http/https;请求前校验 host,拒绝 localhost、环回、私有和保留地址;重定向逐跳复检;下载上限 4MB。