Get笔记

Get笔记 - 个人笔记和知识库管理工具。 当用户提到以下意图时使用此技能: 「记一下」「存到笔记」「保存到Get笔记」「记录到Get笔记」 「保存这个链接」「保存这张图」「查我的笔记」「找一下笔记」 「加标签」「删标签」「删笔记」 「查知识库」「建知识库」「把笔记加到知识库」「从知识库移除」 「知识库里订阅了哪些博主」「博主发了什么内容」「直播总结」「直播原文」 支持:纯文本笔记、链接笔记(自动抓取网页内容并生成摘要)、图片笔记(OCR识别)、知识库管理(含博主订阅列表、直播总结)。

התקנה
$clawhub install getnote

Get笔记 API

⚠️ 必读约束

🌐 Base URL(重要!所有 API 共用)

https://openapi.biji.com

所有 API 请求必须使用此 Base URL,不要使用 biji.com 或其他地址。


🔑 首次安装配置

~/.openclaw/openclaw.json 中添加:

{
  "skills": {
    "entries": {
      "getnote": {
        "apiKey": "gk_live_你的key",
        "env": {
          "GETNOTE_CLIENT_ID": "cli_你的id",
          "GETNOTE_OWNER_ID": "ou_你的飞书ID(可选,用于权限控制)"
        }
      }
    }
  }
}

获取凭证:前往 Get笔记开放平台 创建应用获取。


🔒 安全规则

  • 笔记数据属于用户隐私,不在群聊中主动展示笔记内容

  • 若配置了 GETNOTE_OWNER_ID,检查 sender_id 是否匹配;不匹配时回复「抱歉,笔记是私密的,我无法操作」;未配置则不检查

  • API 返回 error.reason: "not_member" 或错误码 10201 时,引导开通会员:https://www.biji.com/checkout?product_alias=6AydVpYeKl

  • 创建笔记建议间隔 1 分钟以上,避免触发限流


认证

