Skip to main content

13 posts tagged with "工具开发"

View All Tags

车云:通过群机器人「罗伯特」添加白名单 / 切换环境

· 3 min read
Bowen Zhang
本文作者

通过飞书群聊 @机器人「罗伯特」,发送线上/线下白名单添加切换/查询车辆云端环境等指令。 使用 lark-cli 以用户身份发送,罗伯特才会响应。

环境准备

前置:必须先加入「罗伯特」所在飞书群

使用本 skill 前,必须先进张博文邀请的飞书群,否则无法向群里 @机器人「罗伯特」发消息。

张博文 邀请你加入飞书群,快点击 https://applink.feishu.cn/client/chat/chatter/add_by_link?link_token=f61m352d-9482-44f8-9380-70c632fb8b66 加入吧!

  • 若发送时提示无权限 / 找不到群聊(尚未进群),请先通过上方邀请链接加入飞书群,加入成功后再重试;
  • 若不确定是否已进群,可在飞书客户端搜索群名确认。

本地如果没有 lark-cli,先按文档安装:

lark-cli 安装指南

安装后在终端执行 lark-cli --version 确认可用。首次使用或 token 过期时,先执行 lark-cli auth login 重新授权。

命令一览

# 添加白名单(默认线上 + 线下都发送,间隔 1.5s)
python scripts/send.py whitelist <VIN>

# 只添加线上白名单
python scripts/send.py whitelist <VIN> --type online

# 只添加线下白名单
python scripts/send.py whitelist <VIN> --type offline

# 切换车辆云端环境(prod -> testtwo)
python scripts/send.py switch-env <VIN> prod testtwo

# 切换车辆云端环境(testtwo -> prod)
python scripts/send.py switch-env <VIN> testtwo prod

# 查询车辆云端环境
python scripts/send.py query-env <VIN>

# 不真正发送,只打印将生成的命令(用于核对)
python scripts/send.py whitelist <VIN> --dry-run

底层本质

以上命令最终执行的是 lark-cli 发送一条群消息,等价于:

lark-cli im +messages-send --as user --chat-id oc_826d073ba8c9bf029ad38bef60253e9c \
--text '<at user_id="ou_f18b74520bac526a0242f42b615153be">罗伯特</at> 添加线上X01白名单 <VIN>'
部分说明
--as user以当前登录的用户身份发送(必须加,否则以机器人身份发送,罗伯特不会响应)
--chat-id oc_826d073ba8c9bf029ad38bef60253e9c目标群聊 ID(罗伯特所在的群)
<at user_id="ou_f18b74520bac526a0242f42b615153be">罗伯特</at>在群里 @罗伯特
消息内容添加线上/线下X01白名单 + 空格 + VIN;切换车辆云端环境 <VIN> <当前> <目标>查询车辆云端环境 <VIN>

执行步骤(供 Claude 使用)

1. 确认参数

先问用户以下信息,缺什么问什么:

  • 操作类型:添加白名单 / 切换环境 / 查询环境
  • VIN:目标车辆 VIN(必填)
  • 添加白名单需确认是线上、线下还是都要(默认两条都发)
  • 切换环境需确认当前环境 → 目标环境(prod / testtwo)

2. 检查 lark-cli

lark-cli --version

如果未安装,引导用户按上面文档安装;如果报 token/auth 相关错误,先 lark-cli auth login

3. 发送指令

# 白名单(默认线上+线下)
python scripts/send.py whitelist <VIN>

# 切换环境
python scripts/send.py switch-env <VIN> <当前环境> <目标环境>

# 查询环境
python scripts/send.py query-env <VIN>

不确定时先加 --dry-run 核对要发送的内容,确认无误后再去掉发送。

4. 向用户报告结果

  • 发送成功:告知已发送的操作与 VIN,白名单说明线上/线下均已添加,切换/查询说明请求已投递。
  • 发送失败:展示错误信息;token 相关错误引导执行 lark-cli auth login

