Notion

通过 API 对 Notion 页面和数据库进行增删改查 — 使用 Notion API 直接在 CLI-JAW 中创建、读取、更新和查询 Notion 页面、数据源(数据库)和块。

默认启用:是 分类:生产力 依赖:NOTION_API_KEY

快速参考

技能名称notion
状态已激活(自动注入每个会话)
分类生产力
SKILL.md 路径~/.cli-jaw/skills/notion/SKILL.md
官方网站developers.notion.com
API 版本2025-09-03(最新)
依赖NOTION_API_KEY 环境变量(以 ntn_ 为前缀的密钥)
密钥存储位置~/.config/notion/api_key
OAuth 配置~/.config/notion/oauth.env
速率限制约 3 次请求/秒(批量操作时使用 time.sleep(0.35)
安装已预装(随 CLI-JAW 一起提供)

概述

notion 技能通过 Notion API 提供对 Notion 工作区的完整增删改查访问。它使 CLI-JAW 能够搜索页面、创建和更新内容、查询数据库(数据源)、管理块以及应用视觉设计模式 — 所有操作均无需离开终端。

核心功能:

设置

在使用 Notion 技能之前,您需要一个 API 集成密钥和正确的权限。

步骤操作
1. 创建集成前往 notion.so/my-integrations 并创建一个新的内部集成
2. 复制 API 密钥密钥以 ntn_ 开头
3. 保存密钥保存到 ~/.config/notion/api_key
4. 共享页面在 Notion 中,将每个目标页面/数据库与您的集成共享
# Store your API key
mkdir -p ~/.config/notion
echo "ntn_your_api_key_here" > ~/.config/notion/api_key
chmod 600 ~/.config/notion/api_key
重要:目标页面和数据库必须在 Notion 中显式与您的集成共享。未共享的页面即使 API 密钥有效也会返回 404 错误。

API 辅助函数

该技能定义了一个可复用的 Shell 辅助函数,所有操作均基于此构建。CLI-JAW 在执行 Notion 命令时内部使用此函数:

NOTION_KEY=$(cat ~/.config/notion/api_key)

# Helper function used by all API calls
notion_api() {
  local method=$1 endpoint=$2 data=$3
  curl -s -X "$method" "https://api.notion.com/v1$endpoint" \
    -H "Authorization: Bearer $NOTION_KEY" \
    -H "Notion-Version: 2025-09-03" \
    -H "Content-Type: application/json" \
    ${data:+-d "$data"}
}

常用操作

搜索

按标题查找页面和数据源。返回匹配的对象及其 ID。

# Search for pages by title
notion_api POST /search '{"query": "page title"}'

# Discover workspace page IDs
notion_api POST /search '{"query": "Meeting Notes"}'

读取页面和块

获取页面属性及其块级内容。

# Get page properties
notion_api GET /pages/{page_id}

# Get page content (all child blocks)
notion_api GET /blocks/{page_id}/children

创建页面

在数据源(数据库)中创建带属性的新页面,或作为现有页面的子页面创建。

# Create a page in a data source
notion_api POST /pages '{
  "parent": {"database_id": "xxx"},
  "properties": {
    "Name": {"title": [{"text": {"content": "New Item"}}]},
    "Status": {"select": {"name": "Todo"}}
  }
}'

更新页面

修改页面属性,不影响页面内容(块)。

# Update a status property
notion_api PATCH /pages/{page_id} \
  '{"properties": {"Status": {"select": {"name": "Done"}}}}'

追加块

向现有页面添加新的内容块。

# Add a paragraph block
notion_api PATCH /blocks/{page_id}/children '{
  "children": [
    {
      "object": "block",
      "type": "paragraph",
      "paragraph": {
        "rich_text": [{"text": {"content": "Hello, world!"}}]
      }
    }
  ]
}'

查询数据源

使用结构化查询对数据库条目进行筛选和排序。

# Query with filter and sort
notion_api POST /data_sources/{data_source_id}/query '{
  "filter": {
    "property": "Status",
    "select": {"equals": "Active"}
  },
  "sorts": [
    {"property": "Date", "direction": "descending"}
  ]
}'

创建数据源

创建一个具有定义架构的新数据库(数据源)。

# Create a new data source with properties
notion_api POST /data_sources '{
  "parent": {"page_id": "xxx"},
  "title": [{"text": {"content": "My Database"}}],
  "properties": {
    "Name": {"title": {}},
    "Status": {"select": {"options": [{"name": "Todo"}, {"name": "Done"}]}},
    "Date": {"date": {}}
  }
}'

属性类型参考

每种属性类型都有特定的 JSON 结构。创建或更新页面属性时请使用正确的格式。

Title

{"title": [{"text": {"content": "..."}}]}

Rich Text

{"rich_text": [{"text": {"content": "..."}}]}

Select

{"select": {"name": "Option"}}

Multi-select

{"multi_select": [{"name": "A"}, {"name": "B"}]}

Date

{"date": {"start": "2024-01-15", "end": "2024-01-16"}}

Checkbox

{"checkbox": true}

Number

{"number": 42}

URL

{"url": "https://..."}

Email

{"email": "user@example.com"}

Relation

{"relation": [{"id": "page_id"}]}

2025-09-03 API 变更

