里程碑
看到好東西就丟給它:用 n8n + LINE 打造會自己整理的收藏小精靈「收收A」📥
蘿蔔 @lobo261011發布於 已編輯
一、專案簡介
收收A 是一隻住在 LINE 上的 AI 收藏小精靈(官方帳號叫「素材收集庫」)。在手機上滑到不錯的工具、文章、教學或靈感,直接貼給它就好:它會在幾秒內讀懂內容、取標題、寫摘要、分類、加標籤,存進資料庫,再自動備份到 Google 試算表。
之後想找的時候,打「找 AI 工具」用問的,或打「book」把收藏攤成卡片慢慢翻。一次丟一整串連結也沒問題,它會一筆一筆整理好。
整個系統用自架在 Oracle Cloud 的 n8n 串接 LINE 與 Gemini,全程零開銷、沒有綁任何信用卡。
(想直接看效果的話,請滑到最下面的「示範」XD)
二、動機
我平常在 Threads、IG、YouTube、GitHub 上看到很多「之後一定用得到」的東西。其實我有在用 kip! 存影片,也乖乖分了資料夾:「酷工具」「專題可能用到」「學習區 新技能」「AI 剪輯」……
集中管理的好處很明顯,但有個前提:我必須先把資料夾建好。問題是,人的分類標準是會浮動的。就算是同一個人,時間一久,同一個東西對自己的意義也會不一樣。當初放進「酷工具」的,三個月後可能更像「專題可能用到」;資料夾越建越多,最後反而不知道該往哪裡找。
所以我想反過來做:
讓一個統一的規範(AI)負責管理所有「輸入」,我只需要負責「篩選要拿什麼」。
存的時候什麼都不用想,丟進來就好;要用的時候,用平常說話的方式問它。對我來說,這才比較接近資訊的本質:重點從來不是「放在哪個資料夾」,而是「我現在需要什麼」。
所以我給收收A 定了五個目標:好用、直覺、真的能幫到我、真的有存、真的找得到。
三、收收A 能做什麼
| 功能 | 怎麼用 | 它會做什麼 |
|---|---|---|
| 收進來 | 直接傳文字或連結 | 讀懂內容(連結會先抓網頁標題與內文;YouTube 用官方 oEmbed 拿影片標題與頻道)→ 取標題、寫 2~3 句摘要、選分類、加 3~5 個標籤 → 存檔,回覆「📥 已收進〔分類〕」 |
| 一次收很多 | 一則訊息貼多個連結(最多 15 個) | 拆開來一筆一筆整理,最後只回一則總結:「📦 新增 6 筆、跳過 2 筆(已收過)」 |
| 不重複收 | 同一個連結再傳一次 | 回覆「🔁 已經收過了」並附上當時的摘要;網址後面多了追蹤參數(?utm_source=...)也認得出來 |
| 找出來 | 開頭打「找」,例如「找 設計」 | 讀取所有收藏,交給 AI 挑出相關的項目,列出標題、分類與網址 |
| 書籤 | 傳「book」或「book 設計靈感」 | 把收藏排成可以左右滑的卡片(分類顏色、標題、摘要、標籤、開啟連結按鈕),輸入框上方有分類快捷按鈕 |
| 說明 | 傳「說明」,或打招呼 | 直接回覆使用說明 |
| 自動備份 | 不用操作 | 存完幾秒內同步到 Google 試算表,每天凌晨再對帳一次;手機打開試算表就能看到全部收藏 |
| 錯誤通知 | 不用操作 | 任何流程出錯,自動推播給我:哪個節點、什麼錯誤、執行紀錄連結 |
四、系統架構
整個系統拆成三個各做一件事的 workflow,互不干擾:
📱 LINE ──→ ① 主流程(37 個節點)──→ n8n 內建表格(主力,查詢快)
│ │
│ 存完叫醒(不等待) │ 每天 03:00 對帳
▼ ▼
② 同步備份 ─────────────→ Google 試算表(備份+手機上看)
任何流程出錯 ──→ ③ 錯誤通知 ──→ 📱 LINE 推播給我① 主流程
Webhook 接收 → 解析事件(白名單、指令判斷)→ 分流
├─ 固定回覆:說明/打招呼/非本人/圖片 ──────────────────────────────┐
├─ 書籤:讀取收藏 → 排成 Flex 卡片 ───────────────────────────────────┤
├─ 收進來:查重 → 抓連結內容 → AI Agent 整理 → 存檔 → 組回覆 ──────────┤
├─ 一次收很多:查重 → 拆開 → 每筆抓內容、AI 整理、存檔 → 組總結 ─────────┤→ HTTP Request 呼叫 LINE API 回覆
└─ 找出來:讀取收藏 → AI Agent 查詢 → 組回覆 ─────────────────────────┘② 同步備份:兩個觸發(主流程呼叫、每天 03:00)共用同一套邏輯:讀兩邊的 id,表格有、試算表沒有的就補上。跑幾次都不會重複寫,某次失敗了,下次也會自動補回來。
資料欄位:
| 欄位 | 用途 |
|---|---|
| title、summary、category、tags | AI 整理出的「我的版本」 |
| url、raw_text | 原始連結與我傳的原文(AI 理解錯時可以回頭對照) |
source_type、user_id | 素材種類(text/link)、誰傳的 |
synced_at(只在試算表) | 什麼時候備份過去的 |
五、使用到的技術
| 類別 | 技術 | 用在哪裡 |
|---|---|---|
| 自動化平台 | n8n 2.19(自架於 Oracle Cloud 免費主機) | 三個 workflow:主流程、同步備份、錯誤通知 |
| 聊天介面 | LINE Messaging API | Webhook 接收、Reply 回覆、Push 推播、載入動畫、Flex Message 書籤卡片、Quick Reply 分類按鈕 |
| AI | Gemini(gemini-flash-lite-latest,備援 gemini-3.1-flash-lite) | AI Agent:整理素材成 JSON、根據收藏回答查詢 |
| 資料儲存 | n8n Data Table + Google 試算表 | 主力資料庫 + 備份與手機檢視 |
| Google 串接 | Google Cloud 服務帳號 | 只被共用一份試算表的機器人帳號 |
| 程式 | n8n Code 節點(JavaScript) | 分流規則、查重、抓網頁、寬鬆解析 AI 輸出、組卡片、對帳比對 |
| 版本管理 | n8n API + git | 每一版 workflow 匯出成 JSON 進 git(n8n 免費版的版本紀錄只保留 1 天) |
六、實作時的決定與取捨
1. 規則優先,AI 墊後
打招呼、說明、書籤、非本人的訊息,都用規則直接處理,不經過 AI。原本連「你好」都會被送去 AI,等了 80 秒還被存成一筆素材 😅 加上規則後,這類訊息一秒就回,也不浪費免費額度。
2. 做模型測速,不憑感覺選模型
同一段素材讓 5 個模型各跑一次:
| 模型 | 耗時 |
|---|---|
| gemini-flash-lite-latest | 1.5 秒 |
| gemini-3.5-flash-lite | 1.5 秒 |
| gemini-3.1-flash-lite | 1.4 秒 |
| gemini-flash-latest | 83.0 秒 |
| gemini-3.8-flash | 85.6 秒 |
分類、標題、標籤的品質幾乎一樣,Lite 卻快了將近 60 倍。整則訊息從收到到回覆,從最慢的 164 秒降到約 1.3 秒。主力用 Lite,另一個 Lite 當備援,主力忙線時自動接手。
3. 職責分離:備份交給獨立的流程
一開始想讓主流程「存檔時順便寫 Google 試算表」,但這樣每次收藏都要多等 Google,Google 出問題時主流程也要跟著處理。最後改成獨立的同步流程:主流程存完只負責「叫醒它」,不等它做完。
4. 即時同步 + 每日對帳,雙重保險
即時同步可能剛好碰到 Google 掛掉、網路斷線;每天凌晨的對帳會把漏掉的全部補回來。兩個觸發用同一套比對邏輯,只要維護一份程式。通知也只在「對帳時真的補了資料」或「出錯」時才發,平常安靜不打擾。
5. 誰是正本要講清楚
正本是 n8n 表格,試算表是備份。在試算表上改的東西不會同步回去,因為雙向同步要處理「兩邊同時改了怎麼辦」,複雜很多,先不做。
6. AI 掛了也不能掉資料
Gemini 沒回應時,原文照樣存檔,回覆「先保存原文」。使用者不會被晾著,素材也不會遺失。
7. 設定集中在一個地方
白名單、分類(連同卡片顏色)、指令關鍵字,都放在「解析事件」節點最上方的 CONFIG。想新增分類只要改一行。
8. 只給自己用,但還是要有白名單
官方帳號的 ID 是公開的,別人有可能加到。所以收收A 只回應我自己的 LINE userId,其他人只會收到「這是私人帳號」。
9. 金鑰管理(這次最大的收穫之一)
- 金鑰只放 n8n Credentials 與本機
.env,不寫進流程、不進 git、不貼到對話或截圖 - 一個用途一把鑰匙、取清楚的名字
- 最小權限:給 AI 用的 n8n API 金鑰只開需要的權限、設 30 天到期;Google 用「服務帳號」,它只被共用了一份試算表,碰不到我其他的檔案
- 截圖不小心露出 token 片段 → 立刻重發,舊的作廢
- 另外做了一份「金鑰登記簿」:只記「哪把鑰匙、給誰用、存在哪、怎麼重發」,不記值
七、碰壁的地方 qwq
| 問題 | 原因 | 解法 |
|---|---|---|
Webhook 網址顯示 localhost:5678,LINE 不接受 | n8n 沒設定對外網址 | 手動換成對外網域(之後在 Docker 設定 WEBHOOK_URL) |
| Verify 成功,但手機訊息都沒反應 | 只開了 Developers Console 的 Use webhook,官方帳號「回應設定」的 Webhook 沒開;唯一那筆紅色紀錄其實是 Verify 送來的空訊息 | 打開回應設定的 Webhook |
| JSON Body is not valid JSON | 欄位在 Fixed 模式,{{ }} 被當成普通文字 | 切成 Expression,用 JSON.stringify() 組 JSON;改完要重新 Publish |
| AI 一直回「暫時沒有回應」,流程卻沒報錯 | gemini-2.5-flash 還在清單上,卻不開放給新帳號;錯誤被防呆接住,表面看不出來 | 讀執行紀錄找到 404,換模型 |
| 回覆要等 1~3 分鐘 | flash 系列在免費額度下回應很慢 | 模型測速後改用 flash-lite+備援 |
| 傳「你好」也跑很久,還被存成素材 | 規則只分說明/查詢/其他 | 加上打招呼與最短長度規則 |
| 「找Ai」回的卻是使用說明 | 規則的順序錯了:只有 3 個字,先被「太短當打招呼」攔下來,還沒輪到「開頭是找」 | 把「找」的判斷移到前面:規則一多,順序本身就是邏輯 |
| 設了 Error Workflow 卻沒有通知 | n8n 2.x 是發布制,錯誤通知 workflow 沒發布 | 錯誤通知 workflow 也要 Publish |
| Google Cloud 找不到之前建的專案 | Cloud Console 登入的是另一個 Google 帳號 | 切換成建立 Gemini 金鑰的那個帳號 |
| YouTube 連結都只被整理成「YouTube 影片」 | YouTube 會擋程式直接抓網頁 | 改用 YouTube 官方免費的 oEmbed 接口,不用金鑰就拿得到影片標題和頻道 |
| 清空表格後,新資料的 id 又從 1 開始 | n8n 表格清空會重新編號,同步是用 id 比對 | 規則:清空表格時,試算表也一起清空 |
八、未來可改進與擴充的項目
- 驗證 LINE 簽章:目前知道 webhook 網址就能偽造訊息,要用 Channel secret 驗證
x-line-signature - 看得懂影片和圖片:我在 kip! 存的大多是短影片,收收A 目前只讀得到網址(YouTube 已經能讀標題);之後想讓它讀字幕、看截圖,順便吸收我另一個暫停中的「AI 截圖整理器」
- 更多入口:電腦端丟資料夾、iOS 捷徑一鍵分享
- 更完整的視覺化:加圖文選單(Rich Menu),或用 LIFF 做一個在 LINE 裡打開的網頁,用表格、時間軸瀏覽全部收藏
- 開放給大家用的版本:現在是只給自己用的私人版。資料表已經有 user_id 欄位,未來可以讓每個人只看到自己的收藏;要思考的是註冊流程、隱私,以及 AI 額度怎麼分配
- 分類放進資料表:在表格裡就能新增分類、改顏色,甚至讓 AI 提議新分類
- 刪除與修改:在 LINE 裡就能刪掉收錯的、改分類
- 匯出成 Markdown:每則素材存成一份筆記,接上 Obsidian,變成真正的知識庫
九、心得
很久以前跟著 nuva 做過一次 LINE 機器人,那時候的 AI 連欄位名稱都會抓錯,常常要自己一個一個除錯。這次靠 AI 一起搭出整套工作流,我最大的感受是:分工變了。串接金鑰、資安這類需要「人來負責」的事情交給我自己,剩下的,我只需要好好想清楚「我到底需要什麼」。
最開心的是備份那一段。「把備份拆成獨立的流程」「即時同步再加每日對帳」這些概念都是我自己想的,之前從來沒機會驗證,只是腦中的理論。這次真的做出來、真的跑起來,證明那套想法是對的,那種感覺真的很棒!
示範
▲ 圖一:打招呼 → 收收A 自我介紹與使用說明(不經過 AI,一秒回覆)
▲ 圖二:傳一個 GitHub 連結 → 自動整理成〔AI工具〕;同一個連結再傳一次 → 「🔁 這個連結已經收過了」
▲ 圖三:一次貼 8 個連結(Threads、Instagram、YouTube 混在一起)→ 「📦 批次收藏完成:新增 8 筆」,每一筆都有自己的分類
▲ 圖四:「找 AI」→ 用說話的方式找收藏,直接附上連結
▲ 圖五:「book」→ 書籤卡片,可以左右滑,下方有分類快捷按鈕(全部 9 筆、AI工具 2 筆……)
▲ 圖六:出錯時的推播通知:哪個節點、什麼錯誤,一眼就知道
▲ 圖七:n8n 主流程全景(五條車道:固定回覆、收進來、找出來、書籤、一次收很多)
▲ 圖八:同步備份流程:「主流程呼叫」和「每天 03:00 對帳」兩個觸發,匯進同一套比對邏輯
▲ 圖九:n8n 內建表格裡的收藏(主力資料庫)
▲ 圖十:自動備份到 Google 試算表(user_id 已模糊處理),synced_at 記錄每一筆的備份時間
0 個愛心0 則留言
登入並驗證手機後就能留言。登入