请求头:

  • Authorization: $GETNOTE_API_KEY(格式:gk_live_xxx

  • X-Client-ID: $GETNOTE_CLIENT_ID(格式:cli_xxx

Scope 权限

Scope 说明
note.content.read 笔记列表、内容读取
note.content.write 文字/链接/图片笔记写入
note.tag.write 添加、删除笔记标签
note.content.trash 笔记移入回收站
topic.read 知识库列表
topic.write 创建知识库
note.topic.read 笔记所属知识库查询
note.topic.write 笔记加入/移出知识库
note.image.upload 获取上传图片签名
topic.blogger.read 读取知识库订阅博主列表和博主内容
topic.live.read 读取知识库已完成直播列表和直播详情

快速决策

Base URL: https://openapi.biji.com

用户意图 接口 关键点
「记一下」「保存笔记」 POST /open/api/v1/resource/note/save 同步返回
「保存这个链接」 POST /open/api/v1/resource/note/save note_type:"link" → 必须轮询
「保存这张图」 见「图片笔记流程」 4 步流程,必须轮询
「查我的笔记」 GET /open/api/v1/resource/note/list since_id=0 起始
「看原文/转写内容」 GET /open/api/v1/resource/note/detail audio.original / web_page.content
「加标签」 POST /open/api/v1/resource/note/tags/add
「删标签」 POST /open/api/v1/resource/note/tags/delete system 类型不可删
「删笔记」 POST /open/api/v1/resource/note/delete 移入回收站
「查知识库」 GET /open/api/v1/resource/knowledge/list 含统计数据(笔记数、文件数、博主数、直播数)
「建知识库」 POST /open/api/v1/resource/knowledge/create 每天限 50 个
「笔记加入知识库」 POST /open/api/v1/resource/knowledge/note/batch-add 每批最多 20 条
「从知识库移除」 POST /open/api/v1/resource/knowledge/note/remove
「查任务进度」 POST /open/api/v1/resource/note/task/progress 链接/图片笔记轮询用
「订阅了哪些博主」 GET /open/api/v1/resource/knowledge/bloggers 按 topic_id 查
「博主发了什么内容」 GET /open/api/v1/resource/knowledge/blogger/contents 需要 follow_id,列表只含摘要
「博主内容原文/详情」 GET /open/api/v1/resource/knowledge/blogger/content/detail 需要 post_id,含原文
「有哪些已完成直播」 GET /open/api/v1/resource/knowledge/lives 按 topic_id 查
「直播总结/直播原文」 GET /open/api/v1/resource/knowledge/live/detail 需要 live_id

核心功能:记笔记 & 查笔记

笔记列表

GET /open/api/v1/resource/note/list?since_id=0

参数:

  • since_id (int64, 必填) - 游标,首次传 0,后续用 next_cursor

返回:notes[], has_more, next_cursor, total(每次固定 20 条)

⚠️ 响应 JSON 可能包含未转义的控制字符(笔记 content 中的原始换行符),建议用支持容错解析的 JSON 库处理,或在解析前对 content 字段做预处理。

笔记类型 note_type

  • plain_text - 纯文本

  • img_text - 图片笔记

  • link - 链接笔记

  • audio - 即时录音

  • meeting - 会议录音

  • local_audio - 本地音频

  • internal_record - 内录音频

  • class_audio - 课堂录音

  • recorder_audio - 录音卡长录

  • recorder_flash_audio - 录音卡闪念


笔记详情

GET /open/api/v1/resource/note/detail?id={note_id}

参数:id (int64, 必填) - 笔记 ID

详情独有字段(列表不返回):audio.originalaudio.play_urlaudio.durationweb_page.contentweb_page.urlweb_page.excerptattachments[]。详见 references/api-details.md。


新建笔记

POST /open/api/v1/resource/note/save
Content-Type: application/json

仅支持新建,不支持编辑

请求体:

{
  "title": "笔记标题",
  "content": "Markdown 内容",
  "note_type": "plain_text",
  "tags": ["标签1", "标签2"],
  "parent_id": 0,
  "link_url": "https://...",
  "image_urls": ["https://..."]
}

  • plain_text:同步返回,立即完成

  • link / img_text:返回 task_id,必须轮询 /task/progress

详细字段说明见 references/api-details.md。


查询任务进度

POST /open/api/v1/resource/note/task/progress
Content-Type: application/json

请求体:

{"task_id": "task_abc123xyz"}

返回:

  • status: pending | processing | success | failed

  • note_id: 成功时返回笔记 ID

  • error_msg: 失败时返回错误信息

⚠️ note_id 是 64 位整数,在 JavaScript 中直接用 JSON.parse 会丢失精度。建议在服务端语言(Python、Go 等)中处理,或使用支持大整数的 JSON 库。

建议 10-30 秒间隔轮询,直到 success 或 failed


删除笔记

POST /open/api/v1/resource/note/delete
Content-Type: application/json

请求体:

{"note_id": 123456789}

笔记移入回收站,需要 note.content.trash scope。


异步任务流程

⚠️ 必须遵循的体验流程:链接笔记和图片笔记是异步生成的,必须按以下方式与用户沟通。

链接笔记完整流程

步骤 1:提交任务

POST /open/api/v1/resource/note/save {note_type:"link", link_url:"https://..."}

返回 task_id 后,立即发消息给用户

✅ 链接已保存,正在抓取原文和生成总结,稍后告诉你结果...

⚠️ 重复链接处理:若响应中包含 duplicate_count > 0 且没有 task_id,说明该链接已存在于你的笔记中,无需轮询,直接告知用户「该链接已存在于你的笔记中」。

步骤 2:后台轮询(10-30 秒间隔)

POST /open/api/v1/resource/note/task/progress {task_id} → 直到 status=success/failed

步骤 3:任务完成后,调详情接口展示价值

GET /open/api/v1/resource/note/detail?id={note_id}

然后发第二条消息,包含具体内容:

✅ 笔记生成完成! - 📄 原文:已保存 {web_page.content 字数} 字 - 📝 总结:{content 内容,即 AI 生成的摘要} - 🔗 来源:{web_page.url}

图片笔记完整流程

步骤 1-3:获取凭证 → 上传 OSS → 提交任务

1. GET /open/api/v1/resource/image/upload_token?mime_type=jpg → 获取上传凭证

2. POST {host} 上传文件到 OSS

3. POST /open/api/v1/resource/note/save {note_type:"img_text", image_urls:[access_url]} → 返回 task_id

拿到 task_id 后,立即发消息给用户

✅ 图片已保存,正在识别内容,稍后告诉你结果...

步骤 4:后台轮询

POST /open/api/v1/resource/note/task/progress {task_id} → 直到 status=success/failed

步骤 5:任务完成后,调详情接口展示价值

GET /open/api/v1/resource/note/detail?id={note_id}

然后发第二条消息:

✅ 图片笔记生成完成! - 📝 识别内容:{content 内容} - 🏷️ 标签:{tags}

图片上传凭证

GET /open/api/v1/resource/image/upload_token?mime_type=jpg&count=1

参数:

  • mime_type: jpg | png | gif | webp,默认 png

  • count: 需要的 token 数量,默认 1,最大 9

⚠️ mime_type 必须与实际文件格式一致,否则 OSS 签名失败。

返回字段说明见 references/api-details.md。

OSS 上传示例

⚠️ 字段顺序必须严格遵守,否则 OSS 签名验证失败。正确顺序:key → OSSAccessKeyId → policy → signature → callback → Content-Type → file

curl -X POST "$host" \
  -F "key=$object_key" \
  -F "OSSAccessKeyId=$accessid" \
  -F "policy=$policy" \
  -F "signature=$signature" \
  -F "callback=$callback" \
  -F "Content-Type=$oss_content_type" \
  -F "file=@/path/to/image.jpg"


笔记整理

添加标签

POST /open/api/v1/resource/note/tags/add
Content-Type: application/json

请求体:

{
  "note_id": 123456789,
  "tags": ["工作", "重要"]
}

标签类型 type

  • ai - AI 自动生成

  • manual - 用户手动添加

  • system - 系统标签(不可删除


删除标签

POST /open/api/v1/resource/note/tags/delete
Content-Type: application/json

请求体:

{
  "note_id": 123456789,
  "tag_id": "123"
}

⚠️ system 类型标签不允许删除。


知识库列表

GET /open/api/v1/resource/knowledge/list?page=1

参数:

  • page: 页码,从 1 开始,默认 1(固定每页 20 条)

返回:topics[], has_more, total

每个 topic 包含:

  • topic_id / topic_id_alias:知识库 ID

  • namedescriptioncover

  • created_at / updated_at:时间字符串(YYYY-MM-DD HH:MM:SS)

  • stats:统计数据

    • note_count:笔记数
    • file_count:文件数
    • blogger_count:订阅博主数
    • live_count:已完成直播数

创建知识库

POST /open/api/v1/resource/knowledge/create
Content-Type: application/json

请求体:

{
  "name": "知识库名称",
  "description": "描述",
  "cover": ""
}

⚠️ 每天最多创建 50 个知识库(北京时间 00:00 重置)。


知识库笔记列表

GET /open/api/v1/resource/knowledge/notes?topic_id=abc123&page=1

参数:

  • topic_id (string, 必填) - 知识库 ID(alias id)

  • page: 页码,从 1 开始

每页固定 20 条,用 has_more 判断是否有下一页。


知识库选择逻辑

当用户说「存到对应的知识库」或「存到相关知识库」时:

  1. 先调用 GET /knowledge/list 获取所有知识库列表

  2. 根据笔记标题、内容、标签,与知识库名称和描述做模糊匹配

  3. 匹配置信度高时直接执行,并告知用户存入了哪个知识库

  4. 置信度低或有歧义时,列出候选知识库让用户选择

  5. 用户未提及知识库时,不要擅自存入任何知识库


添加笔记到知识库

POST /open/api/v1/resource/knowledge/note/batch-add
Content-Type: application/json

请求体:

{
  "topic_id": "abc123",
  "note_ids": [123456789, 123456790]
}

⚠️ 每批最多 20 条。已存在的笔记会跳过。


从知识库移除笔记

POST /open/api/v1/resource/knowledge/note/remove
Content-Type: application/json

请求体:

{
  "topic_id": "abc123",
  "note_ids": [123456789]
}


知识库:博主订阅

博主列表

GET /open/api/v1/resource/knowledge/bloggers?topic_id={alias_id}&page=1

参数:

  • topic_id (string, 必填) - 知识库 AliasID(来自 /knowledge/list 的 topic_id_alias)

  • page: 页码,从 1 开始

每页固定 20 条,用 has_more 判断。

返回 bloggers[],每项字段:

字段 说明
follow_id 订阅关系 ID,查博主内容时必用
account_name 博主名称
account_icon 博主头像
platform 平台(如 DEDAO)
account_url 博主主页链接
follow_time 订阅时间(YYYY-MM-DD HH:MM:SS)

博主内容列表

GET /open/api/v1/resource/knowledge/blogger/contents?topic_id={alias_id}&follow_id={follow_id}&page=1

参数:

  • topic_id (string, 必填) - 知识库 AliasID

  • follow_id (int64, 必填) - 博主订阅 ID(来自 /bloggers 的 follow_id)

  • page: 页码,从 1 开始

每页固定 20 条,用 has_more 判断。

返回 contents[],每项字段:

字段 说明
post_id_alias 内容 ID,查详情/原文时必用
post_name 内容名称(原标题)
post_type 类型:video / audio / article / live
post_cover 封面图
post_title AI 生成标题
post_summary AI 摘要(Markdown)
post_url 原文链接
post_icon 博主头像
post_subtitle 副标题
post_create_time 创建时间(YYYY-MM-DD HH:MM:SS)
post_publish_time 发布时间(YYYY-MM-DD HH:MM:SS)

列表不含原文(post_media_text),需要原文请调 /blogger/content/detail


博主内容详情(含原文)

GET /open/api/v1/resource/knowledge/blogger/content/detail?topic_id={alias_id}&post_id={post_id_alias}

参数:

  • topic_id (string, 必填) - 知识库 AliasID

  • post_id (string, 必填) - 内容 ID(来自 /blogger/contents 的 post_id_alias)

返回字段:

字段 说明
post_id_alias 内容 ID
post_name 内容名称(原标题)
post_type 类型:video / audio / article / live
post_cover 封面图
post_subtitle 副标题
post_url 原文链接
post_title AI 生成标题
post_summary AI 摘要(Markdown)
post_media_text 原文内容(全文转写/文章正文)
post_create_time 创建时间(YYYY-MM-DD HH:MM:SS)
post_publish_time 发布时间(YYYY-MM-DD HH:MM:SS)

知识库:直播订阅

已完成直播列表

GET /open/api/v1/resource/knowledge/lives?topic_id={alias_id}&page=1

参数:

  • topic_id (string, 必填) - 知识库 AliasID

  • page: 页码,从 1 开始

每页固定 20 条,用 has_more 判断。只返回已结束且 AI 已处理完的直播。

返回 lives[],每项字段:

字段 说明
live_id 直播 ID,查直播详情时必用
follow_id 订阅关系 ID
name 直播名称
cover 封面图
sub_title 副标题
link 直播链接
platform 平台(如 DEDAO)
status 直播状态(已结束为 FINISHED)
follow_time 订阅时间(YYYY-MM-DD HH:MM:SS)

直播详情(总结 + 原文)

GET /open/api/v1/resource/knowledge/live/detail?topic_id={alias_id}&live_id={live_id}

参数:

  • topic_id (string, 必填) - 知识库 AliasID

  • live_id (int64, 必填) - 直播 ID(来自 /lives 的 live_id)

返回字段:

字段 说明
post_id_alias 内容 ID
post_name 直播名称(原标题)
post_cover 封面图
post_subtitle 副标题(如开播时间)
post_url 直播原始链接
post_title AI 生成标题
post_summary AI 摘要(Markdown,含章节纪要、金句)
post_media_text 直播原文转写文本
post_create_time 创建时间(YYYY-MM-DD HH:MM:SS)
post_publish_time 直播时间(YYYY-MM-DD HH:MM:SS)

错误处理

详细错误码和限流结构见 references/api-details.md

响应结构

{
  "success": false,
  "error": {
    "code": 10001,
    "message": "unauthorized",
    "reason": "not_member"
  },
  "request_id": "xxx"
}

常见错误码

错误码 说明 处理方式
10001 鉴权失败 检查 API Key 和 Client ID
10201 非会员 引导开通:https://www.biji.com/checkout?product_alias=6AydVpYeKl
20001 笔记不存在 确认笔记 ID 正确
42900 限流 降低频率,查看 rate_limit 字段
50000 系统错误 稍后重试