最新的 Notion API 版本对数据库的处理方式引入了重大变更。该技能基于此版本构建。

重命名 Databases → Data Sources:查询时使用 /data_sources/ 端点。API 中"database"一词已被"data source"替代。
新增 每个数据库两个 ID:database_id 用于在数据库内创建页面,而 data_source_id 用于查询。两者均存在于 API 响应中。
变更 搜索结果:数据库现在返回 "object": "data_source" 而非 "object": "database"
变更 页面响应:当父级是数据库时,同时包含 parent.data_source_idparent.database_id
双 ID 模式:操作数据库时,使用 database_id 进行 POST /pages(创建条目),使用 data_source_id 进行 POST /data_sources/{id}/query(查询条目)。混用会导致 404 错误。

视觉设计规则

该技能包含一组视觉设计规则(称为"美学指南"),确保 CLI-JAW 创建的 Notion 页面外观精美并遵循 Notion 原生模式。

1. 使用提及链接引用页面

提及链接会自动创建反向链接并显示被引用页面的图标。始终优先使用提及链接而非纯文本页面名称。

// Correct: mention link (creates backlink, shows icon)
{"type": "mention", "mention": {"type": "page", "page": {"id": "page-UUID"}}}

// Incorrect: plain text (no backlink, no icon)
{"type": "text", "text": {"content": "Page Name"}}

2. 使用提及链接时省略文本中的表情符号

提及链接会自动显示页面的图标。在提及链接旁添加表情符号文本会造成视觉重复。让提及链接自行处理图标即可。

3. 使用标注块 + 提及链接构建导航枢纽

对于用作枢纽或仪表盘的页面,使用带有提及链接的标注块,并用圆点分隔符分隔,以实现简洁的导航效果。

{"object": "block", "type": "callout", "callout": {
    "rich_text": [
        {"type": "mention", "mention": {"type": "page", "page": {"id": "dashboard-UUID"}}},
        {"type": "text", "text": {"content": " · "}},
        {"type": "mention", "mention": {"type": "page", "page": {"id": "operations-UUID"}}}
    ],
    "icon": {"type": "emoji", "emoji": "🏠"},
    "color": "gray_background"
}}

4. 保留 child_page 块

删除 child_page 块会永久归档其子页面。在清除或重建页面内容时,务必在删除前过滤掉 child_page 块。

# Python: safely clear blocks without archiving subpages
for block in children:
    if block["type"] != "child_page":
        delete_block(block["id"])

5. 标准页面结构模式

遵循以下布局以创建结构良好的 Notion 页面:

callout (介绍/标语) + color_background
divider
heading_2 (章节标题)
callout (提及链接) + gray_background ← 导航
divider
heading_2 (快速链接)
bulleted_list_item (提及 → 描述)

6. 图标和封面

为每个页面设置一个有意义的表情符号图标。对于关键页面(仪表盘、项目枢纽),添加 w=1500 分辨率的 Unsplash 封面图片以提升视觉效果。

7. 提及链接注意事项

  • 已归档的页面会将提及链接渲染为纯文本(无图标、无链接)
  • 集成必须有权访问目标页面,提及链接才能正确解析
  • 速率限制:约 3 次请求/秒 — 在批量操作中使用 time.sleep(0.35) 以避免限流

环境与配置

文件用途
~/.config/notion/api_key主要 API 密钥存储(也作为 access_token 检查)
~/.config/notion/oauth.env公开集成的 OAuth 配置
NOTION_API_KEY 环境变量环境变量覆盖(优先级最高)

要发现工作区页面 ID 以用于脚本和命令:

# Search by name to find page/database UUIDs
notion_api POST /search '{"query": "page name"}'

使用示例

以 CLI-JAW 能理解的自然韩语风格展示的实际使用模式。

"노션에 새 페이지 만들어줌 — 제목 '주간 회의록', 상태는 '진행 중'으로"
在指定的 Notion 数据源中创建新页面,标题设为"周会记录",状态属性设为"进行中"。该技能使用 POST /pages 和正确的属性类型。
"프로젝트 데이터베이스에서 상태가 'Todo'인 항목들 전부 찾아줌"
使用 POST /data_sources/{id}/query 查询 Notion 数据源,按状态选择属性等于"Todo"进行筛选,按日期降序排列。返回所有匹配的条目。
"이 노션 페이지 내용 읽어와서 요약해줌"
使用 GET /blocks/{page_id}/children 获取页面内容,递归读取所有块内容并生成摘要。可处理嵌套块,如折叠块和标注块。
"노션 대시보드 페이지 예쁘게 꾸멀줌 — 네비게이션 허브로"
应用视觉设计规则:创建带有提及链接的标注块作为导航枢纽,添加分隔线,设置标题/章节结构,添加表情符号图标,并应用 Unsplash 封面图片。遵循规则 3(标注块 + 提及链接)和规则 5(页面结构模式)。
"노션에 새 데이터베이스 만들어줌 — 이름, 상태(Todo/Done), 날짜 컬럼으로"
使用 POST /data_sources 创建具有三个属性的新数据源:用于名称的标题属性、带有"Todo"和"Done"选项的选择属性(用于状态),以及日期属性。将父级设为指定页面。

重要注意事项

相关内容