🤖

n8n 自動化進階教學

Part 7: LINE Bot + Gemini + 天氣 API

打造智慧天氣查詢機器人

💬 LINE Bot 🧠 Gemini AI 🌤️ 天氣 API

🎯 本章目標:智慧天氣機器人

我們要打造一個 LINE Bot,用戶傳訊息問天氣,機器人會:

LINE 傳訊息
Webhook 接收
解析城市
天氣 API
Gemini 回答
回覆 LINE

📱 LINE Bot

接收用戶訊息,用 Webhook 觸發 n8n 工作流程

🌤️ OpenWeatherMap

取得即時天氣數據(溫度、濕度、天氣狀況)

🧠 Gemini AI

根據天氣數據,用自然語言回覆用戶

🔄 n8n 自動化

串接所有服務,全自動處理

✅ 第 1 步:LINE Developer 設定

如果你還沒建立 LINE Bot,請先到 LINE Developer 控制台建立:

1

前往 LINE Developers Console

https://developers.line.biz/console/
2

建立 Provider(服務提供者)

輸入你的組織或個人名稱

3

建立 Channel(Messaging API)

選擇「Messaging API」類型

4

記下重要資訊

  • Channel access token(長效權杖)
  • Channel secret(頻道密鑰)
重要:這兩個資訊之後會用到,請先複製保存!

🔑 第 2 步:在 n8n 建立 LINE 憑證

1

到 n8n 上方選單:Credentials

2

點「+」→ 選擇 Line Messaging API

3

輸入 LINE 的憑證資訊

欄位 說明
Channel Access Token 從 LINE Developers 複製的長效權杖
Channel Secret 從 LINE Developers 複製的頻道密鑰
4

點【Save】儲存憑證

看到「Connection tested successfully」表示成功!

🔧 第 3 步:建立新的 Workflow

1

點右上角的「Create Workflow」按鈕

2

命名成「Line to Gemini Weather」

3

先保持 Active 開關關閉

等測試成功後再開啟

接下來我們要加上的節點:
  • Webhook - 接收 LINE 傳來的訊息
  • Code - 解析訊息內容
  • HTTP Request - 呼叫天氣 API
  • HTTP Request - 呼叫 Gemini API
  • HTTP Request - 回覆 LINE

📡 第 4 步:建立 Webhook 節點

1

在畫面中間按「+」→ 搜尋「Webhook」

2

設定參數

欄位 設定值
HTTP Method POST
Path line-webhook(自訂網址尾巴)
3

你會得到一個網址

https://你的n8n網域/webhook/line-webhook
Production URL vs Test URL:正式上線時要用 Production URL!

🔗 第 5 步:在 LINE 設定 Webhook URL

1

登入 LINE Developers Console

2

進入你的 Bot 專案 → Messaging API

3

找到 Webhook URL,貼上 n8n 的網址

https://n8n-gpt01.zeabur.app/webhook/line-webhook

(記得用 Production URL,不能有 -test)

4

開啟「Use webhook」開關

5

點擊「Verify」測試

看到 Success 表示設定成功!

📝 第 6 步:解析 LINE 訊息(Code 節點)

在 Webhook 後面加一個 Code 節點,用來提取用戶傳來的訊息:

const items = $input.all(); const data = items[0].json; const message = data.message; return [{ json: { type: message.type, text: message.text || null, userId: data.source.userId, replyToken: data.replyToken, } }];
這段程式碼會提取:
  • text - 用戶傳來的文字內容(地名/問題)
  • replyToken - 回傳訊息需要的 Token
  • userId - 用戶 ID

🌤️ 第 7 步:申請 OpenWeatherMap API Key

Gemini 沒有聯網功能,無法查即時天氣,所以我們要串接天氣 API!

1

前往 OpenWeatherMap 官網

https://openweathermap.org/
2

點右上角「Sign In」→「Create an Account」

使用 Email 註冊並驗證

3

登入後,點擊你的名字 →「My API keys」

4

複製 Default API key

重要:新創建的 API Key 需要等 1-2 小時才能啟用!

🏙️ 第 8 步:解析城市名稱(Parse City)

新增一個 Code 節點,將中文城市名轉換成英文:

