🧠 學生日程自動提醒
Google Calendar → n8n → Function / AI → Email / Line Notify
今天要完成的就是 中間那段「資料處理」,
讓輸出的內容變成「人類可讀、可寄出的訊息」。
步驟 | 任務 | 成功標準 |
---|---|---|
1️⃣ | 取得 Google Calendar JSON(從前一天) | 能執行到 Calendar Node |
2️⃣ | 用 Function Node 處理資料 | 轉成文字清單格式 |
3️⃣ | (選配)AI Node 美化摘要內容 | 生成自然語句訊息 |
4️⃣ | 用 Set Node 輸出乾淨訊息 | 為通知步驟準備好資料 |
5️⃣ | 寫下中間成果心得 | 說明處理邏輯與遇到問題 |
確保昨天 workflow 有成功執行:
[
{
"summary": "期中報告準備",
"start": { "dateTime": "2025-10-27T09:00:00+08:00" },
"end": { "dateTime": "2025-10-27T10:00:00+08:00" },
"description": "與同學討論報告方向"
},
{
"summary": "體育課",
"start": { "dateTime": "2025-10-27T13:00:00+08:00" },
"end": { "dateTime": "2025-10-27T15:00:00+08:00" },
"description": ""
}
]
// 取得上一個節點(Google Calendar)的輸出
const events = $json;
// 檢查是否有資料
if (!Array.isArray(events) || events.length === 0) {
return [{ json: { message: "📭 今日沒有行程。" } }];
}
// 格式化每個事件
const messageList = events.map((event, index) => {
const start = new Date(event.start.dateTime).toLocaleTimeString('zh-TW', { hour: '2-digit', minute: '2-digit' });
const end = new Date(event.end.dateTime).toLocaleTimeString('zh-TW', { hour: '2-digit', minute: '2-digit' });
const title = event.summary || "未命名活動";
const description = event.description ? `(${event.description})` : "";
return `${index + 1}. ${title}:${start} ~ ${end} ${description}`;
});
// 組合成完整訊息
const finalMessage = `📅 今日行程提醒\n---------------------\n${messageList.join('\n')}`;
return [{
json: {
message: finalMessage
}
}];
✅ 執行結果(範例)
{
"message": "📅 今日行程提醒
---------------------
1. 期中報告準備:09:00 ~ 10:00(與同學討論報告方向)
2. 體育課:13:00 ~ 15:00"
}
在 Function Node 後新增 HTTP Request Node。
設定如下:
Method:POST
URL:https://api-inference.huggingface.co/models/facebook/bart-large-cnn
Headers:
Authorization: Bearer hf_你的HuggingFace_API_KEY
Content-Type: application/json
Body:
{
"inputs": "請幫我將以下行程文字轉成簡潔自然的每日提醒訊息: {{$json["message"]}}"
}
選項:Response → JSON。
執行後你會看到模型回傳的摘要訊息,例如:
{
"summary_text": "早上9點有期中報告討論,下午1點上體育課。別忘了帶報告資料喔!"
}
新增一個 Set Node,把最終輸出統一格式化:
新增欄位 final_message
內容使用 expression:
{{$json["summary_text"] || $json["message"]}}
這樣不管有沒有使用 AI,都會輸出一個乾淨訊息,方便寄出。