Wingbits AI 新手快速上手指南
更新时间:2026-05-31
适合读者:想快速体验 Wingbits AI、调用 Wingbits Customer API、并把实时航班数据接入业务系统的开发者。
说明:截至本文整理时,Wingbits 公开开发者文档主要提供 Customer API,用于读取实时/历史航班数据;Wingbits AI 的自然语言 Agent 能力主要通过网页端使用。本文会把“AI Agent 使用”和“API 程序化调用”分开讲,避免把网页端能力误写成已公开的 Agent API。
一、Wingbits AI 核心功能与应用场景解析
Wingbits AI 的定位是“用自然语言监控天空”。它不是传统意义上的航班查询网站,而是把实时航空数据、地理区域监控、自动化告警和 AI Agent 结合起来,让用户用一句话描述监控目标,再让 Agent 持续运行。
从官方页面可以看到,Wingbits AI 的核心能力可以拆成四类:
实时空域问答
用户可以直接询问某个区域、某架飞机、某类机队当前的飞行状态。例如:查询某机场附近的航班、查看某个 ICAO 地址对应飞机的实时位置、了解某片区域内是否存在异常活动。自动化 Agent 监控
用户可以创建持续运行的 Agent,让它在后台按设定频率检查空域数据,并在满足条件时发送提醒。典型场景包括:VIP 飞机活动提醒、某地区军机/公务机监控、机场延误与备降日报、GPS 干扰事件监控等。告警与报告推送
Wingbits AI 支持将告警或分析结果推送到 Slack、Teams、邮箱等协作工具,适合媒体、机场运营、物流、航空情报、OSINT 调查等团队使用。Customer API 数据接入
对开发者来说,最重要的是 Wingbits Customer API。官方文档显示,该 API 基于 REST,只读访问,支持读取航班位置、航班详情、航迹路径、飞机详情以及 GPS 干扰相关数据。基础地址为:
https://customer-api.wingbits.com/二、环境依赖检查与账号注册流程
如果只是体验 Wingbits AI 的网页端 Agent,准备一个浏览器和邮箱账号即可。如果要写代码调用 API,建议准备如下环境:
python--versionpip--version推荐环境:
| 类型 | 建议版本或工具 |
|---|---|
| Python | 3.10+ |
| HTTP 调试 | curl、Apifox、Postman 任选其一 |
| Python 依赖 | requests、python-dotenv、pandas、folium |
| 可视化 | folium / plotly / kepler.gl |
| 运行环境 | 本机、云服务器、定时任务、Docker 均可 |
安装依赖:
pipinstallrequests python-dotenv pandas folium账号注册流程建议按这个顺序走:
- 打开 Wingbits AI 官网:
https://www.wingbits.ai/ - 点击
Set up your free agent或Get started。 - 进入
https://app.wingbits.ai/后完成注册或登录。 - 如果要调用 API,进入 Wingbits 账号后台或 API Dashboard,找到 API Key 管理入口。
- 如果后台没有 API Key 入口,通常说明当前账号套餐或权限尚未开通 Customer API,需要检查定价页或联系官方支持。
三、API 密钥获取与安全配置方法
Wingbits Customer API 使用 API Key 鉴权。官方文档说明,API Key 可以从 Wingbits 账号 Dashboard 获取,请求时需要把 Key 放进请求头或请求参数中。开发时更推荐放在请求头里,官方 OpenAPI 文档中的安全方案使用的是:
x-api-key: YOUR_API_KEY不要把 API Key 写死在代码里,也不要提交到 Git 仓库。推荐使用环境变量或.env文件。
.env示例:
WINGBITS_API_KEY=your_api_key_here WINGBITS_BASE_URL=https://customer-api.wingbits.comPython 读取配置:
fromdotenvimportload_dotenvimportos load_dotenv()API_KEY=os.getenv("WINGBITS_API_KEY")BASE_URL=os.getenv("WINGBITS_BASE_URL","https://customer-api.wingbits.com")ifnotAPI_KEY:raiseRuntimeError("请先配置 WINGBITS_API_KEY")安全建议:
- 只在服务端使用 API Key,不要放在前端 JavaScript、移动端包体或公开配置文件中。
- 日志里只打印 Key 的前后几位,例如
wb_****abcd,不要打印完整 Key。 - 团队协作时按环境区分 Key,例如
dev、staging、prod。 - 如果怀疑泄露,立即在 Dashboard 中删除旧 Key 并创建新 Key。
- 生产环境优先使用云厂商 Secret Manager、Kubernetes Secret、GitHub Actions Secrets 等托管方案。
四、首个 AI 调用请求的代码实现
这里需要先说清楚一个边界:目前公开文档中可直接编程调用的是 Wingbits Customer API,它提供实时航班和 GPS 相关数据;Wingbits AI 的自然语言 Agent 主要在网页端创建和运行。因此本文的“首个 AI 调用请求”采用开发者最容易落地的方式:先通过 API 拉取实时航班数据,再把这类数据接入自己的 AI 分析、告警或报表流程。
先检查服务是否可用:
curlhttps://customer-api.wingbits.com/health如果服务正常,会返回类似status、timestamp、version、uptime等字段。
接下来查询 JFK 机场附近 30 海里范围内的航班:
curl-G"https://customer-api.wingbits.com/v1/flights"\-H"x-api-key: YOUR_API_KEY"\--data-urlencode"by=radius"\--data-urlencode"la=40.6413"\--data-urlencode"lo=-73.7781"\--data-urlencode"rad=30"\--data-urlencode"unit=nm"Python 版本:
importosimportrequestsfromdotenvimportload_dotenv load_dotenv()BASE_URL=os.getenv("WINGBITS_BASE_URL","https://customer-api.wingbits.com")API_KEY=os.getenv("WINGBITS_API_KEY")headers={"x-api-key":API_KEY,}params={"by":"radius","la":40.6413,"lo":-73.7781,"rad":30,"unit":"nm",}resp=requests.get(f"{BASE_URL}/v1/flights",headers=headers,params=params,timeout=(3.05,15),)resp.raise_for_status()flights=resp.json()print(f"当前区域航班数量:{len(flights)}")foriteminflights[:5]:print(item.get("h"),item.get("f"),item.get("la"),item.get("lo"),item.get("ab"))如果你希望做“自然语言 + 数据”的 AI 应用,可以把这一步作为数据层:先由 Wingbits API 获取实时航空数据,再交给自己的 LLM 做摘要、异常解释、日报生成或告警文本生成。
五、典型业务场景下的参数调优技巧
Wingbits Customer API 的/v1/flights支持按地理范围查询。常见参数如下:
| 参数 | 说明 | 调优建议 |
|---|---|---|
by | 查询方式,box或radius | 机场周边适合radius,城市/航路区域适合box |
la | 中心点纬度 | 范围:-90 到 90 |
lo | 中心点经度 | 范围:-180 到 180 |
rad | 半径 | by=radius时使用,单位由unit决定 |
w/h | 宽度和高度 | by=box时使用 |
unit | km或nm | 航空场景更常用nm |
min_ab/max_ab | 气压高度过滤,单位英尺 | 低空监控可设置max_ab,巡航层分析可设置较高区间 |
categories | 飞机类别代码,逗号分隔 | 用于过滤不同类型的航空器 |
几个典型场景:
机场运行监控
以机场坐标为圆心,半径设置为 20 到 50 海里,关注进近、离场和盘旋等待情况。可以用max_ab过滤低空阶段。
params={"by":"radius","la":40.6413,"lo":-73.7781,"rad":30,"unit":"nm","max_ab":12000,}区域空域态势
对一个城市或敏感区域做矩形框查询,适合做持续看板。
params={"by":"box","la":34.0522,"lo":-118.2437,"w":80,"h":60,"unit":"nm",}多区域并行查询
官方文档提供POST /v1/flights,可以一次查询多个地理区域,并用alias区分返回结果。适合同时监控多个机场、多个城市或多个业务区域。
payload=[{"alias":"jfk","by":"radius","la":40.6413,"lo":-73.7781,"rad":30,"unit":"nm",},{"alias":"lax","by":"radius","la":33.9416,"lo":-118.4085,"rad":30,"unit":"nm",},]resp=requests.post(f"{BASE_URL}/v1/flights",headers={**headers,"Content-Type":"application/json"},json=payload,timeout=(3.05,20),)resp.raise_for_status()data=resp.json()GPS 干扰监控
GET /v1/gps/jam用于获取指定边界框内的 GPS accuracy hexes。适合做区域异常热力图、日报或告警。
params={"min_lat":24.0,"max_lat":31.0,"min_lng":46.0,"max_lng":57.0,"date":"2026-05-31",}resp=requests.get(f"{BASE_URL}/v1/gps/jam",headers=headers,params=params,timeout=(3.05,20),)resp.raise_for_status()gps_data=resp.json()六、返回数据解析与结果可视化展示
航班列表接口返回的是数组。常见字段可以这样理解:
| 字段 | 含义 |
|---|---|
h | ICAO 24-bit aircraft address |
la/lo | 纬度、经度 |
f | 航班号或 callsign |
c | 航空器类别 |
ab | 气压高度 |
ag | GPS 高度 |
gs | 地速 |
sq | 应答机 squawk code |
t | 数据类型,例如 ADSB、ADSC、MLAT |
ra | 数据接收时间 |
og | 是否在地面 |
最小化解析函数:
defnormalize_flight(item:dict)->dict:return{"icao24":item.get("h"),"callsign":item.get("f"),"lat":item.get("la"),"lon":item.get("lo"),"altitude_barometric":item.get("ab"),"altitude_gps":item.get("ag"),"ground_speed":item.get("gs"),"squawk":item.get("sq"),"source_type":item.get("t"),"received_at":item.get("ra"),"on_ground":item.get("og"),}用 folium 生成一张本地地图:
importfolium center=[40.6413,-73.7781]flight_map=folium.Map(location=center,zoom_start=8,tiles="OpenStreetMap")foriteminflights:lat=item.get("la")lon=item.get("lo")iflatisNoneorlonisNone:continuecallsign=item.get("f")or"UNKNOWN"icao24=item.get("h")or"-"altitude=item.get("ab")or"-"speed=item.get("gs")or"-"popup=f""" <b>{callsign}</b><br> ICAO24:{icao24}<br> Altitude:{altitude}<br> Ground Speed:{speed}"""folium.CircleMarker(location=[lat,lon],radius=4,popup=popup,color="#0f766e",fill=True,fill_opacity=0.8,).add_to(flight_map)flight_map.save("wingbits_flights_map.html")print("已生成 wingbits_flights_map.html")生成地图后,用浏览器打开wingbits_flights_map.html,即可看到航班点位分布。
七、常见连接超时与鉴权失败排查
建议先从/health开始排查:
curlhttps://customer-api.wingbits.com/health如果/health正常,而业务接口失败,再看状态码。
| 状态码 | 常见原因 | 处理方式 |
|---|---|---|
400 | 参数不合法,例如经纬度超范围、缺少rad、w、h等必填参数 | 对照接口文档检查参数 |
401 | API Key 缺失、错误或已失效 | 检查x-api-key请求头,必要时重新生成 Key |
402 | 当前套餐或余额不支持该请求 | 检查订阅计划、额度或账单状态 |
404 | 航班 ID、ICAO24 或路径不存在 | 确认查询对象是否仍在数据范围内 |
429 | 请求过于频繁或超过配额 | 降低并发,增加退避重试 |
500 | 服务端异常 | 记录请求参数和时间,稍后重试或联系支持 |
Python 中建议显式设置连接超时和读取超时:
resp=requests.get(f"{BASE_URL}/v1/flights",headers=headers,params=params,timeout=(3.05,15),)排查顺序:
- 确认 URL 是
https://customer-api.wingbits.com/,不要使用http。 - 确认请求头名称是
x-api-key。 - 确认本机或服务器网络可以访问外网。
- 确认代理、防火墙、公司网关没有拦截 HTTPS 请求。
- 将完整 URL、状态码、响应 body、请求耗时记录到日志,但不要记录完整 API Key。
八、并发调用限制与配额管理策略
官方文档说明,每个请求限制取决于当前订阅计划。Wingbits 官方博客也提到,自助 API Dashboard 支持使用量监控、套餐升级和免费额度测试。实际开发时,不要把 API 当成无限制数据流使用,应当主动做配额管理。
推荐策略:
请求分层
对实时看板使用短周期刷新,对日报、周报、历史分析使用较低频率任务。本地缓存
对同一地区、同一时间窗口内的重复查询做 10 到 60 秒缓存。机场级态势通常不需要每个用户都打一次 API。退避重试
遇到429后不要立即重试,使用指数退避。
importtimeimportrequestsdefrequest_with_backoff(url,*,headers,params=None,max_retries=3):forattemptinrange(max_retries):resp=requests.get(url,headers=headers,params=params,timeout=(3.05,15))ifresp.status_code!=429:resp.raise_for_status()returnresp.json()sleep_seconds=2**attempt time.sleep(sleep_seconds)raiseRuntimeError("请求超过重试次数,可能已经触发限流")按业务拆额度
生产系统里至少区分三类调用:用户即时查询、后台定时任务、告警任务。不要让低优先级任务挤占告警额度。监控用量
每次请求记录接口名、状态码、耗时、返回数量和业务方。每天聚合一次,及时发现异常增长。
九、本地调试工具与日志监控方案
本地调试可以使用三类工具:
| 工具 | 适合场景 |
|---|---|
| curl | 快速验证连通性、鉴权和参数 |
| Apifox / Postman | 保存接口集合、团队共享调试参数 |
| Python 脚本 | 接入业务逻辑、可视化和自动化任务 |
推荐把日志统一成结构化格式:
importloggingimporttime logging.basicConfig(level=logging.INFO,format="%(asctime)s %(levelname)s %(message)s",)deffetch_flights(params):started=time.time()url=f"{BASE_URL}/v1/flights"try:resp=requests.get(url,headers=headers,params=params,timeout=(3.05,15))elapsed_ms=int((time.time()-started)*1000)logging.info("wingbits_request endpoint=%s status=%s elapsed_ms=%s","/v1/flights",resp.status_code,elapsed_ms,)resp.raise_for_status()returnresp.json()exceptrequests.Timeout:logging.exception("wingbits_timeout endpoint=/v1/flights")raiseexceptrequests.HTTPError:logging.exception("wingbits_http_error body=%s",resp.text[:500])raise日志里建议保留:
endpointstatus_codeelapsed_msparams的脱敏版本- 返回数据条数
- 业务调用方
- 错误响应前 500 个字符
不建议记录:
- 完整 API Key
- 用户隐私数据
- 大量原始响应 body
- 可反推出敏感监控目标的完整任务配置
十、从 Demo 到生产环境的部署要点
Demo 能跑通,不代表生产环境就稳定。上线前至少补齐以下能力。
1. 服务端代理
如果你的产品有 Web 前端,不要让浏览器直接调用 Wingbits API。正确做法是:
Browser -> Your Backend -> Wingbits Customer API这样可以隐藏 API Key,也方便统一做限流、缓存、日志和权限控制。
2. 配置与密钥管理
生产环境使用 Secret Manager 或 CI/CD Secret 注入,不要把.env文件上传到服务器镜像或代码仓库。
3. 错误处理
对400、401、402、429做明确提示。尤其是402和429,它们通常和套餐、配额、调用频率有关,应当进入监控系统。
4. 缓存与降级
实时数据业务很容易被刷新按钮打爆。建议按接口和区域缓存:
cache_key = endpoint + sorted(params) ttl = 10s ~ 60s当上游 API 临时不可用时,可以返回最近一次成功结果,并在页面上标记数据更新时间。
5. 任务调度
后台 Agent 或定时任务要避免所有任务同时触发。可以按业务优先级错峰执行,例如每分钟第 0 秒跑机场告警,第 15 秒跑日报数据,第 30 秒跑可视化刷新。
6. 可观测性
生产环境至少监控以下指标:
- API 成功率
- P95 / P99 响应耗时
401、402、429数量- 每日请求总量
- 每个业务模块请求量
- 告警任务漏检或延迟次数
7. 合规与数据使用边界
航空数据可能涉及商业、媒体、OSINT 和安全场景。上线前要明确数据用途、保存周期、访问权限和告警分发范围。对于 VIP、OSINT、敏感区域监控等场景,应当遵守平台条款和当地法律法规。
小结
Wingbits AI 更适合做“空域监控 Agent”和“航空数据自动化告警”,而 Wingbits Customer API 适合开发者把实时航班、飞机详情、航迹和 GPS 干扰数据接入自己的系统。
新手上手时建议先走三步:
- 在网页端创建一个 Wingbits AI Agent,理解自然语言监控流程。
- 用
/health和/v1/flights跑通第一条 API 请求。 - 在本地完成数据解析、地图可视化、日志和限流,再考虑部署到生产环境。
只要把 API Key 管好、请求频率控好、日志和异常处理补齐,从 Demo 走到生产并不复杂。