const userMessage = $input.item.json.text; const replyToken = $input.item.json.replyToken; const cityMap = { '台北': 'Taipei', '臺北': 'Taipei', '新北': 'New Taipei City', '桃園': 'Taoyuan', '台中': 'Taichung', '台南': 'Tainan', '高雄': 'Kaohsiung', '基隆': 'Keelung', // ...更多城市 }; let cityName = 'Taipei'; let cityNameChinese = '台北'; for (const [chinese, english] of Object.entries(cityMap)) { if (userMessage.includes(chinese)) { cityName = english; cityNameChinese = chinese; break; } } return [{ json: { cityName, cityNameChinese, userMessage, replyToken } }];
功能:自動偵測用戶訊息中的城市名稱,轉換成 API 需要的英文格式

🌡️ 第 9 步:取得天氣資料(Get Weather)

新增一個 HTTP Request 節點來呼叫天氣 API:

欄位 設定值
Method GET
URL https://api.openweathermap.org/data/2.5/weather?q={{$json.cityName}},TW&appid=你的API_KEY&units=metric&lang=zh_tw
Authentication None
URL 參數說明:
  • q={{$json.cityName}},TW - 城市名稱(動態)
  • appid=你的API_KEY - 你的 API Key
  • units=metric - 使用攝氏溫度
  • lang=zh_tw - 回傳繁體中文

📊 第 10 步:整理天氣數據

新增一個 Code 節點(Format Weather Data),整理天氣資料給 Gemini:

const weather = $input.item.json; const cityNameChinese = $('Parse City').item.json.cityNameChinese; const userMessage = $('Parse City').item.json.userMessage; const replyToken = $('Parse City').item.json.replyToken; const weatherInfo = ` 用戶問題: ${userMessage} ${cityNameChinese}即時天氣資料: - 天氣狀況: ${weather.weather[0].description} - 溫度: ${weather.main.temp}°C - 體感溫度: ${weather.main.feels_like}°C - 濕度: ${weather.main.humidity}% - 風速: ${weather.wind.speed} m/s 請根據以上真實天氣資料,用繁體中文、親切簡潔的方式回答。 `; return [{ json: { contents: [{ parts: [{ text: weatherInfo }] }], replyToken: replyToken } }];

🧠 第 11 步:呼叫 Gemini API

新增一個 HTTP Request 節點來呼叫 Gemini:

欄位 設定值
Method POST
URL https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent?key=你的GEMINI_API_KEY
Send Headers 開啟,Content-Type: application/json
Send Body 開啟,Body Content Type: JSON
Specify Body Using Fields Below
Body Parameter contents = {{ $('Format Weather Data').item.json.contents }}
Gemini API Key:到 Google AI Studio 申請免費的 API Key

💬 第 12 步:整理 LINE 回覆格式

新增一個 Code 節點,將 Gemini 的回覆整理成 LINE 的格式:

// 取得 replyToken const replyToken = $('Code in JavaScript').item.json.replyToken; // 取得 Gemini 回應 const geminiText = $input.item.json.candidates[0].content.parts[0].text; // 回傳 LINE 格式的 JSON return [{ json: { replyToken: replyToken, messages: [ { type: "text", text: geminiText } ] } }];

📤 第 13 步:回覆 LINE 訊息

最後新增一個 HTTP Request 節點,把回覆傳回 LINE:

欄位 設定值
Method POST
URL https://api.line.me/v2/bot/message/reply
Authentication None

Headers 設定:

Name Value
Content-Type application/json
Authorization Bearer 你的LINE_CHANNEL_ACCESS_TOKEN

Body 設定:

Send Body: 開啟 → Body Content Type: JSON → Specify Body: Using JSON

{{$json}}

🚀 第 14 步:啟動並測試

1

確認 Webhook 使用 Production URL

點擊 Webhook 節點,切換到 Production URL

2

點擊右上角 Active 開關,開啟 Workflow

3

用手機傳訊息給 LINE Bot

例如:「台北市天氣」、「高雄天氣如何」

4

查看 n8n 的 Executions 頁面

確認每個節點都有綠色勾勾表示成功!

成功畫面:LINE Bot 會回覆即時的天氣資訊,包含溫度、濕度、天氣狀況等!

📋 完整 Workflow 流程圖

Webhook
Code in JavaScript
Parse City
Get Weather
Format Weather Data
HTTP Request (Gemini)
Code (格式化)
HTTP Request (LINE)
節點數量:8 個節點
API 串接:OpenWeatherMap + Gemini + LINE Messaging API

🎉 Part 7 總結

你學會了:

  1. LINE Developer 設定:建立 Bot 並取得憑證
  2. Webhook 串接:接收 LINE 訊息觸發工作流程
  3. 天氣 API 串接:取得即時天氣數據
  4. Gemini AI 串接:讓 AI 用自然語言回覆
  5. LINE Reply API:把回覆傳回給用戶
進階挑戰:可以加入更多功能,例如圖片辨識、多城市支援、天氣預報等!
← 上一章 回到首頁 🏠