通过消息自动同步内容到 Notion。支持日记、笔记、待办、想法、问题、链接、摘抄 7 种类型。
NOTION_API_KEY - Notion Integration Token
NOTION_PARENT_PAGE_ID - Target Notion Page ID (32 chars)
NOTION_QUOTES_PAGE_ID (optional) - Separate page for quotes
pip install notion-client
NOTION_API_KEY and NOTION_PARENT_PAGE_ID
When the user sends a message matching a trigger pattern, execute the corresponding script:
python scripts/record.py record --type {type} "{content}"
python scripts/record.py heading --level {1|2|3} "{text}"
python scripts/record.py divider
python scripts/record.py list --kind {bullet|number} "{items}"
python scripts/record.py toggle "{json}"
python scripts/record.py image [--caption "text"] "{file_path_or_url}"
python scripts/record.py caption "{content_to_append}"
python scripts/record.py undo
python scripts/check_config.py
python scripts/summary.py {monthly|quote}
Content types (prefix → type):
日记: / 今天: / riji: / d → diary
笔记: / 学习: / note: / n → note
待办: / todo: / t → todo
done: / 完成: / √ → done
想法: / 灵感: / idea: / flash: / 闪念: / i → idea
问题: / 疑问: / q: → question
摘抄: / quote: / qu: / z → quote
链接: / link: / url: / l → link
图片: / photo: / img: / p → image
caption: / 说明: / 补: → caption (append to last entry)
Formats:
* text → H1 heading
** text → H2 heading
* text → H3 heading
> text → quote block
--- → divider
- text → bulleted list
1. text / 2. text etc → numbered list
toggle: title + subsequent - / -- / --- lines → toggle block
Commands:
月报 / monthly → extract current month records for summary
摘抄 / 随机摘抄 → random historical entry
搜: xxx / search: xxx → search records by keyword
撤回 / undo → delete last batch of blocks (within 5 min window)
配置检查 / check config → verify config
Smart detection (no prefix, AI infers):
[ ] or 【 】 → todo
Caption — two distinct uses:
caption: / 说明: / 补: has two different behaviors depending on context:
When the user sends caption: as the primary prefix of a message with no images or links, it appends the content to the last callout on the Notion page:
caption: 补充一个角度 → appends "↳ 补充一个角度" as a child paragraph inside the last callout
说明: 这个想法还有一个延伸 → same behavior
补: 对了还有一点 → same behavior
Implementation: Write content to .pending_content.txt, then run python scripts/record.py caption.
Visual: The appended paragraph is prefixed with ↳ to distinguish it from the original content.
When the message contains images or links, caption: acts as a separator between diary content and image/link caption:
OPPO园区很好 caption: 园区环境 + 3 images → last image gets caption "园区环境", diary "OPPO园区很好" synced separately
caption:, all text is diary/idea content, no caption on images
IMPORTANT: The AI must check whether the message contains images or links to determine which caption behavior to use.
Scan the LAST line for metadata:
#关键词 → tag
/p:项目名 → project
Scripts emit standardized output prefixes:
OK|message → success, relay success message to user
ERROR|CONFIG → guide user to set up Notion integration
ERROR|AUTH → invalid API key or page not authorized
ERROR|RATE_LIMIT → tell user to wait
ERROR|NETWORK → tell user to retry later
Always run check_config.py first on first use. Never modify or delete existing Notion blocks.
C:\Users\photos\img.jpg) and HTTP URLs (e.g., https://example.com/photo.png)
--caption flag to add caption text to the image
When user sends both image and text in one message:
caption: / 说明: keyword (if present) — this is the Caption Separator mode
caption: → diary/idea/note content (synced as callout)
caption: → image caption (added to last image via --caption)
--caption
.pending_content.txt, then record.py record --type {type}
Examples:
OPPO园区很好 caption: 园区环境 + 3 images → last image gets caption "园区环境", diary "OPPO园区很好" synced separately
这张图有意思 + 1 image → no caption keyword, so no caption on image, "这张图有意思" synced as idea
IMPORTANT:
record.py image, text via record.py record
record.py image. Do NOT transcribe/OCR the image content into a callout
Same caption: pattern works for links:
链接: https://example.com caption: 好文章 → bookmark with caption "好文章"
caption:, just a plain bookmark card (Notion auto-fetches title)
.pending_content.txt at once — do NOT manually split into multiple calls
.pending_content.txt (write file → run script). Never pass content via command-line args (PowerShell $ expansion issues).
.pending_image.jpg, the script auto-detects and cleans up.
caption: / 说明: / 补: → caption (append to last entry)
record.py image)
record.py undo — respects 5-min batch window, deletes all blocks from last batch.
共 2 个版本