標籤彙整: n8n

【模版下載】利用 n8n 免費自動生成 Notion 封面圖片

從去年開始的 AI 實戰讀書會在 2026 年做了一個小小的優化,除了開始會邀請特別來賓之外,也建立了專屬的 Notion 頁面來蒐集讀書會與日常討論分享的內容。

在建立 Notion 頁面時,我使用了很多「圖庫模式」,一來是美觀,二來也是讓大家可以比較容易找到分享的內容,不過此時圖庫縮圖的 cover 就是一個難題,以往都要手動到 Canva 做出圖片來,整個流程重複又無趣,在清明連假買了 Clauce Max 方案之下,決定來優化這件事。

使用工具

  • Claude/Gemini/ChatGPT 等可以做簡單 html 的 AI 服務
  • n8n
  • Notion 以及 Notion API
  • https://htmlcsstoimage.com/ 的免費帳號

前置步驟-設計

首先要設計縮圖,如果對於縮圖沒有什麼想法的話,可以到 Pinterest 或者 Canva 上找素材。我的目的是透過縮圖來放大 Page 的標題,讓大家一眼就可以找到,這個情況之下,就不建議太複雜,單純的線條或者文字都會比較適合。

我自己是透過 Cladue 來做的,將剛剛找到的範本貼給他,還有調整尺寸之後,直接請他做出 html 檔案。如果沒有範本也沒關係,可以說明清楚用途之後請他一直產給你,用選擇題來確定自己喜歡的顏色和設計方向。

以下是建議的 Prompt 還有尺寸

Prompt

我現在要製作 Notion 圖庫模式下,Page 的預覽封面,請依下列的製作,製作 HTML 封面圖卡

  • 尺寸:1600 x 900 像素(16:9)
  • 背景色:{你想要的背景色}
  • 標題文字位置:置中/中間靠右/右上…等
  • 標體字體顏色:{替換你想要的字體顏色}
  • 字體:Google Fonts 的 Noto Serif TC,font-weight 900
  • 標題內容請用變數,之後會替換

使用 Noto 字型是方便中文不缺字,如果要使用其他字型的話,盡量以開源、容易找到資源為主,才能確保 AI 生圖的過程,我們不用再另行處理字型問題。

更進階的玩法就是用前端網頁的概念來設計,也可以裝 Skill,但是有違這次封面圖片簡單清楚的目標,就不再另行說明。

n8n 建置步驟

Webhook Trigger

首先,要先利用 Notion 的按鈕功能,來發出 Webhook 訊號,當 Notion 按鈕按下去的時候,就會發送訊號到 n8n,啟動自動生圖的流程。

首先,從右上的 + 號按鈕先接出一個 Webhook 節點,上方會有 Webhook URLs,分為 Test URL 和 Production URL,在 Workflow 還沒有發布前,要先用 Test URL 來測試連結。

點一下網址就能複製 URL,之後打開 Notion,建立一個 Database,然後建立 Page 的範本,在 Property 的地方新增一個按鈕,點選編輯屬性 → 編輯自動化,選擇「傳送 Webhook」把剛剛的 Test URL 貼上,下方則選擇要傳送給 n8n 做圖的相關欄位,至少要有 Title!然著按下儲存。

回到 n8n,按下 Webhook 結節中的 Listen for test event。此時,手腳要很快地回到 Notion,新增一個 Page,按下剛剛我們設定的按鈕,如果  n8n 左方有回傳正確的訊息,那就代表成功了。再回到 Notion 把剛剛貼上的 Test URL 改成 Production URL。

製作封面 html

這一段有點麻煩,在製作封面圖的時候需要在這個節點回傳以下的內容:Title、字級大小、斷行原則,以及我們剛剛的 html 程式碼。

我有準備 Prompt,可以請 AI 直接協助產 code。當中的規則都可以依照自己的喜好做調整。

Prompt

我有一個 n8n workflow,Webhook 接收到的資料格式如下:

