在 Day 6,我們學會了如何使用 HTTP Request
節點,像個專業的食材採購商一樣,從中央氣象署的 API 獲取了龐大的原始天氣資料。但這些資料就像一整箱未經處理的食材,混亂且難以閱讀,靜靜地躺在我們的 n8n 廚房裡。
之前新聞摘要的範例中,新聞的摘要我們是利用AI節點來替我們整理,並且用 Gmail 將摘要完的信件寄送到信箱中。今天,我們會用其他方式來處理,並且改成利用 Discord 來發送消息!
今天我們將學習如何從複雜的 JSON 中,提煉出我們需要的資料,過程中會用到我們之前學過的Edit Fields
節點,以及新的 If
、Aggregate
、Code
節點,最後將一則高溫提醒訊息,自動發送到你的 Discord 頻道!
這將是一個整合社群平台、並具備邏輯判斷力的工作流。讓我們開始吧!
在我們開始動手料理氣象數據之前,有兩項重要的準備工作:確保我們能獲取到原始數據,以及設定好將訊息送達 Discord 的通道。
我們將繼續使用 Day 6 設定好的 HTTP Request 節點來獲取中央氣象署的數據。請確保你的 HTTP Request 節點已經配置妥當,能夠成功取得臺北市文山區(當然也可以自己挑你要的地區)的天氣預報資料。如果你不確定,可以回顧 Day 6 的內容。
中央氣象署不同的資訊會有不同的URL 以及設定方式,可以依照自己的需求去使用。可以發現回傳了非常多的資料,但格式、層級非常的複雜,我通常會用 Schema 檢視模式來查看資料,可以很清楚知道現在資料的架構長什麼樣子。
像上圖中,我們獲得了文山區未來三天的天氣預報,但這裡面其實包含了非常多的天氣資訊,如:溫度、露點、天氣概況…等等(上面沒有截到,但都放在WeatherElement這個列表裡面)。
如果只是要建立高溫提醒,我們只需要溫度的資料就好,所以我們會利用各種節點來做資料的篩選。
Webhook,你可以想像成在網路世界(Web)裡掛上一個鉤子 (Hook)。一旦有事件發生(例如快遞送到),這個鉤子就會自動把資料掛過來,直接送進你的系統,不需要你不斷去「刷新查詢」。
就像在廚房門口掛了一個外送鈴:有人送菜來(事件發生),鈴聲一響,你馬上就能收到食材(資料)。
而有趣的是,你也可以反過來,當菜做好時,把它掛在別人家門口的鉤子上,主動送出通知。
今天用到的 Webhook 就是我們把它掛勾到 Discord 的頻道上,讓我們將 n8n 處理完的訊息傳遞到 Discord的頻道中(其實他本質上就是一個 HTTP POST 請求)
過去我們都將料理送到 Email,今天我們要送到一個更即時、更方便的社群平台:Discord。要讓 n8n 能對指定的頻道「說話」,最簡單的方式就是使用 Discord Webhook。它就像你在 Discord 頻道裡開了一個專屬的「送餐口」,n8n 可以直接將訊息「丟」進去。
詳細步驟如下:
A. 進入伺服器設定:在你的 Discord 伺服器中,選擇你想要發送通知的頻道,然後點擊頻道名稱旁邊的齒輪圖標進入「編輯頻道(頻道設定)」。(截圖中有我之前測試的結果,可以忽略🤣)
B. 選擇整合選項:在左側選單中,找到並點擊「整合 (Integrations)」。
C. 建立 Webhook:點擊「 Webhook」後,進入Webhook頁面,點選「新Webhook (Create Webhook)」。你可以為它命名(例如:「n8n天氣管家」),選擇頭像,然後點擊「複製 Webhook URL (Copy Webhook URL)」。請務必妥善保管這個 URL,它是你發送訊息的唯一憑證!
D. 新增 Discord Webhook Credential (也可以在設定DC節點時再新增):
回到 n8n,「Create Credential」 → 選擇「Discord Webhook」→ 將剛剛複製的Webhook URL 貼到Webhook URL 中 → Save
在我們深入每個節點的細節之前,先來看看這個「文山區高溫提醒助理」的完整工作流是長什麼樣子的。它從獲取原始數據,經過多步篩選與處理,最終發出智慧提醒。
現在,讓我們一步一步來打造這個強大的自動化工作流!
When clicking "Execute workflow"
(手動觸發器)
HTTP Request
(獲得溫度資料)
Method
為 GET
,URL
和Query
(Authorization、Location…等,可以參考中央氣象署官方文件) 已正確配置。如同前面提到,你會發現 HTTP Request 節點輸出的是一份非常龐大且巢狀的 JSON 資料。它包含了文山區的各種天氣元素(溫度、降雨機率、風速等),且每個元素的時間軸都包裝得很深。這正是我們需要後續節點來「料理」的原因!
如果想要其他的資訊,只要後續資料處理時選擇自己想要的就可以了!
Edit Fields
節點
Edit Fields
節點Mode
中選擇 Manual Mapping
。Name
設為 Wenshan_Weather_Temp
(或其他你喜歡的名稱)。Value
欄位可以手動填表達式:{{ $json.records.Locations[0].Location[0].WeatherElement[0] }}
,或是直接將溫度的weatherElement 直接拖曳到Value欄位中。這邊篩選的流程會取決於資料長什麼樣子,因此看懂資料跟清楚自己要的資料在哪裡是非常重要的。我會善用各種資料檢視模式來看懂,每種檢視模式都有其用途。
Split Out (Time/Item)
節點
Item
中包含所有時間點的溫度預報,我們想把每個時間點拆成獨立的 Item
,使得每個 Item
代表一個時間點的溫度預報。這對於後續的判斷和處理非常關鍵。Field to Split Out
輸入我們在上一步中溫度的欄位名稱並加上.Time
:Wenshan_Weather_TempData.Time
,或使用拖曳的方式,將 Schema 檢視模式情況下,將Time直接拖曳過去知識點:Split Out 節點的核心價值
原始數據中,不同時間點的溫度預報都包在同一個 time 陣列裡,作為一個 Item 的一部分。當我們需要針對每個時間點進行判斷(例如「哪個時間點會高溫?」),就必須將它們拆開。Split Out 節點就是做這件事的,它能將一個 Item 內部的一個陣列,轉換為多個獨立的 Item,讓每個單獨的時間點預報都能被後續節點獨立處理。
要分解什麼,取決於資料的格式以及需求,像這邊是因為中央氣象署將所有時間點的所有溫度全部包在 Time 這個欄位裡面,所以我們才要去拆解它。如果他本身就拆開了,就不需要這一步。
Edit Fields 2 (Time&Temp)
節點
Name
: Time
, Value
: {{ $json.DataTime }}
Name
: Temp
, Value
: {{ $json.elementValue[0].Temperature }}
知識點:多層次數據提取
這裡我們Edit Fields節點,直接從 Split Out 節點輸出的每個 Item 中,提取出 DataTime、 elementValue 陣列中的第一個 value (即溫度值)。這使得每個 Item 都變得非常簡潔,易於後續判斷。
這個步驟是將我們想要的資料去進行重構,讓我們、可以輕易解讀這些資料。這樣一來,我們的每個 item 就只會有兩個 Key : 時間、溫度。
IF (>30)
節點
Value 1
: 選擇 Expression
,填入 {{ $json.temp.ToNumber() }}
(即每個時間點的溫度值)。因為原始資料的溫度是用字串的形式儲存,因此我們需要將它轉成數字才可以比大小Operation
: 選擇 Number
-> is Greater Than
(大於)。Value 2
: 填入你的高溫門檻,例如 30
(表示大於 30 度算高溫)。知識點:
IF 節點的條件判斷IF 節點會針對每個輸入的 Item 獨立進行判斷。如果 Item 符合條件,就會從 true 分支輸出;如果不符合,則從 false 分支輸出。這樣我們就能將所有的高溫預報,與非高溫預報區分開來。
除了比較數字之外,也可以比較各種資料,如字串是否相同、是否包含某些字串...等等,有非常多種條件可以比較。同時也可以設定多個條件,並設定是 and(都符合)或是 or (符合至少一個)。
Aggregate
節點
Item
。為了將它們整理成一則提醒訊息,我們可以將這些 Item
再次「彙總」起來,變成一個單一的 Item
,但其內部包含所有高溫預報的列表。Aggregate
選擇 Individual Fields
。Fields to Aggregate
的Input Field Name
分別填入時間、溫度的欄位名稱知識點:Aggregate 節點的「彙總」能力
Aggregate 節點是將多個 Item 合併為單一 Item 的強力工具。當我們需要將前面 IF 節點篩選出來的所有高溫預報,全部集中到一個 Item 內部,以便後續統一處理和生成訊息時,Aggregate 就能派上用場。它會把所有的 Item 壓縮到新 Item 的一個陣列(通常是 items 鍵)中。
Aggregate 節點也有另外一種是將 All item data 合併成單一一個List,可以嘗試玩玩看並觀察有什麼不同。
Code in JavaScript
節點
功能:運用 JavaScript 程式碼的強大彈性,將 Aggregate
節點彙整後的所有高溫預報,格式化成一段易讀、適合 Discord 發布的提醒文字。
設定:JavaScript
Code
節點中貼入以下程式碼:const data = items[0].json;
const times = data.Time;
const temps = data.Temp;
let message = "未來三天高溫(高於30度)注意提醒:\n";
const formatterDate = new Intl.DateTimeFormat("zh-TW", {
month: "2-digit",
day: "2-digit",
timeZone: "Asia/Taipei"
});
const formatterTime = new Intl.DateTimeFormat("zh-TW", {
hour: "2-digit",
minute: "2-digit",
hour12: false,
timeZone: "Asia/Taipei"
});
for (let i = 0; i < times.length; i++) {
const dt = new Date(times[i]); // 原始 ISO 含 +08:00
const dateStr = formatterDate.format(dt);
const timeStr = formatterTime.format(dt);
message += `${dateStr} ${timeStr}:高溫 ${temps[i]} 度\n`;
}
message += "請注意高溫並補充水分!";
return [{ json: { message } }];
知識點-Code 節點的進階應用
Code 節點是 n8n 的超級工具人,當現有節點無法滿足你的複雜數據處理需求時,JavaScript 就能派上用場。這裡我們將送來的「文山區所有高溫時段數據」,用我們設定好的日期時間格式,逐一整理成一段架構清楚且易讀的文字訊息,最終交給 Discord 機器人去廣播。它讓原本雜亂的數據,變得更加清晰!
如果不知道 Code 要怎麼打,可以去詢問 AI,告訴他你的輸入格式、需求、輸出要求,請他給你相關的程式碼,他就會給你能夠將資料進行處理的程式碼了。
像上面的程式碼,我是詢問 ChatGPT 的,詳細的prompt 如下:
在n8n中,假設我在將資料處理後(由一個Aggregate節點輸出)得到的格式如下(list 裡面的項目數不一定固定,這是篩選過後的): [ { "Time": [ "2025-09-24T12:00:00+08:00", "2025-09-25T12:00:00+08:00", "2025-09-25T15:00:00+08:00" ], "Temp": [ "33", "34", "33" ] } ] 我想要整理成一則高溫提醒的天氣訊息: 「未來三天高溫注意提醒: XXX(時段一):高溫XXX度(氣溫一) XXX(時段二):高溫XXX度(氣溫二) XXX(時段三):高溫XXX度(氣溫三) ....看有幾個時段 請注意高溫並補充水分! 」 請問要怎麼做?
Discord
節點 (或 HTTP Request
節點)
Connection Type
: 選擇 Webhook
。Credential for Discord Webhook
: 選擇前面 1.2 我們設好的Credential,如果還沒有新增,也可以從這邊新增。Operation
: 選擇 Send a message
。Message
: 將前面 Code 節點的 message 欄位拉到這個欄位,或手動輸入:{{ $json.message }}
(記得要換成 Expression)知識點:Discord Webhook 的運用
Discord 節點(本質上也是封裝了 HTTP Request)允許我們以 POST 請求的方式,將 JSON 數據發送到 Webhook URL。因為這個 Webhook URL 是綁在我們設定的天氣提醒的文字頻道,我們就可以在該頻道中看到高溫提醒的訊息。
一切都測試成功後,就可以把最前面的 Trigger 換成定時的 Trigger,並將工作流設為 Active 後,之後就會自動發送高溫提醒消息到你的 Discord 頻道了!
恭喜你完成了今天的自動化 Discord 高溫提醒工作流!現在,你已經掌握了 n8n 最核心的「數據獲取、處理、判斷、發送」四大能力。回顧一下,今天的工作流與我們 Day 4、5 打造的新聞摘要工作流,其實有著異曲同工之妙,也展現了 n8n 更深層次的彈性:
RSS Read
節點,現在是 HTTP Request
節點,能從更多元的網路服務獲取數據。AI 節點
進行摘要,現在則透過 Edit Fields
、Split
、IF
、Aggregate
這些節點組合,實現了精準的數據清洗、重塑與邏輯判斷。Gmail
節點,現在則進化到 Discord
節點,將訊息送達到更即時的社群平台。這正是 n8n 最迷人的地方!節點的設計與排列組合,完全取決於你想客製化自動化的需求。你可以將這些技能想像成積木,現在你已經學會了許多不同形狀和功能的積木,接下來要怎麼堆疊、組裝,完全由你決定!
工作流的設計可謂千變萬化。現在,你可以開始思考自己生活中是否有類似「重複做」且「耗時」的動作,嘗試用今天學到的知識去挑戰自動化它!
今天我們從龐大的氣象數據中,篩選出文山區的高溫預報,然後將高溫的時間點篩選出來,並整理成一個高溫提醒發送到你的 Discord 頻道。你的個人天氣管家已經正式上線!
今天的文章讓我們深入了解了 n8n 強大的數據處理與邏輯判斷能力。我們學會了如何使用 Edit Fields
和 Code
精準地清洗和轉換數據,並透過 Split Out
和 Aggregate
靈活地重塑數據結構,最後用 IF
節點做出關鍵決策。
我們目前所打造的工作流很會「對內溝通」—— 向我們自己回報各種大小事。但如果,我們想讓它學會「對外溝通」,自動化地向世界發布訊息,甚至幫我們管理品牌、與粉絲互動呢?
接下來,我們將正式進入全新的篇章:【行銷管理篇】!我們將把第一週學到的所有基礎技能,延伸到一個更廣闊、更具商業價值的領域。而我們的第一個挑戰,就是攻克目前最主流、也最具挑戰性的社群平台之一 —— Facebook。
明天,我們將一步步帶你完成 Facebook for Developers 的繁瑣設定,成功取得 Facebook Credential 。並且在未來的日子,透過 n8n 在你的粉絲專頁上,發布貼文(例如之前做好的新聞摘要或是高溫提醒。
準備好讓你的 n8n 助理學會更多應對之道了嗎?我們明天見!