Coze HTTP请求节点实战:5分钟搞定天气API对接(含动态参数技巧)
天气预报功能是开发者最常集成的第三方服务之一。无论是出行App、智能家居系统还是企业OA工具,实时天气数据都能显著提升用户体验。本文将手把手教你如何用Coze平台的HTTP请求节点快速对接天气API,并重点解决动态参数传递和JSON响应解析这两个关键问题。
1. 准备工作:选择天气API服务
市面上主流的天气API服务各有特点,以下是几个常见选项的对比:
| 服务商 | 免费额度 | 数据精度 | 响应速度 | 特色功能 |
|---|---|---|---|---|
| 和风天气 | 1000次/天 | 街道级 | <500ms | 空气质量预报 |
| 心知天气 | 500次/天 | 区县级 | <800ms | 多语言支持 |
| OpenWeather | 1000次/天 | 城市级 | <1s | 全球覆盖 |
| 彩云天气 | 100次/天 | 公里级 | <300ms | 分钟级降水预报 |
提示:测试阶段建议使用和风天气,其免费额度充足且文档完善。正式项目可根据精度需求选择彩云天气(高精度)或OpenWeather(国际覆盖)
注册API服务后,你会获得两个关键凭证:
- API调用地址(如
https://api.qweather.com/v7/weather/now) - Key参数(通常作为query参数传递,如
key=你的API_KEY)
2. 基础配置:创建HTTP请求节点
在Coze工作流编辑器中拖入HTTP请求节点,进行如下基础配置:
# 请求示例(和风天气实时天气)
GET https://api.qweather.com/v7/weather/now?key={{API_KEY}}&location={{CITY_CODE}}
关键配置项说明:
- 方法选择:天气查询使用GET方法
- URL构建:
- 基础地址填写API提供商给的端点
- 查询参数通过
?附加,多个参数用&连接
- 动态参数:
{{API_KEY}}:在工作流变量中存储的密钥{{CITY_CODE}}:通过用户输入或系统获取的城市代码
3. 动态参数处理技巧
实际业务中,城市参数往往需要动态获取。以下是三种典型场景的实现方案:
3.1 用户输入城市名
当用户直接输入城市名称时,需要先调用城市查询API获取城市ID:
# 城市查询API响应示例
{
"code": "200",
"location": [
{
"name": "北京",
"id": "101010100",
"lat": "39.90498",
"lon": "116.40528"
}
]
}
配置步骤:
- 第一个HTTP节点调用城市查询API
- 使用JSON解析提取
location[0].id - 将城市ID存入变量
CITY_ID - 第二个HTTP节点使用
{{CITY_ID}}调用天气API
3.2 自动获取定位城市
对于移动端应用,可以通过IP定位获取城市:
// IP定位响应示例
{
"city": "上海市",
"city_id": "101020100",
"ip": "180.158.102.205"
}
处理流程:
- 调用IP定位服务API
- 使用
json.path提取city_id - 直接传递给天气API节点
3.3 多城市批量查询
企业OA系统常需要同时查询多个城市天气:
- 创建城市代码数组变量:
["101010100", "101020100", "101280601"] - 使用循环节点遍历数组
- 每次循环将当前城市代码存入
CURRENT_CITY - HTTP节点URL中使用
location={{CURRENT_CITY}}
4. 响应解析与错误处理
天气API通常返回结构化JSON数据,以和风天气为例:
{
"code": "200",
"now": {
"temp": "28",
"feelsLike": "31",
"text": "晴",
"windDir": "东南风"
}
}
4.1 正确响应处理
在HTTP节点的"输出变量"配置中,可以这样映射字段:
| 原始路径 | 存储变量 | 类型 |
|---|---|---|
code | STATUS_CODE | string |
now.temp | TEMPERATURE | number |
now.text | WEATHER | string |
注意:Coze会自动将JSON响应体解析为
body对象,无需手动处理反序列化
4.2 异常情况处理
完善的错误处理机制应包括:
-
HTTP状态码检查:
- 200:正常处理
- 4xx:客户端错误(如无效API Key)
- 5xx:服务端错误
-
业务状态码检查:
# 和风天气业务代码 if body.code == "200": # 正常流程 elif body.code == "204": # 无该城市数据 else: # 其他错误 -
超时设置:
- 生产环境建议设置5-10秒超时
- 对稳定性要求高的场景可启用1次重试
5. 性能优化实战技巧
5.1 缓存策略
高频调用的天气数据可以加入缓存:
graph LR
A[收到请求] --> B{缓存是否存在}
B -->|是| C[返回缓存数据]
B -->|否| D[调用API]
D --> E[存入缓存]
E --> F[返回数据]
实现方案:
- 使用Coze的变量存储最近请求结果
- 设置TTL(如30分钟)
- 对相同城市请求直接返回缓存
5.2 批量请求优化
当需要获取多个数据点时,优先使用复合API:
# 不推荐:多个独立请求
/weather/now
/weather/24h
/air/now
# 推荐:单个复合请求
/weather/composite?types=now,24h,air
5.3 数据压缩
启用HTTP压缩可减少传输量:
- 在请求头中添加:
Accept-Encoding: gzip, deflate - 确保API服务端支持压缩响应
6. 完整工作流示例
以下是查询当前天气并生成播报文案的完整流程:
-
开始节点:
- 输入参数:
city_name(用户输入)
- 输入参数:
-
HTTP节点1(城市查询):
url = f"https://geoapi.qweather.com/v2/city/lookup?key={API_KEY}&location={city_name}" -
代码节点(解析城市ID):
// 从响应中提取城市ID const cityId = body.location[0].id; -
HTTP节点2(天气查询):
url = f"https://api.qweather.com/v7/weather/now?key={API_KEY}&location={cityId}" -
模板节点(生成播报):
当前{city_name}天气:{body.now.text} 温度:{body.now.temp}℃(体感{body.now.feelsLike}℃) 风向:{body.now.windDir} -
结束节点:返回播报文案
在实际项目中遇到的一个典型问题:当用户输入"海淀区"时,城市查询API返回了多个匹配项。我们通过添加adm参数(指定北京直辖市)解决了歧义问题,确保总能获取到正确的城市ID。这种细节处理往往决定了生产环境的稳定性。
431



被折叠的 条评论
为什么被折叠?