注意事项(务必遵守)

  • 必须使用 --as user 以用户身份发送,否则罗伯特不会响应机器人消息。
  • 由于飞书平台限制,不能跨 app 给第三方 bot 发 P2P 私聊,必须通过群聊 @ 的方式。
  • 无论什么车型,都按 X01 发送(罗伯特只识别 X01 格式)。
  • 线上和线下白名单都要添加,不能漏掉任何一个;脚本默认分两条发送,间隔 1.5s。
  • VIN 不要加引号
  • 不要在 <at> 标签中的 @ 前加反斜杠:错误写法 <at>...</at> \罗伯特</at> 会导致无法正常 @ 用户。
  • 当前 lark-cli 登录应用为 cli_aaa26a27d8b91bc2,罗伯特属于另一应用 cli_9f7979022e3d500e

故障排查

问题原因解决
发送报「无权限」/「找不到群聊」/「不是群成员」尚未加入目标飞书群提示用户先通过张博文的邀请链接加入飞书群(见「环境准备」),加入后重试
lark-cli 执行失败 / token 相关token 过期 / 未登录执行 lark-cli auth login 重新授权

参数说明

子命令必填参数说明
whitelistVIN添加 X01 白名单;--type online/offline 只发一条
switch-envVIN from to切换云端环境;from 当前环境,to 目标环境
query-envVIN查询车辆云端环境
通用---dry-run 只打印命令不发送

车云车辆云端环境·在线状态查询

· 2 min read
Bowen Zhang
本文作者

📖 不知道怎么获取 x-chj-gwtoken?看这里! 👉 飞书文档 - 获取 x-chj-gwtoken 操作指南(含截图步骤)

查询车辆在云端(testtwo / prod)各域控模块的在线状态策略:先查 testtwo(无需鉴权),若无数据再兜底查 prod(需 x-chj-gwtoken)。

环境信息

环境域名鉴权
testtwo(开发测试)https://ssp-licar-platform-service.testtwo.k8s.chehejia.com无需鉴权
prod(生产)https://ssp-licar-platform-service.prod.k8s.chehejia.com需要 x-chj-gwtoken

域名可通过环境变量覆盖(默认使用上表中的值):

  • VEHICLE_QUERY_TESTTWO_URL:testtwo 环境域名
  • VEHICLE_QUERY_PROD_URL:prod 环境域名

接口说明

GET /api/icn-veh-domains-all?vin={VIN}

返回车辆的 Domain 域控环境配置信息,每个域控模块(5G、fsd-a、hu-f、xcu 等)包含:

  • isConnected:连接状态
  • ip:连接 IP
  • env:所在环境
  • cell:cell
  • latest:最近在线时间(毫秒时间戳)
  • leaveTime:离线时间(如有)

车辆无云端数据时,接口返回 {}(空对象)。

快速开始

# 安装依赖
pip install -r requirements.txt

# 查询(自动:先查 testtwo,无数据再查 prod)
python scripts/query.py <VIN>

# 指定 token 查询 prod(也可在提示时粘贴,会保存供下次使用)
python scripts/query.py <VIN> --token "your-x-chj-gwtoken"

# 只查 testtwo,不兜底查 prod
python scripts/query.py <VIN> --no-fallback

获取 x-chj-gwtoken

不知道怎么获取 x-chj-gwtoken?查看飞书文档 👉 获取 x-chj-gwtoken 操作指南(含截图)

x-chj-gwtoken 有过期时间,如果 prod 查询报 401/403,重新获取一次即可。

执行步骤(供 Claude 使用)

1. 确认参数

先问用户以下信息,缺什么问什么:

  • VIN:要查询的车辆 VIN(必填)

如果用户只给了 VIN,直接进入下一步;token 仅在 testtwo 无数据、需要兜底查 prod 时才需要。

2. 检查 Python 环境

python --version

确认 Python 3.10+ 可用。

3. 安装依赖

