旺小宝录音查询
CRITICAL —— 跑命令前 MUST 先用 Read tool 读取
../wangxiaobao-shared/SKILL.md(一份共享文档讲清安装 / 登录 / 选项目 / 错误码 / 输出协议等所有 xiaobao-cli 命令通用的前置约定)。
只读探查录音。没有副作用——不写 wiki / 不推游标, 所以用错也没成本,鼓励放心调用。
执行前必读
- 必须有有效 token:先调
xiaobao-cli auth whoami,未登录 / 过期就走auth login --no-waitsplit-flow(见 wangxiaobao-shared) - 必须有激活项目:tenant/project 由 命令内部从
~/.xiaobao/active-project.json读,调用方不需要传任何 tenant/project 参数。如果 命令 返回error: 'NO_ACTIVE_PROJECT', 让用户跑wangxiaobao-switch-projectskill 后再重试 - 绝不要写文件、推游标。即使用户随口说"顺便存一下"也要拦:
那是
wangxiaobao-audio-wiki的事,本 skill 一旦写盘就破坏了"只读"承诺 - LocalDateTime 字段格式:
yyyy-MM-dd HH:mm:ss(空格分隔,不带时区)。 pierre 框架的 Jackson 反序列化只认这个格式;带T或+08:00会被 CLI 容错处理,但传空格形式最稳
快速索引:意图 → 工具
| 用户意图 | 命令 | 关键参数 |
| ---------------------- | -------------------------- | ----------------------------------------- |
| 列某时段所有录音元数据 | xiaobao-cli audio list | --from / --to |
| 列某销售的录音 | xiaobao-cli audio list | + --user-id <uid>(多个销售用 --user-id-list) |
| 反查销售 user-id | xiaobao-cli consultant list | 无参(拿当前用户授权范围内的所有顾问) |
| 看总数 / 估个量 | xiaobao-cli audio list | --page 1 --size 1,只读 total |
| 翻页继续看 | xiaobao-cli audio list | --page 递增 |
| 看某条录音转录预览 | xiaobao-cli audio text | --audio-id(从 list_audio 结果拿) |
命令 参数里没有 tenantId / projectId —— CLI 内部从激活项目状态读。
如果还没激活过项目,跑 wangxiaobao-switch-project skill 先设一次。
核心约束
1. 时间范围:用户没明确说就推断合理窗口
当用户没给具体时间,按用户的话推断一个能覆盖意图的窗口,而不是默认拉 最近 N 天造成超时。常见映射:
| 用户说法 | 解析 | | -------------- | ----------------------------------------------------- | | "今天的录音" | from = 今天 00:00:00, to = now | | "上周二的录音" | from = 上周二 00:00:00, to = 上周三 00:00:00 | | "5 月份的" | from = 2026-05-01 00:00:00, to = 2026-06-01 00:00:00 | | "最近几条" | from = now - 1 day, to = now, size = 10 |
用户明确给时间时直接用,不要二次猜测。
2. 分页:page 从 1 开始
PageParam 默认 --page 1 --size 10,传 page: 0 上游会报错。读 total +
当前 page * size 判断是否还有下一页,需要时翻页;浏览概览时第 1 页通常
够用。--size 上限 500(schema 已限制),预览展示建议 20。
3. 按销售筛选:先反查 user-id 再过滤
不带 --user-id / --user-id-list 就拉所有人的录音。要筛某个销售:
- 用户能直接给 user-id(数字)→ 用
--user-id <id>(单个)或userIdList: [<id1>, <id2>, ...](多个) - 只知道名字 → 调
xiaobao-cli consultant list(无参),拿到当前用户 授权范围内的所有顾问(含--user-name/--user-id),按名字 match 后取--user-id传给xiaobao-cli audio list
已弃用做法:"先 list_audio 不带 filter,再扫 content[].saleName 反查"—— 这种 hack 在录音数据稀疏 / 时间窗短时找不到目标销售。改用
xiaobao-cli consultant list反查,精确且快。
4. 单条文本预览:按需调,不要全量
xiaobao-cli audio text 一次拿一条录音的转录。只在用户挑了具体某条之
后再调,不要 list 完顺手把每条都 get_audio_text 一遍——那是 sync skill
的事。一次会话 1-3 条样本预览足够。
5. 响应外层结构
xiaobao-cli audio list 和 xiaobao-cli audio text 都返回 pierre 框架的
Result<T> 包:
{
"code": "0", // 业务状态码,"0" 是成功
"msg": "success",
"data": { ... } // 真正的 payload
}
list_audio 里 data 又是 PageResult<AudioPageResp>:
{ page, size, total, content[] },所以取元数据数组要写
resp.data.data.content(命令 不展开 envelope,原样返回)。
使用场景示例
场景 1:列今天所有录音
xiaobao-cli audio list --from "2026-05-12 00:00:00" --to "2026-05-12 23:59:59" --page 1 --size 20
渲染给用户(按 startTime desc,audioId 必须显示——后面取文本要用):
共 145 条录音(第 1/8 页)
1. 张三 · 2026-05-12 10:23:11 ~ 10:35:42(12 分钟) · audioId=12345
2. 李四 · 2026-05-12 09:50:00 ~ 10:02:15(12 分钟) · audioId=12344
3. 王五 · 2026-05-12 09:10:00 ~ 09:25:11(15 分钟) · audioId=12343
...
场景 2:估算"上周末打了几个电话"
只关心 total,第 1 页就够:
xiaobao-cli audio list --from "2026-05-10 00:00:00" --to "2026-05-12 00:00:00" --page 1 --size 1
回复:「周末两天共 23 条录音,主要集中在周日下午」。
场景 3:取某条录音的转录预览
用户从场景 1 列表里挑了序号 1(audioId=12345):
xiaobao-cli audio text 12345
渲染:
audioId 12345 · 张三 · 2026-05-12 10:23:11(12 分钟)
说话人占比:销售 62% / 客户 38%
转录:
[10:23:15] 销售:您好张总,我是旺小宝的小张,咱们那个项目...
[10:23:22] 客户:嗯嗯你说
[10:23:25] 销售:周末方便过来看下样板间吗?
...
场景 4:按销售名字筛 —— 用 list-consultants 反查
用户说"张三本周打了几个"——只知道名字:
- 调
xiaobao-cli consultant list(无参)→ 拿到[{ userId, userName, ... }, ...] - 在结果里找
userName === "张三"的--user-id - 调
xiaobao-cli audio list带--user-id <张三的 userId>+ 本周时间窗
# step 1: 反查张三的 user-id
xiaobao-cli consultant list
# step 2: 假设找到张三的 userId = 100
# step 3: 用 --user-id 过滤
xiaobao-cli audio list --from "2026-05-06 00:00:00" --to "2026-05-13 00:00:00" --user-id 100 --page 1 --size 20
如果 list-consultants 里找不到张三——说明当前登录用户没权限看张三 (不在管理范围内 / 不在团队里)。提示用户"当前账号无权访问销售『张三』", 不要硬调 list-audio 假装搜(也会因 dataPermission 拿不到)。
常见错误与排查
code: "400"/msg: "消息转换异常"— fromDate/toDate 格式不对。 必须yyyy-MM-dd HH:mm:ss空格分隔,不带时区。- 401 / token 过期 — 走
auth login --no-wait --forcesplit-flow 重登,重试一次。 total: 0— 时间窗口里确实没数据,或激活的租户/项目错了。 让用户跑wangxiaobao-switch-projectskill 确认或重新激活项目。error: 'NO_ACTIVE_PROJECT'— 还没设过激活项目。让用户跑wangxiaobao-switch-projectskill 后重试本 skill。- 翻页拿不到下一页 — 检查
--page是不是从 1 开始(不是 0),page * size > total时已经到末页。 saleName是空的 — 上游 user info 缺失,可以只用--user-id标识, 跟用户说"该录音的销售信息上游缺失"。- 想"批量转文本看看" — 拦住:批量取文本是
wangxiaobao-audio-wiki的事(带写文件 + 推游标),本 skill 设计上每次会话最多预览 1-3 条。
Scan to join WeChat group