Notion IM Helper

👤 70asunflower 📦 v1.7.1 ⭐ 4.5 ⬇️ 1.1K 下載
📄 辦公效率 免費 🔑 需 API Key

📖 技能介紹

Notion IM Helper

通過訊息自動同步內容到 Notion。支援日記、筆記、待辦、想法、問題、連結、摘抄 7 種類型。

Environment Variables

  • 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

Setup

  1. pip install notion-client
  2. Set env vars: NOTION_API_KEY and NOTION_PARENT_PAGE_ID
  3. Authorize integration on Notion page (··· > Connect to)

Usage

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}

Trigger Rules

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):

  • Pure URL → link
  • Starts with YYYY-MM-DD → diary
  • Contains [ ] or 【 】 → todo
  • Default → idea

Caption — two distinct uses:

caption: / 說明: / 補: has two different behaviors depending on context:

1. Caption Append (standalone — no image/link in message)

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.

2. Caption Separator (with image/link in message)

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
  • Without 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.

Metadata

Scan the LAST line for metadata:

  • #關鍵詞 → tag
  • /p:專案名 → project
  • Remove metadata from content before passing to script

Batch & Undo

  • Multi-line messages: each format line (heading/quote/divider/list) becomes a separate block, sent in a single API call
  • Undo within 5 minutes: deletes all blocks from the last batch
  • Undo after 5 minutes: deletes only the last single block
  • Day separator: a divider is auto-inserted when the last record is from a different day

Output Protocol

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.

Image Upload

  • Supports local file paths (e.g., C:\Users\photos\img.jpg) and HTTP URLs (e.g., https://example.com/photo.png)
  • Local files are uploaded to Notion servers via the File Upload API, then attached as image blocks
  • URL images are referenced directly as external image blocks
  • Optional --caption flag to add caption text to the image
  • Max file size: 5MB (Notion API limit)
  • Supported formats: jpg, jpeg, png, gif, webp, bmp, svg

Image + Text Sync Rules

When user sends both image and text in one message:

  1. Parse text: split by caption: / 說明: keyword (if present) — this is the Caption Separator mode
    • Before caption: → diary/idea/note content (synced as callout)
    • After caption: → image caption (added to last image via --caption)
  2. Upload images: first N-1 images without caption, last image with --caption
  3. Sync text: write diary/idea content to .pending_content.txt, then record.py record --type {type}

    想要更強大的技能外掛,就來小蔥技能站7w4.net看看吧。

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
  • 2 images only → just upload both, no caption, no callout

IMPORTANT:

  • Image and text are always separate operations — image via record.py image, text via record.py record
  • Do NOT put image and text in the same command
  • When user sends image only (no text or just "同步到notion"), upload the image as-is using record.py image. Do NOT transcribe/OCR the image content into a callout

Link + Caption

Same caption: pattern works for links:

  • 連結: https://example.com caption: 好文章 → bookmark with caption "好文章"
  • Without caption:, just a plain bookmark card (Notion auto-fetches title)

Long Content Auto-Split

  • ≤2000 chars: Single callout (most entries)
  • >2000 chars: Auto-split into multiple callouts at paragraph boundaries (e.g., 3-4k chars → 2-3 callouts)
  • Metadata (tags/projects) only added to the last callout
  • AI should write the entire content to .pending_content.txt at once — do NOT manually split into multiple calls

Best Practices for AI Callers

  • Content passing: Always use .pending_content.txt (write file → run script). Never pass content via command-line args (PowerShell $ expansion issues).
  • Image passing: Copy to .pending_image.jpg, the script auto-detects and cleans up.
  • Type inference: If user says "notion" or "同步" without specifying type, infer from content:
    • Starts with caption: / 說明: / 補: → caption (append to last entry)
    • Contains "日記"/"今天" → diary
    • Contains URL → link
    • Image only → image (use record.py image)
    • Default → idea
  • Undo: Use record.py undo — respects 5-min batch window, deletes all blocks from last batch.

🤖 AI 評測

這個 Skill 質量不錯,功能設計考慮得很周到。通過 IM 訊息就能方便地把日記、筆記、待辦等內容同步到 Notion,支援的格式和型別都很豐富。它最大的優點是文件完善、使用邏輯清晰,還有撤回和自動分割長內容等貼心功能。不足之處是某些觸發規則(比如 caption)有點複雜,初次使用可能需要仔細閱讀說明才能理解清楚。總體來說,這是一個實用且可靠的效率工具。

📊 多維度評分

適應性4.6
規範性4.3
有效性4.5
可靠性4.7
可信度4.4

📁 包含檔案 (10 個)

📄 CLAUDE.md 5 KB
📄 SKILL.md 7.8 KB
📄 _meta.json 135 B
📄 config.yaml 2 KB
📄 scripts/.pending_batch.json 123 B
📄 scripts/check_config.py 1.3 KB
📄 scripts/notion_client.py 10.5 KB
📄 scripts/record.py 23.3 KB
📄 scripts/search_notes.py 3.7 KB
📄 scripts/summary.py 5 KB