pip install -r requirements.txt

4. 运行查询脚本

python scripts/query.py <VIN>
  • 若 testtwo 查到数据:直接展示各域控模块状态,结束。
  • 若 testtwo 无数据:脚本会提示输入 x-chj-gwtoken(或可提前用 --token 传入),再查询 prod。

5. 向用户报告结果

  • 查到数据:列出各域控模块的连接状态、IP、环境、最近在线时间。
  • 未查到:说明 testtwo、prod 均无该车辆的 Domain 数据,可能是车辆未接入云端或 VIN 有误。

参数说明

参数必填说明
VIN目标车辆 VIN(位置参数,17 位)
--tokenx-chj-gwtoken,不传则 testtwo 无数据时交互式输入
--no-fallback只查 testtwo,testtwo 无数据时不查 prod

故障排查

问题原因解决
401 Unauthorizedx-chj-gwtoken 过期重新获取 x-chj-gwtoken
vin 码格式异常VIN 不是 17 位确认 VIN 是否正确
testtwo 与 prod 均无数据车辆未接入云端或 VIN 有误确认 VIN,或到 licar 平台确认车辆状态

在车云平台干测试,这两件"顺手活"最磨人——现在我让一句话把它接走了

· 4 min read
Bowen Zhang
本文作者

一句话摘要: 给 testtwo 测试环境加一辆车、排查某辆车今天有没有连上云端——这两件在车云平台上高频又繁琐的"手工活",被我做成了两个 Claude Code Skill。现在只要跟 Claude 说一句人话,它自己跑去 prod 把车搬过来建好、自己去翻各域控的在线状态。本文是实战记录,也顺带把这两个 Skill 安利给同样在干这件事的同事。


你是否也会被这两件事卡住?

  • 测试环境缺一辆车,得从 prod(licar)把它的基础信息、拓扑、HU 配置字、设备、展示信息一个个查出来、再一个个建回去,一不留神漏一项,等到联调才发现。
  • 有人问"这辆车怎么不在线上?"你第一反应是"它在哪个环境?域控连上没?"——然后得去好几个平台翻接口,把 5G、HU、座舱这些模块挨个对状态。
  • 这些活有规则、重复、纯属"会,但很浪费时间",还特别容易因为手抖出错。

这两个 Skill 就是这么长出来的:把有规则但容易出错的车云操作,变成一句话就能触发的能力。


一、两个 Skill 各管什么

Skill一句话典型场景
cheyun-vehicle-sync-prod-to-testtwo从 prod(licar)把车一键迁移到 testtwo 测试环境测试环境加车、环境间数据同步、测试用车准备
cheyun-vehicle-cloud-online-status查车辆在云端的各域控模块在线状态排查"车不在线"、确认车辆在哪个环境、域控是否掉线

两个都发布于我们内部的 AI Market,质量评级 A,均已通过安全认证,创建者:张博文。

按场景触发一句话,例如: 「把车 XX 同步到 testtwo」 / 「查一下这辆车在线吗」


二、场景拆解:从"半小时手工活"到"一句话"

场景 A:给 testtwo 测试环境加车

以前:先拿 VIN 去 prod 查车辆基础信息(车型系列、型号、用途)→ 再查配置字 → 再查设备(SN、ICCID)→ 然后到 testtwo 依次建基础信息、同步拓扑、创建 HU 配置字、绑定设备、更新展示信息。中间任何一个接口断了、字段记岔了,就得从头对。

现在python scripts/sync.py <VIN>,或者在 Claude/LiClaw 里说一句"把这两辆车同步到 testtwo 测试环境"。Skill 自己完成 8 步全流程:基础信息 → 拓扑 → HU 功能配置字 → 设备绑定 → 展示信息更新 → 验证结果,最后给你一份迁移摘要。

场景 B:查某辆车今天在不在线上

