每天 07:30,自動寄出
行程 + AI 新聞晨報

用 n8n 串接 Google Calendar、RSS、ChatGPT 與 Gmail,建立免手動的 24/7 自動化流程

Google Calendar
+
RSS
→
ChatGPT
→
Gmail

核心概念:資料都是 JSON,從 Trigger 開始

n8n 節點之間傳遞的資料,永遠包在「物件陣列」裡,所以運算式一律以 $json 開頭。

[
  {
    "json": {
      "summary": "Họp Ban Giám Đốc",
      "start": "2024-07-26T09:00Z"
    }
  }
]
取值:{{ $json.summary }}
Google Calendar、RSS、OpenAI、Gmail 因此能互通資料。
Manual TriggerSchedule Trigger
啟動手動按 Execute依時間自動(如 07:30)
開發期必用,可逐節點測試不適合
上線期移除必用,系統心臟
Mock Data:鎖定樣本資料讓測試結果可重現,並讓後段節點在上游服務未就緒時也能先設定。

整體架構:兩條支線,合流後交給 AI

Schedule Trigger 同時啟動兩條資料支線,整理成單一資料包後再生成並寄出郵件。

Schedule Trigger07:30 每日
→
Calendar → Date & Time → Edit Fields支線 1:行程(2 筆)
RSS Read → Filter → Edit Fields支線 2:AI 新聞(8 筆)
→
Merge10 筆
→
Aggregate1 筆
→
ChatGPT
→
GmailHTML
原則:先「精簡」資料,再「合併」,最後「聚合」成 1 筆,才交給 AI 與 Gmail。

兩條資料支線:取得、轉換、精簡

支線 1 Google Calendar
  • Get Many Events:預設抓 1 週,改成 day 只取當日
  • Date & Time:把 ISO 8601 轉成易讀格式
    YYYY/MM/DD hh:mm a,欄位命名「開始時間」
  • Edit Fields:只留「活動名稱」{{ $json.summary }} 與「開始時間」
支線 2 RSS 新聞
  • RSS Read:https://techcrunch.com/feed/
  • Filter:categories contains AI;可用 OR 加入 LLM、Robotics
  • Edit Fields:只留 {{ $json.title }} 與 {{ $json.link }}

實測:20 篇 → 8 篇,雜訊減少 60%

為什麼要精簡?減少傳輸資料量,並降低 AI 的 Token 成本與幻覺風險。

關鍵技巧:用 Aggregate 控制執行次數

n8n 的規則:前一個節點輸出 N 筆,後一個節點就會執行 N 次。

Merge 10 筆 → Gmail 寄 10 封
Aggregate 1 筆 → 只寄 1 封

Merge

把 Calendar 的 2 筆與 RSS 的 8 筆,合併成 10 筆獨立項目。

Aggregate

把 N 筆項目打包成 1 筆、內含 N 個元素的陣列,執行次數重設為 1。
前一節點的輸出筆數,決定後一節點的執行次數。

小技巧:用 Sticky Note 分區上色(綠=觸發與來源、黃=處理、紫=AI),流程更易讀。

ChatGPT 與 Gmail:把資料變成漂亮的郵件

OpenAI 節點
  • Action:Message a Model,模型選 GPT-4o 或 GPT-4o-mini
  • System Message(固定指令):
    行事曆在前、AI 新聞在後;英文標題譯成中文並附原文連結;只輸出含 inline CSS 的 HTML,不要 Markdown 程式碼框
  • User Message(動態資料):{{ $json.data }}
  • 需先在 platform.openai.com 儲值並建立 API Key
Gmail 節點
  • Action:Send a Message
  • Email Type 必須改成 HTML,否則收件人只會看到原始程式碼
  • Subject:
    每日行程與新聞 {{ $now.format('YYYY/MM/DD') }}
  • Message:{{ $json.message.content }}

上線前:OAuth2 設定與檢查清單

Google Cloud 設定
  1. 建立專案(如 n8nAutomation)
  2. 啟用 Google Calendar API 與 Gmail API
  3. OAuth Consent Screen 選 External,並把自己的 Gmail 加進 Test Users
  4. 建立 OAuth Client ID(Web application)
  5. 把 n8n 提供的 Redirect URL 貼進 Authorized Redirect URIs
  6. 將 Client ID / Secret 貼回 n8n,按 Connect my account
啟動前檢查
  • 兩個 Google API 皆已啟用,OpenAI 餘額足夠
  • Aggregate 輸出確認只有 1 筆
  • Gmail 的 Email Type 為 HTML
  • Manual Trigger 已換成 Schedule(07:30),並將流程切到 Active