標題:$('Notion Webhook').first().json.body.data.properties['專案名稱'].title[0].plain_text
Page ID:$('Notion Webhook').first().json.body.data.id

請幫我寫一個 n8n Code 節點(JavaScript),不使用任何外部 AI API,所有邏輯都在 JavaScript 裡完成。功能如下:

  1. 取得標題和 page ID
  2. 用 JavaScript 判斷斷行和字級,規則是:
    • 計算字數(中文算 1 字,英文字母算 0.5 字)
    • 依字數決定字級 class:10 字以內 → title-sm,11–18 字 → title-md,19–25 字 → title-lg,26 字以上 → title-xl
    • 10 字以內不斷行
    • 超過 10 字則自動插入 <br> 斷行,斷行優先順序:冒號「:」> 破折號「—」> 頓號「、」> 逗號「,」> 空格
    • 英文專有名詞不可拆開
    • 最多斷成 3 行
    • 如果找不到標點或空格,就從文字中間斷開
  3. 把斷行後的標題和字級塞進以下 HTML 模板,標題位置用 {{標題}} 標記,字級位置用 {{字級}}
    (這裡貼你的 HTML 模板)
  4. 回傳格式:
    return [{ json: { html, pageId } }];

請直接給我完整的 n8n Code 節點的 JSON,可以匯入 n8n 使用。

利用 htmlcsstoimage 服務將 html 轉為圖片

https://htmlcsstoimage.com/ 網站註冊一個免費帳號,在 Dashboard 的 API 頁籤按下 create new key,就可以取得 ID 及 API 取得。每月有 50 張的免費額度,一般的情況下應該很夠用了。

然後在 n8n 上新增一個 http request 節點,將上一步組好的 html 送到 htmlcsstoimage.com,他會回傳一個圖片 URL。(本質上他就是幫我們把 html 檔案渲染出來,然後做截圖). 

下載圖片

將利用 htmlcsstoimage 轉存的圖片下載下來,讓 n8n 後續的結點可以使用。

後面的節點比較像是 Notion 的特有情況,是我在做流程中有點意外的部份,也和 Cladue 討論很久,讓 Claude 把後面的節點都寫好,我再來調整,所以仔細寫下來,也提醒自己。

在 Notion 建立上傳物件

我本來以為只要利用 Notion 的官方節點把剛剛製作好的圖片上傳上去就可以了,結果沒想到 Notion 官方節點不能直接上傳檔案,所以只能用 http request 節點呼叫 Notion API 來處理,而且這個過程出乎意料地複雜許多,也是和 Claude 一步一步討論出來的。

首先是要利用 http request 節點,呼叫 https://api.notion.com/v1/file_uploads 取得一個上傳檔案的id 及 URL。並且在呼叫 Notion API 的時候必須要放 header,不然會報錯,可以參考這份說明文件

合併 Binary

之後又會遇到一個我覺得 n8n 很不直覺的地方,就是我們之前在「下載圖片」這個節點下載的 Binary 資料,一直要馬上接下一個節點才能直接使用,但是上傳圖片到 Notion 需要同時有上一步的 ULR 和圖片檔案,所以要新增一個 code 節點,把上面兩步的資料打包成一筆資料往下送。

上傳圖片檔案到 Notion 伺服器

利用 Notion 的 https://api.notion.com/v1/file_uploads,上傳檔案。

寫入 Notion property

然後把剛才上傳的檔案寫入想要封面圖片的 property,就能在 Notion 裡看到圖片了

n8n 模版下載

和 Claude 一起做 n8n 流程比起之前學 n8n 時又更方便了,像是如何使用 Notion API 或者為什麼不能用官方的 Notion 節點,都有仔細的解釋,不用自己想破頭想很久。

我也把我的模版分享出來,比起剛剛的流程,我有多放一步利用 Gemini 來排版,來處理字數過多以及字型大小的問題,吃的 token 不多,還在 Google 免費的範疇,自己去 Google AI Studio 拿 API 就可以了。

