先得搞清楚一件事:你需要的不是一个只能查天气的机器人,也不是一个只能查快递的机器人,而是一个能同时处理这两类问题、甚至还能把天气和物流联系起来给出建议的智能体。换句话说,让它能回答“上海今天热不热”,也能接住“我的快递到哪了”,并且当用户接着问“那快递会受影响吗”时,它能基于天气数据给出一个合理的判断。
所以,第一步,进入Coze平台,直接创建一个新Bot。名称就叫“出行物流小管家”,描述写“查天气、跟快递,一句话全搞定”。头像建议选带云朵和货车图标的组合款——用户第一眼看到这个图标,就会直觉地认为这个东西和出行、物流有关,愿意多聊两句。
进入Bot编辑页后,先关掉默认打开的「知识库」开关。为什么?因为这次的核心能力全部来自外部API接口调用,而不是让它去文档里翻答案。同时,把「多轮对话记忆」设为开启。这步很重要,否则用户问完“上海今天热不热”,紧接着说“那快递呢”,Bot会一脸懵,完全忘记刚才聊的是哪个城市。

接入和风天气API:自定义HTTP工具
在左侧菜单点「工具」→「添加工具」→「自定义工具」。工具名称填“实时天气查询”,描述写“调用和风天气v7接口,返回温度、天气状况、风速、湿度四字段”。
这里有个关键点:URL必须用https开头,并且包含{location}和{key}两个占位符。举个栗子,https://devapi.qweather.com/v7/weather/now?location={location}&key={key} 就是标准格式。
参数配置里,只需要加两项:
- location:勾选“用户可输入”,变量名填city。这样用户说“北京今天多少度”,Bot会把“北京”作为city值传进去。
- key:不勾选“用户可输入”,值填你从 https://dev.qweather.com 申请到的32位API Key。别漏掉这项——漏了的话,Bot每次调用都会返回401错误,但错误信息藏在日志里,前端用户只会看到一句“我暂时无法回答”。
响应处理中,状态码填200,JSONPath依次映射:
$.now.textDay(天气状况)
$.now.temp(温度)
$.now.windScale(风力等级)
$.now.humidity(湿度)
四个字段全部映射为Bot可用变量。
接入快递100物流API:Webhook中转
快递100的接口有个特殊要求:每次请求都需携带sign签名,且签名需用当前时间戳参与计算。扣子原生的HTTP工具无法动态生成签名,所以必须走Webhook。
方法一:用现成的云函数模板(推荐)
访问 https://github.com/coze-plugins/kuaidi100-webhook ,点击“Deploy to Cloudflare Workers”,填入你的快递100企业ID、API Key和Webhook Secret,5分钟就能自动生成一个HTTPS地址。这是最省事的方式。
方法二:本地调试用Flask快速搭建
新建一个main.py,粘贴以下代码:
from flask import Flask, request, jsonify
import hashlib, time, json
app = Flask(__name__)
@app.route('/track', methods=['POST'])
def track():
data = request.json
num = data.get('number')
key = 'YOUR_KUAI100_KEY'
time_str = str(int(time.time()))
sign_str = f'key{key}number{num}time{time_str}'
sign = hashlib.md5(sign_str.encode()).hexdigest().upper()
# 此处调用快递100真实接口并返回json结果
return jsonify({'status': '200', 'data': [{'time': '2026-06-05 14:22:00', 'ftime': '2026-06-05 14:22:00', 'context': '快件已由【北京朝阳区】发出'}]})
在扣子「自定义工具」中选「Webhook」类型,URL填你部署好的地址(如 https://yourdomain.workers.dev/track)。测试时用Postman发一个{"number":"SF123456789CN"},确认返回结果中含context字段才算打通。
设计联动工作流:天气影响物流判断
这步才是灵魂所在。怎么把天气和物流串联起来?
第一步:添加「条件分支」节点,判断用户提问中是否包含“快递”“物流”“单号”中的任一关键词。
第二步:如果命中(用户问的是快递),执行「快递100查询」工具,提取返回结果中的最新物流节点时间(ftime)和描述(context)。
第三步:如果没命中(用户问的是天气),则执行「实时天气查询」工具,获取当前城市的温度(temp)和天气状况(textDay)。
第四步:插入「代码节点」,用Python做一点简单的联动逻辑:
if int(temp) > 35 and '晴' in textDay:
output = f"⚠️高温预警:{temp}℃,建议避开午后派件;{context}"
elif '雨' in textDay or '雪' in textDay:
output = f"?️雨雪天气:{textDay},配送可能延迟;{context}"
else:
output = f"✅天气正常:{textDay} {temp}℃;{context}"
最后把output作为Bot的回复内容输出。这样一来,用户不仅能得到物流信息,还能听到基于天气的贴心提示——比如高温天建议避开中午派件,或者雨雪天提醒配送可能延迟。这才是联动查询的意义所在。