以前:问"车在哪个环境"——测试环境和生产环境是两套平台,得先猜一个去翻,找不到再换另一个。确认了环境还要挨个看 5G 模块、HU、ADAS 这些域控到底连没连上、有没有掉线时间。

现在python scripts/query.py <VIN>,或者直接问"查下这几辆车的在线状态"。Skill 的策略是 先查 testtwo(免鉴权)→ 没有再兜底查 prod,一次返回每个域控模块(5G、fsd-a、hu-f、xcu 等)的连接状态、IP、所在环境、最近在线时间,一眼定位问题出在哪个域控、哪个环境。


三、它们是怎么干活的

两个 Skill 本质是轻量 Python 脚本 + Claude 编排,核心都是一条原则:优先走接口,能免鉴权就免鉴权。

  • sync(prod → testtwo):只有 prod 读取需要 x-chj-gwtokentesttwo 写入侧根本不需要鉴权。流程是"先查原车 → 再逐项还原创建",最终落脚在纯接口操作,不依赖浏览器点击。
  • online-status(在线状态):默认 GET /api/icn-veh-domains-all?vin={VIN},先查免鉴权的 testtwo,接口返回空({})才降级去 prod,避免为了看个状态还要先找 token。想只查测试环境、不落生产,加一个 --no-fallback 即可。

设计取舍:免鉴权优先。日常 80% 的排查其实在 testtwo 就能拿到答案;只有确需生产数据时才要求 token,且 token 由你本地提供、不写入任何仓库。


四、怎么装上,怎么用起来

安装(三步)

  1. 打开 AI Market 里的 Skill 详情页;
  2. 点右上角 复制安装命令
  3. 通过飞书发给 OpenClaw / ClaudeCode 机器人,等它装完即可。

也可以直接在详情页 一键安装进 LiClaw,或 下载 Skill 本地放入 ~/.claude/skills

环境要求:Python 3.10+,pip install requests 一个依赖,其余零外部服务。

使用(说人话就行)

需求可以这么说
测试环境加车 / 环境间搬数据"迁移车辆"、"把车从 prod 同步到 testtwo"、"测试环境加车"
排查在线状态 / 定位环境"查询车辆在线状态"、"查车在哪个环境"、"查下这辆车的域控在线情况"

五、提示与避坑

  • x-chj-gwtoken 有过期时间:迁移过程中报 401/403,多半是它到期了,重新获取一份即可(获取方式见 Skill 文档页的飞书指引)。
  • 先测 testtwo 再谈 prod:Online-status 默认先查 testtwo,能省掉大部门鉴权和找 token 的流程。
  • 验证要闭环:sync 每步都做结果确认,最后回读一把,确认车辆在 testtwo 真的"建起来了"而不是接口"假装成功"。
  • 它是工具不是魔法:Skill 负责按规则把活干完,但"这台车该不该上测试环境""这个域控掉线是不是符合预期"仍然要人拍板——AI 省掉的是搬砖,不是判断。

六、下一步还能怎么演进

  • 批量:sync 现在是单 VIN,改成读一个 VIN 列表文件、批量迁移 + 汇总报告;
  • 看板化:online-status 顺手产出一张"哪些车在线/离线"的小结表,适合每次例会前刷一遍;
  • 权限收敛:token 支持从环境变量读取,集中管理,避免散落。

结语

做这两个 Skill 的最大体会是:把有规则、重复、容易错的车云操作交给 Claude,人只留判断。 环境加车、在线排查这类活,不该每天靠人肉去磨。

如果你也常跟 testtwo / prod / 车辆数据打交道,欢迎装上试试:

  • 🚗 车辆迁移(prod → testtwo):https://ai-market.chehejia.com/?page=skills&skill=8hqeaasmwadzjadjk5ti
  • 📡 云端在线状态查询:https://ai-market.chehejia.com/?page=skills&skill=vlddgr6bn7iih5x6uz7d

有新的车云场景想工具化,或者用起来有报错,欢迎在评论区或话题群里聊聊。