【實作案例】用 Notion + n8n + AI 工具打造「報名資料更新小工具」|Vibe Coding 專案紀錄

這篇文章,是我給未來某個跟我一樣「不會寫程式、但想解決問題」的你。

專案起點:從馬祖路跑報名的煩惱開始

一年一度的馬祖路跑即將開始,負責報名的我又得整理隊員們的個資。雖然馬祖路跑小隊已經成軍三年了,過去也有一些資料留存,但報名所需要的資料太多,手上的資料還是不夠齊全。而報名的資料中還有姓名、身分證字號等機敏資訊,如果直接請大家開啟共用的 Notion 編輯,那幾十個人就都能看到彼此的資料,對我來說曝露的程度和風險又有點高了,若是請大家私訊確認補資料,一次要追 10 個人,又好麻煩,這個煩惱,成為我開啟這次 Vibe Coding Side Project 的動機。

我能不能做一個只讓使用者看到自己資料的小工具,讓他們自己來更新?

解決思路:用 AI + 自動化工具做出自己的「資料驗證與更新工具」

以下是我原本就有在使用的 AI 工具,因為原本就有在使用,所以不算是這次開發的專案成本。

  1. ChatGPT Plus
  2. Claude Pro
  3. Zeabur 開發者版本(之前在講義活動時還得到了 5 美金的折扣碼,Zeaber 真的簡單好用,推推)
  4. n8n
  5. Noion Plus

在與 AI 討論之後,決定了以下的工具以及用途

  • Notion Database:作為後端資料儲存
  • n8n:處理資料比對與身份驗證流程
  • Zeabur:佈署前端頁面
  • ChatGPT + Claude:協助我撰寫程式、規劃架構與 Debug

在正式 Vibe Coding 實作之前,我做了什麼?

我完全沒有 PM 經驗,沒有實際進行過產品設計以及產品開發,若真說要有一點產品經驗的話,在幾年前參加過商業思維學院的產品經理學習營,也上完產品經理學程,過程當中對於產品有一點基礎的認識。

第一步很產品經理:盤點資源,搭建專案架構
如果需要一個方法論的話,我會說,請釐清以下三件事情

  1. 你想做的事情是什麼,你希望使用者怎麼用這個工具 (user flow)
  2. 你的能力到哪裡、目前有什麼工具可以使用
  3. 在這個專案當中,有什麼事情是絕對不可以退讓犧牲的

我個人覺得第 3 點尤其重要,發現 AI 如果不記得了,也要常常提醒他。以這個專案來說,就是「資訊安全」。

如何用 ChatGPT/Claude 開始 Vibe Coding?

在搭建專案架構的時候,我非常推薦使用 ChatGPT 而不是 Claude。如果平常大量使用 ChatGPT 時,在搭建架構以及技術規格時,ChatGPT 還能依據過往的記憶,推薦出比較適合的作法,非常貼心。

確認好架構、資源後,就能開始扮演甲方角色,請 ChatGPT 提案,只要用自然語言描述想要達成的產出就可以了。我一開始的 Prompt 也就只有:

我有一個 Notion Database,裡面有成員的基本資料。
我希望有一個介面,可以讓成員輸入姓名和身分證字號驗證之後,
確認資料是否正確,並補齊沒有填完的資料。
請給我幾種解法,說明每種所需工具與優劣比較。

此時 AI 會像 PM 一樣提 A、B、C 三種方案,記得請他說明

  1. 需要有什麼能力
  2. 簡述作法(我有說我不會寫程式,請用大學生的角度說明)
  3. 優點與缺點

記得,這時候都不要開始寫程式,先把 要怎麼做 搞清楚,後面會順利很多。

在 ChatGPT 提出做法,清楚說明各方案需要的技術、操作方式與風險之後,視自己的能力或需求,選擇合適的方案走下去,就可以了。當時我的 prompt 是:

我想試試方案三,我有 Zeabur,可以佈署網頁。你可以幫我規劃架構嗎?

這時,ChatGPT 神奇地記得我會用 n8n,還主動建議把驗證邏輯放在那裡,讓前端不碰敏感資料,完美!

在 AI 給架構之後

不要直接相信 ChatGPT!!

這個階段要從甲方的角色轉變為 PM 角色,和 ChatGPT 一起開發。對話當中所有看不懂、無法理解為什麼的東西或流程, 一定要請他用各種方式解釋清楚,就算用童書繪本風格也可以。身為 PM 你一定要知道你要去哪,要怎麼去,不然 AI 工程師只會做白日夢,開始胡言亂語。

一切都沒有問題之後,按照他的步驟執行(或者你請他給流程清單,就一步步照做)。

以這個 side project 來說,要進行的步驟就是

  1. 設定 Notion API,並且在資料庫中 integrate
  2. 設定 n8n
  3. 在 Zeabur 佈署前端網頁

從網路上的分享還有我自己的經驗, ChatGPT 寫網頁很醜,所以我打算先從後台開始,前台打算之後轉移到 Claude 繼續。

記得每一個節點都要設測試,避免 AI 幻覺,不然做到最後發現他在胡說八道導致白做工,真的是會很生氣。

中間不斷地 設定→測試→修正,到都完成的時候,和 ChatGPT 說

整理一下目前的討論,我想換到 claude 上請他繼續

就能順利轉移了。

以 ChatGPT + Claude 完成首個 Vibe Coding 專案

這個月因為工作的關係付了一個月的 Claude 訂閱,終於可以吃大一點的檔案,Claude 對話窗的長度沒有短到像明天就要世界末日,說完需求後直接生出一個改都不用改的 html 檔,超神!(我額外有給 n8n workflow 的 json 檔,但好像沒有用到)

但這也是如果使用免費版開發上的限制,雖然 Claude 的程式碼品質非常好,但一個對話窗能夠使用的額度太低,加上還要幫新對話補充專案資訊,常常兩三次來回之後就要另開新對話。
󠀠
後期因為後來額外想顯示資料庫的資料,讓大家可以用核對而不是新增的方式確認,也是在 Claude 上就 n8n 的設定又來回了一陣子。

󠀠和上一段的過程差不多,但明顯 Claude 雖然也有亂講話的問題,但他給的內容的正確性很高,所以解決得都蠻快的
󠀠
最後測試一下,無論是測試帳號還是我自己的資料都可以正常使用

完成!

後續延伸應用與反思

目前這個專案已功成身退,畢竟就只是讓隊友們對一下報名資料而已。不過後來想想,不管是課程系統、預約系統
好像後續都可以再繼續發展下去。

於我自己來說,有另外一個新的目標想做,沒有什麼特別的契機的話,這 side project 就這樣結束。

在做完這個專案之後,和朋友們討論了一下 Vibing Coding 對我而言是什麼。我一開始其實覺得蠻新奇有趣的,看著很多人的成品覺得原來是有機會做到這件事,然後覺得很有趣!有機會也想來試試看。

在這次的 side project 之後,更像是覺得取得一個「自己做小工具來解決自己的問題」的能力,不是要取代工程師,而且多了一種解決問題的方法,覺得自己又多會了一點點東西,這種能夠實現自己的想像的感覺很好。

我不會說需要什麼才能開始,也不會說我 AI 玩得多厲害,關於如何學習 Vibe Coding 這件事,有大神幫我說完了

如果問我,如何能夠走出這一小步,除了自己喜歡玩玩具之外,不可獲缺的是案例,各式各樣、各行各業的案例,這也是為什麼每一次我都想在 Facebook 記下自己 side project 過程的原因。我不是一個有創新能力的人,但我是一個抄作業抄得很好的執行者,也希望我稱之為還在 #VibeCoding 危樓的程度下的經驗,成為未來某人的養份。