n8n 作为一款开源的AI Agent 工具,它的内置节点不仅多,功能还很强大,已经受到越来越多的AI 使用者的青睐,本文将通过构建一个完整的天气预报系统,来为大家展示一下 n8n 平台在数据处理方面的一个强大能力。
整体流程概述:

工作流完整示例:

技术栈:n8n + WeatherAPI + SMTP邮件服务
第一阶段:数据获取
步骤一:配置HTTP Request节点
作为起始节点,该节点的作用是负责从外部API获取原始天气数据
详细配置示例图如下:


配置核心要点说明:
● Method:选择默认(GET)
● URL网址:http://api.weatherapi.com/v1/current.json(不同API地址填写不一样,这里我用的是 weatherapi 第三方天气平台)
● Authentication:None
● Specify Query Parameters:选择“Using Fields Below”,需要填写参数,该工作流核心目的是获取某固定城市天气情况,因此参数我们增加三个:

步骤二:第三方天气AIP服务选择
天气第三方获取平台我用的是 weatherapi,该平台的优点是密钥生成后,瞬间就能生效和使用,非常方便。
其他推荐:OpenWeatherMap(需等待激活)、和风天气(国内服务)等。
注册流程:
● 访问WeatherAPI(https://www.weatherapi.com/)官网完成注册
● 在控制台获取API密钥
● 密钥立即生效,无等待时间
第二阶段:数据处理
步骤三:配置Code代码节点进行数据清洗
节点作用:配置Code代码节点将原始 API 的天气数据提取出来,并转换为能呈现的业务数据
// 从WeatherAPI响应中提取和格式化天气数据
const weatherData = $input.first().json;
// 构建清晰的结构化数据
const result = {
// 位置信息
location: {
city: weatherData.location.name,
country: weatherData.location.country,
localTime: weatherData.location.localtime
},
// 主要天气信息
weather: {
temperature: weatherData.current.temp_c + "°C",
condition: weatherData.current.condition.text,
feelsLike: weatherData.current.feelslike_c + "°C",
icon: weatherData.current.condition.icon
},
// 详细指标
details: {
humidity: weatherData.current.humidity + "%",
windSpeed: weatherData.current.wind_kph + " km/h",
windDirection: weatherData.current.wind_dir,
pressure: weatherData.current.pressure_mb + " mb",
visibility: weatherData.current.vis_km + " km",
uvIndex: weatherData.current.uv
},
// 用于通知的格式化消息
formattedMessage: `🌤️ ${weatherData.location.name}天气情况:
温度: ${weatherData.current.temp_c}°C
天气: ${weatherData.current.condition.text}
体感: ${weatherData.current.feelslike_c}°C
湿度: ${weatherData.current.humidity}%
风速: ${weatherData.current.wind_kph} km/h`
};
return [{
json: result
}];
代码填写完毕后,可点击右上方“Execute step”进行代码测试,看是否能正常获取到信息!

步骤四:增加调试节点,对传过来的数据进行测试
// 自定义调试节点 - 显示和记录数据
const inputData = $input.first().json;
console.log('=== 天气数据调试信息 ===');
console.log('城市:', inputData.location.city);
console.log('国家:', inputData.location.country);
console.log('温度:', inputData.weather.temperature);
console.log('天气状况:', inputData.weather.condition);
console.log('体感温度:', inputData.weather.feelsLike);
console.log('湿度:', inputData.details.humidity);
console.log('风速:', inputData.details.windSpeed);
console.log('=== 完整数据结构 ===');
console.log(JSON.stringify(inputData, null, 2));
// 同时创建一个简化的调试输出
const debugOutput = {
summary: `${inputData.location.city}天气: ${inputData.weather.temperature}, ${inputData.weather.condition}`,
keyMetrics: {
temperature: inputData.weather.temperature,
condition: inputData.weather.condition,
feelsLike: inputData.weather.feelsLike,
humidity: inputData.details.humidity
},
fullData: inputData, // 保留完整数据供后续节点使用
debugInfo: {
timestamp: new Date().toISOString(),
node: '自定义调试器'
}
};
// 返回数据,继续流程
return [{
json: debugOutput
}];
和步骤三一样,代码填写完毕后,也可进行代码测试,看是否出现问题。
步骤五:添加临时数据查看器
作用:可从 N8N 的运行日志中找到输出数据,可观察数据
// 数据查看器 - 创建易于阅读的输出
const debugData = $input.first().json;
// 创建格式化的输出
const formattedOutput = {
// 简洁摘要
weatherSummary: debugData.weatherSummary || debugData.summary,
// 关键指标表格
keyMetrics: debugData.keyMetrics,
// 调试信息
debugTimestamp: debugData.debugInfo ? debugData.debugInfo.timestamp : new Date().toISOString(),
// 原始数据引用
originalData: "完整数据已记录到日志",
// 添加城市信息(这里假设城市是北京,你可以根据需要修改)
location: {
city: "北京"
},
// 保留原有的notification和weather字段
notification: debugData.notification,
weather: debugData.weather
};
console.log('=== 格式化输出 ===');
console.log('天气摘要:', formattedOutput.weatherSummary);
console.log('关键指标:', formattedOutput.keyMetrics);
console.log('城市:', formattedOutput.location.city);
return [{
json: formattedOutput
}];
第三阶段:天气判断
步骤六:配置 IF 节点
节点作用:通过对天气的好坏进行判断,根据不同天气情况生成不同的预警提醒,比如极端天气,就发邮件通知用户注意保暖、注意防暑等,如果是正常天气,就正常通知用户即可。
天气逻辑思路:
当天气<5°C(寒冷)或 >30°C(炎热)时,就是称为极端天气,否则就是正常天气,因此这里需要填写两个参数。
当天气<5°C(寒冷)时参数配置:
左边:{{ $json.keyMetrics.temperature.replace("°C", "") }} ,右边:5
当天气>30°C(炎热)时参数配置:
左边:{{ $json.keyMetrics.temperature.replace("°C", "") }},右边:30
示例如下:

步骤七:好坏天气配置
这里配置两个Code代码节点,一个是承接好天气,一个是承接坏天气。

特殊天气代码:
// 特殊天气提醒生成器
const data = $input.first().json;
const temp = parseFloat(data.keyMetrics.temperature.replace("°C", ""));
const condition = data.keyMetrics.condition;
// 根据具体条件生成不同的提醒
let alertType = "";
let alertMessage = "";
let emoji = "⚠️";
if (temp < 5) {
alertType = "寒冷警告";
alertMessage = "温度较低,请穿戴保暖衣物,注意防寒保暖。";
emoji = "❄️";
} else if (temp > 30) {
alertType = "高温警告";
alertMessage = "天气炎热,请避免长时间户外活动,多补充水分。";
emoji = "🔥";
} else if (condition.includes('雨')) {
alertType = "雨天提醒";
alertMessage = "今天有雨,出门请记得带伞,注意路面湿滑。";
emoji = "🌧️";
} else if (condition.includes('雪')) {
alertType = "雪天提醒";
alertMessage = "今天下雪,道路可能结冰,出行请注意安全。";
emoji = "🌨️";
} else {
alertType = "天气异常";
alertMessage = "当前天气条件异常,请关注最新天气预报。";
emoji = "⚠️";
}
return [{
json: {
// 提醒信息
alert: {
type: alertType,
message: alertMessage,
emoji: emoji,
severity: "high"
},
// 天气数据
weather: {
temperature: data.keyMetrics.temperature,
condition: data.keyMetrics.condition,
feelsLike: data.keyMetrics.feelsLike,
humidity: data.keyMetrics.humidity
},
// 原始数据保留
originalData: data
}
}];
正常天气代码:
// 正常天气通知生成器
const data = $input.first().json;
return [{
json: {
// 通知信息
notification: {
type: "日常天气",
message: "今天天气适宜,是出门活动的好日子!",
emoji: "😊",
severity: "low"
},
// 天气数据
weather: {
temperature: data.keyMetrics.temperature,
condition: data.keyMetrics.condition,
feelsLike: data.keyMetrics.feelsLike,
humidity: data.keyMetrics.humidity,
recommendation: "适合户外散步、运动"
},
// 原始数据保留
originalData: data
}
}];
第四阶段:邮件通知
步骤八:获取QQ邮箱授权码
● 登录你的QQ邮箱
● 进入设置界面,点击账号与安全


● 开通你的POP3/SMTP服务,就会生成一段你的授权码(其他邮箱操作类似)!
步骤九:配置Email邮件节点发送通知
这里选择 Send email 节点,点击进入进行界面配置:

在Send Email节点中点击"Create New Credential",进行配置:


● User:你的邮箱(例如:123456@qq.com)
● Password:QQ邮箱授权码
● Host:填入“smtp.qq.com”
其他选项保持不变,不要去动它们。
步骤十:配置邮件内容

● From Email:你的QQ邮箱
● To Email:收件人邮箱
● Subject:{{ $json.notification.emoji }} {{ $json.notification.type }} - {{ $json.weather.temperature }}
HTML代码:
<h2>{{ $json.notification.emoji }} {{ $json.notification.type }}</h2>
<p><strong>{{ $json.notification.message }}</strong></p>
<hr>
<h3>📊 详细天气信息</h3>
<ul>
<li><strong>城市:</strong>{{ $json.originalData.location.city }}</li>
<li><strong>温度:</strong>{{ $json.weather.temperature }}</li>
<li><strong>天气状况:</strong>{{ $json.weather.condition }}</li>
<li><strong>体感温度:</strong>{{ $json.weather.feelsLike }}</li>
<li><strong>湿度:</strong>{{ $json.weather.humidity }}</li>
<li><strong>建议:</strong>{{ $json.weather.recommendation }}</li>
</ul>
<p><em>发送时间:{{ $now.format('YYYY-MM-DD HH:mm:ss') }}</em></p>
以上,整个获取天气的工作流就完成了,我们来测试一下:

点击工作流下方的“Execute workflow”,看是否能收到邮件!

已经受到邮件了,整个天气工作流就这样搭建完成了,当然,你还可以设置每天在固定时间,比如早上7点给你发送当天城市天气,赶快去实操吧。


