旺小宝客户分页查询
> CRITICAL —— 跑命令前 MUST 先用 Read tool 读取 ../wangxiaobao-shared/SKILL.md(一份共享文档讲清安装 / 登录 / 选项目 / 错误码 / 输出协议等所有 xiaobao-cli 命令通用的前置约定)。
跑 xiaobao-cli customer list 查当前激活项目的客户画像列表。
零副作用,鼓励放心调用。
执行前必读
- 必须有有效 token:先调
xiaobao-cli auth whoami;未登录就走auth login --no-waitsplit-flow(见 wangxiaobao-shared) - 必须有激活项目:命令内部自动读,如果返回
NO_ACTIVE_PROJECT就跑
wangxiaobao-switch-projectskill - 数据权限隔离:后端按"当前用户授权可见的顾问范围"过滤(普通顾问看自己 /
团队长看团队 / 项目管理员看全项目)。当前用户无权访问的顾问名下客户看不到——
这不是 bug - LocalDateTime 格式:
yyyy-MM-dd HH:mm:ss(空格分隔),CLI 自动转 ISO - 不要写文件、出报告
快速索引:意图 → 工具
| 用户意图 | 命令 | 关键参数 |
|---|---|---|
| 列全部客户(最近来访的在前) | xiaobao-cli customer list |
--page / --size |
| 看某顾问名下客户 | xiaobao-cli consultant list → xiaobao-cli customer list |
--user-id <反查的 id> |
| 按客户画像找 | xiaobao-cli customer list |
--portrait 高意向 等 |
| 按客户姓名 / 手机号模糊 | xiaobao-cli customer list |
--customer-name / --customer-phone |
| 按最后来访时间筛 | xiaobao-cli customer list |
--from / --to |
| 估算总数 | xiaobao-cli customer list |
--page 1 --size 1,只读 total |
核心约束
1. 按顾问筛 —— 先反查 user-id,不要硬猜
用户说"张三的客户"——不要直接传 userName: "张三"(虽然支持但是 LIKE 模糊)。
正确做法:
- 调
xiaobao-cli consultant list拿当前授权范围内的顾问列表 - 找
userName === "张三"的--user-id - 调
xiaobao-cli customer list { userId: <张三的 userId> }精确过滤
如果 list-consultants 里找不到张三——说明当前用户没权限看张三名下数据,
告诉用户"当前账号无权访问销售『张三』",不要再硬试。
2. portrait 单关键词,越短越宽
后端在 dynamic_tags JSON 文本上 LIKE '%xxx%'。所以:
--portrait 高意向命中{"高意向客户":"高意向客户"}/{"AI意向判定":"高意向"}等--portrait 价格命中{"抗性点":"价格"}等- 不要传完整 JSON / key=value 形式(不支持,反而匹不到)
3. 时间窗:用户没明确说就推断
| 用户说法 | fromDate / toDate |
|---|---|
| "今天来访" | 今天 00:00:00 / 明天 00:00:00 |
| "本周" | 周一 00:00:00 / 今天 23:59:59 |
| "上周" | 上周一 / 本周一 |
| "5 月份" | 2026-05-01 00:00:00 / 2026-06-01 00:00:00 |
| "近一个月" | 30 天前 / now |
用户明确给时间则按字面用。
4. 分页:page 从 1 开始
PageParam 默认 --page 1 --size 10。传 page: 0 报错。--size 上限 500。
5. 响应外层
xiaobao-cli customer list 返回:
{
"code": "0",
"msg": "success",
"data": {
"page": 1, "size": 10, "total": 47,
"content": [
{
"customerId": "1685535452481236993",
"customerName": "屈哥",
"customerPhone": "173****7325",
"intentLevel": "A",
"aiIntentLevel": "A",
"lastVisitTime": "2023-07-30 14:01:03",
"userId": 270078834689187840,
"userName": "兰鸿建",
"userInfo": { /* 顾问详情 */ },
"dynamicTags": { "高意向客户": "高意向客户", "抗性点": "配套", ... }
}
]
}
}
CLI 又包一层 { status, ok, data } —— 取数据用 resp.data.data.content。
使用场景示例
场景 1:列我能看到的高意向客户
xiaobao-cli customer list --portrait 高意向 --page 1 --size 20
渲染:
共 12 位高意向客户(最近来访在前):
1. 屈哥 · 173****7325 · 顾问兰鸿建 · 最后来访 2023-07-30
2. 曹女士 · 186****1938 · 顾问兰鸿建 · 最后来访 2023-07-30
...
场景 2:陈平名下的客户
# step 1: 反查陈平的 user-id
xiaobao-cli consultant list
# step 2: 假设找到陈平的 userId = 270078836362715136
# step 3: 用 --user-id 过滤
xiaobao-cli customer list --user-id 270078836362715136 --page 1 --size 20
场景 3:5 月来访的客户里抗性是价格的
xiaobao-cli customer list --portrait 价格 --from "2026-05-01 00:00:00" --to "2026-06-01 00:00:00"
场景 4:估算总数
xiaobao-cli customer list --page 1 --size 1
回复:「当前授权范围下共 1247 位客户」。
常见错误与排查
error: 'NO_ACTIVE_PROJECT'— 跑wangxiaobao-switch-projectskill- 401 / token 过期 — 走
auth login --no-wait --forcesplit-flow 重登 total: 0— 时间窗口 / 过滤条件没匹配到,或当前用户授权范围为空
(新人顾问刚入职 / 团队成员被移走等)- 顾问名找不到 — 不在当前用户授权可见范围内;不要硬调 list_customers 试
- 画像匹配不准 — portrait 太长 / 太具体导致 LIKE 不命中;改短关键词;不确定项目有哪些画像字段/标签时先
xiaobao-cli config fields查字段字典(解读 dynamic_tags 的 key 含义)