@puyinkai/xiaobao-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +81 -0
- package/dist/api-Ccj5dLMo.mjs +100 -0
- package/dist/api-client-DwySN6x-.mjs +75 -0
- package/dist/audio-VmDQMq59.mjs +14 -0
- package/dist/auth-ChHvqjCS.mjs +15 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +30 -0
- package/dist/consultant-ABFTL_jx.mjs +11 -0
- package/dist/customer-DtSnQqy_.mjs +11 -0
- package/dist/device-flow-BgsZipYA.mjs +166 -0
- package/dist/focus-BDYuP2vZ.mjs +11 -0
- package/dist/format-BZvv8lYc.mjs +610 -0
- package/dist/headers-D79npewp.mjs +11 -0
- package/dist/list--o5Q_PI8.mjs +80 -0
- package/dist/list-Bkyi95YO.mjs +76 -0
- package/dist/list-CGACp0y-.mjs +76 -0
- package/dist/list-CVKSGNu4.mjs +91 -0
- package/dist/list-CzB9_Jho.mjs +91 -0
- package/dist/list-DW6KAAaC.mjs +92 -0
- package/dist/list-iwd9cH1I.mjs +41 -0
- package/dist/login-BwkrByMm.mjs +91 -0
- package/dist/logout-BJm9pjje.mjs +49 -0
- package/dist/project-Ba05YzJ5.mjs +14 -0
- package/dist/project-store-Bz5kf-EI.mjs +62 -0
- package/dist/qa-D-B9FV9W.mjs +60 -0
- package/dist/resistance-Cf7zsdB3.mjs +11 -0
- package/dist/text-BLH4R3xv.mjs +49 -0
- package/dist/token-store-CHZ_rJQk.mjs +85 -0
- package/dist/use-DV9Ii3Tn.mjs +61 -0
- package/dist/util-DgwkUfV9.mjs +46 -0
- package/dist/visit-Ct3Vea8I.mjs +11 -0
- package/dist/whoami-DwTHvI4B.mjs +51 -0
- package/package.json +36 -0
- package/skills/wangxiaobao-audio-query/SKILL.md +252 -0
- package/skills/wangxiaobao-audio-wiki/SKILL.md +332 -0
- package/skills/wangxiaobao-customer-focus-query/SKILL.md +213 -0
- package/skills/wangxiaobao-customer-query/SKILL.md +214 -0
- package/skills/wangxiaobao-customer-resistance-query/SKILL.md +211 -0
- package/skills/wangxiaobao-quick-qa/SKILL.md +238 -0
- package/skills/wangxiaobao-switch-project/SKILL.md +179 -0
- package/skills/wangxiaobao-visit-query/SKILL.md +249 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wangxiaobao-customer-query
|
|
3
|
+
description: |
|
|
4
|
+
旺小宝客户分页查询 skill:按 **置业顾问 / 客户姓名 / 手机号 / 画像关键词 /
|
|
5
|
+
最后来访时间** 维度分页查当前激活项目里的客户列表。**只读、不写文件、无副作用**。
|
|
6
|
+
对应 `xiaobao_list_customers` tool。排序固定 last_visit_time DESC。
|
|
7
|
+
|
|
8
|
+
**当以下情况时使用此 Skill**:
|
|
9
|
+
(1) 用户问"客户列表"、"我的客户"、"高意向客户"、"近期来访客户"
|
|
10
|
+
(2) 用户问"张三名下的客户"、"陈平这周新增了哪些客户"——先调
|
|
11
|
+
`xiaobao_list_consultants` 反查顾问 user-id,再调本 skill 带 userId 过滤
|
|
12
|
+
(3) 用户按客户画像找——"高意向客户"、"价格敏感客户"、"看四房的客户",用
|
|
13
|
+
`portrait` 关键词
|
|
14
|
+
(4) 用户问"姓张的客户"、"手机号 138 的客户"——客户姓名 / 手机号 LIKE 模糊
|
|
15
|
+
(5) 用户问"5 月份来过的客户"、"上周访客"——`fromDate` / `toDate` 时间窗
|
|
16
|
+
(6) 任何"看客户名单 / 客户画像"的开放式查询,**不写文件 / 不出报告**
|
|
17
|
+
|
|
18
|
+
**不要用本 skill 的场景**:
|
|
19
|
+
- 用户要的是来访 / 接待记录("今天来了几组")→ 走 `wangxiaobao-visit-query`
|
|
20
|
+
- 用户问录音元数据 / 文本 → 走 `wangxiaobao-audio-query`
|
|
21
|
+
- 用户要"出报告 / 落 wiki" → 本期不支持
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
> **Host-agnostic CLI skill** — 本 skill 假设 `xiaobao-cli` 已装到 PATH
|
|
25
|
+
> (`npm i -g @puyinkai/xiaobao-cli` 或 `npx -y @puyinkai/xiaobao-cli`)。
|
|
26
|
+
> Agent 通过 shell 工具(Bash / Run / Shell)执行命令、读 **stdout JSON** 消费;
|
|
27
|
+
> stderr 是进度/错误提示。退出码 0 = 成功,非 0 = 业务/网络错(错误对象同时打到 stdout 可解析)。
|
|
28
|
+
>
|
|
29
|
+
> CLI 14 个子命令跟 openclaw-xiaobao plugin 14 个 tool **1:1 等价**,返回 JSON
|
|
30
|
+
> 结构完全一致(`{status, ok, data: {...}}`)。skill 里看到的 `resp.data.data.xxx`
|
|
31
|
+
> 取数路径直接对 stdout JSON 用 `jq` / `JSON.parse` 即可。
|
|
32
|
+
>
|
|
33
|
+
> **plugin tool → CLI 命令翻译表(数组参数走逗号分隔)**:
|
|
34
|
+
>
|
|
35
|
+
> | plugin tool | CLI 命令 |
|
|
36
|
+
> | --- | --- |
|
|
37
|
+
> | `xiaobao_authorize { force? }` | `xiaobao-cli auth login [--force]` |
|
|
38
|
+
> | `xiaobao_whoami` | `xiaobao-cli auth whoami` |
|
|
39
|
+
> | `xiaobao_logout` | `xiaobao-cli auth logout` |
|
|
40
|
+
> | `xiaobao_list_projects { keyword? }` | `xiaobao-cli project list [--keyword <kw>]` |
|
|
41
|
+
> | `xiaobao_switch_project { tenantId, tenantName, projectId, projectName }` | `xiaobao-cli project use --tenant-id ... --tenant-name ... --project-id ... --project-name ...` |
|
|
42
|
+
> | `xiaobao_list_consultants` | `xiaobao-cli consultant list` |
|
|
43
|
+
> | `xiaobao_list_audio { fromDate, toDate, userId?, userIdList?, page, size }` | `xiaobao-cli audio list --from "..." --to "..." [--user-id ...] [--user-id-list a,b,c] [--page N] [--size N]` |
|
|
44
|
+
> | `xiaobao_get_audio_text { audioId }` | `xiaobao-cli audio text <audioId>` |
|
|
45
|
+
> | `xiaobao_list_customers { ... }` | `xiaobao-cli customer list [--user-id] [--user-name] [--customer-name] [--customer-phone] [--portrait] [--from] [--to] [--page] [--size]` |
|
|
46
|
+
> | `xiaobao_list_visits { ... }` | `xiaobao-cli visit list [--customer-id] [--customer-name] [--from] [--to] [--page] [--size]` |
|
|
47
|
+
> | `xiaobao_list_customer_focus { visitIds, customerIds, audioIds, category, classification, fromDate, toDate, ... }` | `xiaobao-cli focus list [--visit-ids a,b] [--customer-ids a,b] [--audio-ids a,b] [--category ...] [--classification ...] [--from ...] [--to ...]` |
|
|
48
|
+
> | `xiaobao_list_customer_resistance { ... }` | `xiaobao-cli resistance list [同 focus]` |
|
|
49
|
+
> | `xiaobao_quick_qa { prompt, threadId? }` | `xiaobao-cli qa "<prompt>" [--thread-id ...]` |
|
|
50
|
+
> | `xiaobao_api { method, path, query, body, headers }` | `xiaobao-cli api <METHOD> <PATH> [--query k=v] [--body '<json>'] [--headers k=v]` |
|
|
51
|
+
>
|
|
52
|
+
> 用 `--format toon` 切到 TOON(uniform 数组省 30-50% token,LLM 上下文优化);
|
|
53
|
+
> 用 `--format json`(默认)保持 JSON。state 路径:`~/.xiaobao/`(fallback 读 `~/.openclaw/state/wangxiaobao/`)。
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# 旺小宝客户分页查询
|
|
57
|
+
|
|
58
|
+
调 `xiaobao_list_customers` tool 查当前激活项目的客户画像列表。
|
|
59
|
+
零副作用,鼓励放心调用。
|
|
60
|
+
|
|
61
|
+
## 执行前必读
|
|
62
|
+
|
|
63
|
+
- 必须有有效 token:先调 `xiaobao_whoami`;未登录就 `xiaobao_authorize`
|
|
64
|
+
- **必须有激活项目**:tool 内部自动读,如果返回 `NO_ACTIVE_PROJECT` 就跑
|
|
65
|
+
`wangxiaobao-switch-project` skill
|
|
66
|
+
- **数据权限隔离**:后端按"当前用户授权可见的顾问范围"过滤(普通顾问看自己 /
|
|
67
|
+
团队长看团队 / 项目管理员看全项目)。当前用户无权访问的顾问名下客户**看不到**——
|
|
68
|
+
这不是 bug
|
|
69
|
+
- LocalDateTime 格式:`yyyy-MM-dd HH:mm:ss`(空格分隔),plugin 自动转 ISO
|
|
70
|
+
- **不要**写文件、出报告
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 快速索引:意图 → 工具
|
|
75
|
+
|
|
76
|
+
| 用户意图 | plugin tool | 关键参数 |
|
|
77
|
+
| ------------------------------ | -------------------------- | ---------------------------------- |
|
|
78
|
+
| 列全部客户(最近来访的在前) | `xiaobao_list_customers` | `page` / `size` |
|
|
79
|
+
| 看某顾问名下客户 | `xiaobao_list_consultants` → `xiaobao_list_customers` | `userId: <反查的 id>` |
|
|
80
|
+
| 按客户画像找 | `xiaobao_list_customers` | `portrait: "高意向"` 等 |
|
|
81
|
+
| 按客户姓名 / 手机号模糊 | `xiaobao_list_customers` | `customerName` / `customerPhone` |
|
|
82
|
+
| 按最后来访时间筛 | `xiaobao_list_customers` | `fromDate` / `toDate` |
|
|
83
|
+
| 估算总数 | `xiaobao_list_customers` | `page: 1, size: 1`,只读 `total` |
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 核心约束
|
|
88
|
+
|
|
89
|
+
### 1. 按顾问筛 —— 先反查 user-id,不要硬猜
|
|
90
|
+
|
|
91
|
+
用户说"张三的客户"——**不要**直接传 `userName: "张三"`(虽然支持但是 LIKE 模糊)。
|
|
92
|
+
正确做法:
|
|
93
|
+
|
|
94
|
+
1. 调 `xiaobao_list_consultants` 拿当前授权范围内的顾问列表
|
|
95
|
+
2. 找 `userName === "张三"` 的 `userId`
|
|
96
|
+
3. 调 `xiaobao_list_customers { userId: <张三的 userId> }` 精确过滤
|
|
97
|
+
|
|
98
|
+
如果 list-consultants 里**找不到张三**——说明当前用户没权限看张三名下数据,
|
|
99
|
+
告诉用户"当前账号无权访问销售『张三』",不要再硬试。
|
|
100
|
+
|
|
101
|
+
### 2. portrait 单关键词,越短越宽
|
|
102
|
+
|
|
103
|
+
后端在 `dynamic_tags` JSON 文本上 `LIKE '%xxx%'`。所以:
|
|
104
|
+
|
|
105
|
+
- `portrait: "高意向"` 命中 `{"高意向客户":"高意向客户"}` / `{"AI意向判定":"高意向"}` 等
|
|
106
|
+
- `portrait: "价格"` 命中 `{"抗性点":"价格"}` 等
|
|
107
|
+
- 不要传完整 JSON / key=value 形式(不支持,反而匹不到)
|
|
108
|
+
|
|
109
|
+
### 3. 时间窗:用户没明确说就推断
|
|
110
|
+
|
|
111
|
+
| 用户说法 | fromDate / toDate |
|
|
112
|
+
| ------------ | ------------------------------------------------ |
|
|
113
|
+
| "今天来访" | 今天 00:00:00 / 明天 00:00:00 |
|
|
114
|
+
| "本周" | 周一 00:00:00 / 今天 23:59:59 |
|
|
115
|
+
| "上周" | 上周一 / 本周一 |
|
|
116
|
+
| "5 月份" | 2026-05-01 00:00:00 / 2026-06-01 00:00:00 |
|
|
117
|
+
| "近一个月" | 30 天前 / now |
|
|
118
|
+
|
|
119
|
+
用户明确给时间则按字面用。
|
|
120
|
+
|
|
121
|
+
### 4. 分页:page 从 **1** 开始
|
|
122
|
+
|
|
123
|
+
PageParam 默认 `page: 1, size: 10`。传 `page: 0` 报错。`size` 上限 500。
|
|
124
|
+
|
|
125
|
+
### 5. 响应外层
|
|
126
|
+
|
|
127
|
+
`xiaobao_list_customers` 返回:
|
|
128
|
+
|
|
129
|
+
```jsonc
|
|
130
|
+
{
|
|
131
|
+
"code": "0",
|
|
132
|
+
"msg": "success",
|
|
133
|
+
"data": {
|
|
134
|
+
"page": 1, "size": 10, "total": 47,
|
|
135
|
+
"content": [
|
|
136
|
+
{
|
|
137
|
+
"customerId": "1685535452481236993",
|
|
138
|
+
"customerName": "屈哥",
|
|
139
|
+
"customerPhone": "173****7325",
|
|
140
|
+
"intentLevel": "A",
|
|
141
|
+
"aiIntentLevel": "A",
|
|
142
|
+
"lastVisitTime": "2023-07-30 14:01:03",
|
|
143
|
+
"userId": 270078834689187840,
|
|
144
|
+
"userName": "兰鸿建",
|
|
145
|
+
"userInfo": { /* 顾问详情 */ },
|
|
146
|
+
"dynamicTags": { "高意向客户": "高意向客户", "抗性点": "配套", ... }
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
plugin tool 又外包一层 `{ status, ok, data }` —— 取数据用 `resp.data.data.content`。
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## 使用场景示例
|
|
158
|
+
|
|
159
|
+
### 场景 1:列我能看到的高意向客户
|
|
160
|
+
|
|
161
|
+
```jsonc
|
|
162
|
+
{ "portrait": "高意向", "page": 1, "size": 20 }
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
渲染:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
共 12 位高意向客户(最近来访在前):
|
|
169
|
+
1. 屈哥 · 173****7325 · 顾问兰鸿建 · 最后来访 2023-07-30
|
|
170
|
+
2. 曹女士 · 186****1938 · 顾问兰鸿建 · 最后来访 2023-07-30
|
|
171
|
+
...
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 场景 2:陈平名下的客户
|
|
175
|
+
|
|
176
|
+
```jsonc
|
|
177
|
+
// step 1
|
|
178
|
+
// xiaobao_list_consultants
|
|
179
|
+
{}
|
|
180
|
+
|
|
181
|
+
// step 2 ——找到陈平的 userId = 270078836362715136
|
|
182
|
+
// step 3
|
|
183
|
+
// xiaobao_list_customers
|
|
184
|
+
{ "userId": 270078836362715136, "page": 1, "size": 20 }
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### 场景 3:5 月来访的客户里抗性是价格的
|
|
188
|
+
|
|
189
|
+
```jsonc
|
|
190
|
+
{
|
|
191
|
+
"portrait": "价格",
|
|
192
|
+
"fromDate": "2026-05-01 00:00:00",
|
|
193
|
+
"toDate": "2026-06-01 00:00:00"
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 场景 4:估算总数
|
|
198
|
+
|
|
199
|
+
```jsonc
|
|
200
|
+
{ "page": 1, "size": 1 }
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
回复:「当前授权范围下共 1247 位客户」。
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 常见错误与排查
|
|
208
|
+
|
|
209
|
+
- **`error: 'NO_ACTIVE_PROJECT'`** — 跑 `wangxiaobao-switch-project` skill
|
|
210
|
+
- **401 / token 过期** — 调 `xiaobao_authorize { force: true }` 重登
|
|
211
|
+
- **`total: 0`** — 时间窗口 / 过滤条件没匹配到,**或**当前用户授权范围为空
|
|
212
|
+
(新人顾问刚入职 / 团队成员被移走等)
|
|
213
|
+
- **顾问名找不到** — 不在当前用户授权可见范围内;不要硬调 list_customers 试
|
|
214
|
+
- **画像匹配不准** — portrait 太长 / 太具体导致 LIKE 不命中;改短关键词
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wangxiaobao-customer-resistance-query
|
|
3
|
+
description: |
|
|
4
|
+
旺小宝**客户抗性点**分页查询 skill:按 visit/customer/audio ID 列表、一级/二级
|
|
5
|
+
分类模糊、来访时间窗组合查 AI 在客户对话里抽出的「抗性点」标签
|
|
6
|
+
(客户疑虑 / 反对 / 不满:价格高 / 户型差 / 地段差 / 装修不满 等)。
|
|
7
|
+
**只读、不写文件、无副作用**。对应 `xiaobao_list_customer_resistance` tool。
|
|
8
|
+
排序固定 visit_time DESC。每条 tag 含 customer / userInfo / audio +
|
|
9
|
+
value_str(详细说明) + text_fragment(录音原文片段)。
|
|
10
|
+
|
|
11
|
+
**当以下情况时使用此 Skill**:
|
|
12
|
+
(1) 用户问"客户抗性点"、"客户疑虑"、"客户反对"、"客户嫌"、"客户担心"、"不满意"
|
|
13
|
+
(2) 用户问某客户的抗性 —— 先调 `xiaobao_list_customers` 反查 customerId,
|
|
14
|
+
再调本 skill 带 customerIds 精确过滤
|
|
15
|
+
(3) 用户问某次到访 / 某条录音里的抗性 —— 带 visitIds / audioIds
|
|
16
|
+
(4) 用户按分类找 —— 价格抗性 / 户型抗性 / 地段抗性 等 → category 模糊
|
|
17
|
+
(5) 用户按二级分类找 —— "价格因素" / "位置因素" → classification 模糊
|
|
18
|
+
(6) 用户给时间窗 —— "5 月份的抗性" / "本周抗性" → fromDate / toDate
|
|
19
|
+
(7) 想看 **TOP 抗性原因** / 销售应该重点准备哪些应对话术
|
|
20
|
+
|
|
21
|
+
**不要用本 skill 的场景**:
|
|
22
|
+
- 用户问的是**关注点 / 兴趣点 / 客户偏好** → 走 `wangxiaobao-customer-focus-query`
|
|
23
|
+
- 用户要的是客户**画像** / 标签 → 走 `wangxiaobao-customer-query`
|
|
24
|
+
- 用户问"完整录音文本" → 走 `wangxiaobao-audio-query` + `xiaobao_get_audio_text`
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
> **Host-agnostic CLI skill** — 本 skill 假设 `xiaobao-cli` 已装到 PATH
|
|
28
|
+
> (`npm i -g @puyinkai/xiaobao-cli` 或 `npx -y @puyinkai/xiaobao-cli`)。
|
|
29
|
+
> Agent 通过 shell 工具(Bash / Run / Shell)执行命令、读 **stdout JSON** 消费;
|
|
30
|
+
> stderr 是进度/错误提示。退出码 0 = 成功,非 0 = 业务/网络错(错误对象同时打到 stdout 可解析)。
|
|
31
|
+
>
|
|
32
|
+
> CLI 14 个子命令跟 openclaw-xiaobao plugin 14 个 tool **1:1 等价**,返回 JSON
|
|
33
|
+
> 结构完全一致(`{status, ok, data: {...}}`)。skill 里看到的 `resp.data.data.xxx`
|
|
34
|
+
> 取数路径直接对 stdout JSON 用 `jq` / `JSON.parse` 即可。
|
|
35
|
+
>
|
|
36
|
+
> **plugin tool → CLI 命令翻译表(数组参数走逗号分隔)**:
|
|
37
|
+
>
|
|
38
|
+
> | plugin tool | CLI 命令 |
|
|
39
|
+
> | --- | --- |
|
|
40
|
+
> | `xiaobao_authorize { force? }` | `xiaobao-cli auth login [--force]` |
|
|
41
|
+
> | `xiaobao_whoami` | `xiaobao-cli auth whoami` |
|
|
42
|
+
> | `xiaobao_logout` | `xiaobao-cli auth logout` |
|
|
43
|
+
> | `xiaobao_list_projects { keyword? }` | `xiaobao-cli project list [--keyword <kw>]` |
|
|
44
|
+
> | `xiaobao_switch_project { tenantId, tenantName, projectId, projectName }` | `xiaobao-cli project use --tenant-id ... --tenant-name ... --project-id ... --project-name ...` |
|
|
45
|
+
> | `xiaobao_list_consultants` | `xiaobao-cli consultant list` |
|
|
46
|
+
> | `xiaobao_list_audio { fromDate, toDate, userId?, userIdList?, page, size }` | `xiaobao-cli audio list --from "..." --to "..." [--user-id ...] [--user-id-list a,b,c] [--page N] [--size N]` |
|
|
47
|
+
> | `xiaobao_get_audio_text { audioId }` | `xiaobao-cli audio text <audioId>` |
|
|
48
|
+
> | `xiaobao_list_customers { ... }` | `xiaobao-cli customer list [--user-id] [--user-name] [--customer-name] [--customer-phone] [--portrait] [--from] [--to] [--page] [--size]` |
|
|
49
|
+
> | `xiaobao_list_visits { ... }` | `xiaobao-cli visit list [--customer-id] [--customer-name] [--from] [--to] [--page] [--size]` |
|
|
50
|
+
> | `xiaobao_list_customer_focus { visitIds, customerIds, audioIds, category, classification, fromDate, toDate, ... }` | `xiaobao-cli focus list [--visit-ids a,b] [--customer-ids a,b] [--audio-ids a,b] [--category ...] [--classification ...] [--from ...] [--to ...]` |
|
|
51
|
+
> | `xiaobao_list_customer_resistance { ... }` | `xiaobao-cli resistance list [同 focus]` |
|
|
52
|
+
> | `xiaobao_quick_qa { prompt, threadId? }` | `xiaobao-cli qa "<prompt>" [--thread-id ...]` |
|
|
53
|
+
> | `xiaobao_api { method, path, query, body, headers }` | `xiaobao-cli api <METHOD> <PATH> [--query k=v] [--body '<json>'] [--headers k=v]` |
|
|
54
|
+
>
|
|
55
|
+
> 用 `--format toon` 切到 TOON(uniform 数组省 30-50% token,LLM 上下文优化);
|
|
56
|
+
> 用 `--format json`(默认)保持 JSON。state 路径:`~/.xiaobao/`(fallback 读 `~/.openclaw/state/wangxiaobao/`)。
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# 旺小宝客户抗性点查询
|
|
60
|
+
|
|
61
|
+
调 `xiaobao_list_customer_resistance` tool 查 AI 抽出的客户抗性点标签。
|
|
62
|
+
跟关注点 skill 镜像,差别就是底层走 `mv_open_customer_resistance` 表 ——
|
|
63
|
+
**抗性 = 客户疑虑 / 反对 / 不满**(关注 = 客户主动表达的关心)。
|
|
64
|
+
|
|
65
|
+
## 执行前必读
|
|
66
|
+
|
|
67
|
+
- 必须有有效 token:先调 `xiaobao_whoami`;未登录就 `xiaobao_authorize`
|
|
68
|
+
- **必须有激活项目**:tool 内部自动读,缺失返回 `NO_ACTIVE_PROJECT`
|
|
69
|
+
- **数据权限隔离**:按当前用户授权可见顾问范围过滤(普通顾问看自己 /
|
|
70
|
+
团队长看团队 / 项目管理员看全项目)
|
|
71
|
+
- LocalDateTime 格式:`yyyy-MM-dd HH:mm:ss`(空格分隔),plugin 自动转
|
|
72
|
+
- **不要**写文件、出报告
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 快速索引:意图 → 工具
|
|
77
|
+
|
|
78
|
+
| 用户意图 | plugin tool | 关键参数 |
|
|
79
|
+
| ------------------------------------ | -------------------------------------- | ---------------------------------- |
|
|
80
|
+
| 列时段内全部抗性点 | `xiaobao_list_customer_resistance` | `fromDate` / `toDate` |
|
|
81
|
+
| 看某客户的抗性 | `xiaobao_list_customers` → `xiaobao_list_customer_resistance` | `customerIds: [<wang_id>]` |
|
|
82
|
+
| 看某次到访的抗性 | `xiaobao_list_customer_resistance` | `visitIds: [<visit_id>]` |
|
|
83
|
+
| 看某条录音的抗性 | `xiaobao_list_customer_resistance` | `audioIds: [<audio_id>]` |
|
|
84
|
+
| 按分类找(一级) | `xiaobao_list_customer_resistance` | `category: "价格"` 等 |
|
|
85
|
+
| 按分类找(二级) | `xiaobao_list_customer_resistance` | `classification: "价格因素"` |
|
|
86
|
+
| 估算总数 | `xiaobao_list_customer_resistance` | `page: 1, size: 1`,只读 `total` |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 核心约束
|
|
91
|
+
|
|
92
|
+
### 1. 客户名 → wang_id 反查
|
|
93
|
+
|
|
94
|
+
用户说"屈哥的抗性"——先调 `xiaobao_list_customers { customerName: "屈哥" }` 拿到
|
|
95
|
+
`customerId`,再传 `customerIds` 数组。
|
|
96
|
+
|
|
97
|
+
### 2. 分类模糊:一级 + 二级二选一或同时用
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
category 一级常见值:户型 / 价格 / 环境 / 教育 / 交通 / 商业配套 / 装修 / 其他
|
|
101
|
+
classification 二级常见值:户型因素 / 价格因素 / 环境因素 / ... / 位置因素 / 发展因素
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
抗性点最常见是 **"价格因素"** —— 价格高、超预算、车位贵、维修基金贵等。
|
|
105
|
+
其次 **"户型因素"**(房间小 / 朝向不好 / 楼间距)和 **"位置因素"**(偏远 / 噪音)。
|
|
106
|
+
|
|
107
|
+
### 3. 时间窗:用户没明确说就推断
|
|
108
|
+
|
|
109
|
+
| 用户说法 | fromDate / toDate |
|
|
110
|
+
| ------------ | ------------------------------------------------ |
|
|
111
|
+
| "今天抗性" | 今天 00:00:00 / 明天 00:00:00 |
|
|
112
|
+
| "本周抗性" | 周一 00:00:00 / 今天 23:59:59 |
|
|
113
|
+
| "5 月份" | 2026-05-01 00:00:00 / 2026-06-01 00:00:00 |
|
|
114
|
+
|
|
115
|
+
### 4. 响应字段重点
|
|
116
|
+
|
|
117
|
+
跟 focus 接口**完全镜像**(共享 `CustomerTagPageResp`),只是返回的是抗性点。
|
|
118
|
+
|
|
119
|
+
```jsonc
|
|
120
|
+
{
|
|
121
|
+
"code": "0",
|
|
122
|
+
"data": {
|
|
123
|
+
"page": 1, "size": 10, "total": 89,
|
|
124
|
+
"content": [
|
|
125
|
+
{
|
|
126
|
+
"id": "...",
|
|
127
|
+
"visitId": "510395382098829312",
|
|
128
|
+
"audioId": "1920802945878642689",
|
|
129
|
+
"customerId": "510395381809422336",
|
|
130
|
+
"textFragment": "车位都要十来万?",
|
|
131
|
+
"startOffset": 2778940,
|
|
132
|
+
"endOffset": 2780380,
|
|
133
|
+
"keyStr": "车位价格贵且与房价捆绑优惠",
|
|
134
|
+
"valueStr": "客户觉得车位贵,且与房价优惠捆绑,如'车位都要十来万?...'",
|
|
135
|
+
"category": "价格因素",
|
|
136
|
+
"classification": "价格因素",
|
|
137
|
+
"visitTime": "2025-05-09 18:09:01",
|
|
138
|
+
"customer": { /* 客户信息 */ },
|
|
139
|
+
"userInfo": { /* 顾问信息 */ },
|
|
140
|
+
"audio": { /* 录音简要 + 签名 fileUrl */ }
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### 5. 渲染给用户时
|
|
148
|
+
|
|
149
|
+
- **必显**:keyStr(抗性标题)+ valueStr(详细说明)+ visitTime + 客户名
|
|
150
|
+
- **可选**:category(分类标签,常见是"价格因素"/"户型因素")+ textFragment(原文,省略号截断)
|
|
151
|
+
- **链接**:要听原录音给 `audio.fileUrl`
|
|
152
|
+
|
|
153
|
+
### 6. TOP 抗性原因聚合
|
|
154
|
+
|
|
155
|
+
用户问"我们项目客户最大的抗性是什么"——拉一页 `size: 100`,agent 后处理按
|
|
156
|
+
`category` 聚合输出:"5 月共 89 条抗性:价格因素 42 条(47%)/ 户型因素 23 条 /
|
|
157
|
+
环境因素 12 条 / ..."。
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 使用场景示例
|
|
162
|
+
|
|
163
|
+
### 场景 1:本月客户最主要的抗性
|
|
164
|
+
|
|
165
|
+
```jsonc
|
|
166
|
+
{
|
|
167
|
+
"fromDate": "2026-05-01 00:00:00",
|
|
168
|
+
"toDate": "2026-06-01 00:00:00",
|
|
169
|
+
"page": 1, "size": 100
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
按 category 聚合 → "本月 89 条抗性中价格类占 47%,户型 26%,..."。
|
|
174
|
+
|
|
175
|
+
### 场景 2:价格抗性的具体说法
|
|
176
|
+
|
|
177
|
+
```jsonc
|
|
178
|
+
{ "category": "价格", "page": 1, "size": 20 }
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
列出 20 条价格抗性原文,让 LLM 帮销售总结"客户主要嫌车位价高、楼层差价大、
|
|
182
|
+
南北向价差大..."。
|
|
183
|
+
|
|
184
|
+
### 场景 3:屈哥这次到访都嫌什么
|
|
185
|
+
|
|
186
|
+
```jsonc
|
|
187
|
+
{ "visitIds": ["510395382098829312"], "page": 1, "size": 50 }
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 场景 4:户型 + 时间窗组合
|
|
191
|
+
|
|
192
|
+
```jsonc
|
|
193
|
+
{
|
|
194
|
+
"category": "户型",
|
|
195
|
+
"fromDate": "2026-05-01 00:00:00",
|
|
196
|
+
"toDate": "2026-06-01 00:00:00"
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
回复:"5 月户型抗性 23 条,主要集中在'房间小'(11)/'朝向不好'(5)/'楼间距'(4)..."。
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## 常见错误与排查
|
|
205
|
+
|
|
206
|
+
- **`error: 'NO_ACTIVE_PROJECT'`** — 跑 `wangxiaobao-switch-project` skill
|
|
207
|
+
- **401 / token 过期** — 调 `xiaobao_authorize { force: true }` 重登
|
|
208
|
+
- **`total: 0`** — 过滤条件没匹配 / 该时段没数据 / 当前用户授权范围内没匹配的接待顾问
|
|
209
|
+
- **抗性点 vs 关注点**:跟 LLM 强调"抗性"是负面(疑虑/反对),"关注"是中性偏正
|
|
210
|
+
(主动关心);用户说"嫌弃 / 担心 / 不满"走抗性,"在意 / 关心 / 偏好"走关注
|
|
211
|
+
- **category 模糊命中过多** — 加 classification 二级分类收敛
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: wangxiaobao-quick-qa
|
|
3
|
+
description: |
|
|
4
|
+
旺小宝业务数据问数 skill:用自然语言询问当前项目的客户 / 来访 / 销售 /
|
|
5
|
+
录音 / 业务指标等数据,AI 直接基于旺小宝数据回答。**只读、不写文件、无副作用**——
|
|
6
|
+
对应 `xiaobao_quick_qa` tool。
|
|
7
|
+
|
|
8
|
+
**当以下情况时使用此 Skill**:
|
|
9
|
+
(1) 用户问客户相关数据 —— "今天来了几个客户"、"本周新增多少客户"、
|
|
10
|
+
"意向客户都有谁"、"老客户回访情况"
|
|
11
|
+
(2) 用户问来访数据 —— "今天到访多少组"、"上周末来访高峰是几点"、
|
|
12
|
+
"首访 / 复访比例"
|
|
13
|
+
(3) 用户问挖需 / 转化指标 —— "挖需率多少"、"成交转化率"、"意向客户占比"、
|
|
14
|
+
"客户分级分布"
|
|
15
|
+
(4) 用户问销售 / 销冠数据 —— "本月销冠是谁"、"张三这周成交几单"、
|
|
16
|
+
"销售排行榜"、"业绩 TOP3"
|
|
17
|
+
(5) 用户问录音 / 通话 / 接待数据 —— "录音覆盖率多少"、"哪些销售有几条录音"、
|
|
18
|
+
"本周通话时长 TOP5"、"未跟进客户有多少"
|
|
19
|
+
(6) 任何"问一句旺小宝数据"的开放式问题
|
|
20
|
+
|
|
21
|
+
**不要用本 skill 的场景**:
|
|
22
|
+
- 用户要的是录音元数据列表(如"列今天所有录音的 audioId") →
|
|
23
|
+
用 `wangxiaobao-audio-query` skill,更快更精确
|
|
24
|
+
- 用户要批量同步录音文本到 wiki → 用 `wangxiaobao-audio-wiki` skill
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
> **Host-agnostic CLI skill** — 本 skill 假设 `xiaobao-cli` 已装到 PATH
|
|
28
|
+
> (`npm i -g @puyinkai/xiaobao-cli` 或 `npx -y @puyinkai/xiaobao-cli`)。
|
|
29
|
+
> Agent 通过 shell 工具(Bash / Run / Shell)执行命令、读 **stdout JSON** 消费;
|
|
30
|
+
> stderr 是进度/错误提示。退出码 0 = 成功,非 0 = 业务/网络错(错误对象同时打到 stdout 可解析)。
|
|
31
|
+
>
|
|
32
|
+
> CLI 14 个子命令跟 openclaw-xiaobao plugin 14 个 tool **1:1 等价**,返回 JSON
|
|
33
|
+
> 结构完全一致(`{status, ok, data: {...}}`)。skill 里看到的 `resp.data.data.xxx`
|
|
34
|
+
> 取数路径直接对 stdout JSON 用 `jq` / `JSON.parse` 即可。
|
|
35
|
+
>
|
|
36
|
+
> **plugin tool → CLI 命令翻译表(数组参数走逗号分隔)**:
|
|
37
|
+
>
|
|
38
|
+
> | plugin tool | CLI 命令 |
|
|
39
|
+
> | --- | --- |
|
|
40
|
+
> | `xiaobao_authorize { force? }` | `xiaobao-cli auth login [--force]` |
|
|
41
|
+
> | `xiaobao_whoami` | `xiaobao-cli auth whoami` |
|
|
42
|
+
> | `xiaobao_logout` | `xiaobao-cli auth logout` |
|
|
43
|
+
> | `xiaobao_list_projects { keyword? }` | `xiaobao-cli project list [--keyword <kw>]` |
|
|
44
|
+
> | `xiaobao_switch_project { tenantId, tenantName, projectId, projectName }` | `xiaobao-cli project use --tenant-id ... --tenant-name ... --project-id ... --project-name ...` |
|
|
45
|
+
> | `xiaobao_list_consultants` | `xiaobao-cli consultant list` |
|
|
46
|
+
> | `xiaobao_list_audio { fromDate, toDate, userId?, userIdList?, page, size }` | `xiaobao-cli audio list --from "..." --to "..." [--user-id ...] [--user-id-list a,b,c] [--page N] [--size N]` |
|
|
47
|
+
> | `xiaobao_get_audio_text { audioId }` | `xiaobao-cli audio text <audioId>` |
|
|
48
|
+
> | `xiaobao_list_customers { ... }` | `xiaobao-cli customer list [--user-id] [--user-name] [--customer-name] [--customer-phone] [--portrait] [--from] [--to] [--page] [--size]` |
|
|
49
|
+
> | `xiaobao_list_visits { ... }` | `xiaobao-cli visit list [--customer-id] [--customer-name] [--from] [--to] [--page] [--size]` |
|
|
50
|
+
> | `xiaobao_list_customer_focus { visitIds, customerIds, audioIds, category, classification, fromDate, toDate, ... }` | `xiaobao-cli focus list [--visit-ids a,b] [--customer-ids a,b] [--audio-ids a,b] [--category ...] [--classification ...] [--from ...] [--to ...]` |
|
|
51
|
+
> | `xiaobao_list_customer_resistance { ... }` | `xiaobao-cli resistance list [同 focus]` |
|
|
52
|
+
> | `xiaobao_quick_qa { prompt, threadId? }` | `xiaobao-cli qa "<prompt>" [--thread-id ...]` |
|
|
53
|
+
> | `xiaobao_api { method, path, query, body, headers }` | `xiaobao-cli api <METHOD> <PATH> [--query k=v] [--body '<json>'] [--headers k=v]` |
|
|
54
|
+
>
|
|
55
|
+
> 用 `--format toon` 切到 TOON(uniform 数组省 30-50% token,LLM 上下文优化);
|
|
56
|
+
> 用 `--format json`(默认)保持 JSON。state 路径:`~/.xiaobao/`(fallback 读 `~/.openclaw/state/wangxiaobao/`)。
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
# 旺小宝问数
|
|
60
|
+
|
|
61
|
+
调 `xiaobao_quick_qa` tool 用自然语言问当前激活项目的业务数据。
|
|
62
|
+
零副作用,不写文件、不动 wiki,所以用错也没成本,鼓励放心调用。
|
|
63
|
+
|
|
64
|
+
## 执行前必读
|
|
65
|
+
|
|
66
|
+
- 必须有有效 token:先调 `xiaobao_whoami`;未登录 / 过期就调 `xiaobao_authorize`
|
|
67
|
+
- **必须有激活项目**:tool 内部自动从激活项目状态读 tenant/project,
|
|
68
|
+
调用方**不要传** tenant/project 参数。如果 tool 返回
|
|
69
|
+
`error: 'NO_ACTIVE_PROJECT'`,让用户跑 `wangxiaobao-switch-project` skill
|
|
70
|
+
后再重试
|
|
71
|
+
- **绝不要**写文件。即使用户随口说"顺便存一下"也要拦——告诉用户"出长报告
|
|
72
|
+
的功能暂未发布,如果想存可以把回答复制下来"
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 快速索引:意图 → 工具
|
|
77
|
+
|
|
78
|
+
| 用户意图 | plugin tool | 关键参数 |
|
|
79
|
+
| ---------------------------------- | ------------------ | ------------------------------------- |
|
|
80
|
+
| 单轮问数 | `xiaobao_quick_qa` | `prompt` |
|
|
81
|
+
| 接着上一轮继续追问 | `xiaobao_quick_qa` | `prompt + threadId` |
|
|
82
|
+
| 给问题加上下文(如客户 ID 列表) | `xiaobao_quick_qa` | `prompt + context: {...}` |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 核心约束
|
|
87
|
+
|
|
88
|
+
### 1. 用业务语言问,不要追问 ID
|
|
89
|
+
|
|
90
|
+
用户问"张三本周成交几单"——直接把 prompt 原样传给 tool,**不要**先去查
|
|
91
|
+
张三的 user-id 再拼参数。后端 AI 知道"张三"在当前项目里就是谁。
|
|
92
|
+
|
|
93
|
+
如果用户问的是开放性问题("客户主要疑虑是啥"),更不要画蛇添足拼任何
|
|
94
|
+
ID / 时间窗口——AI 会自己定义合理范围。
|
|
95
|
+
|
|
96
|
+
### 2. 多轮:threadId 由 agent 自己接续
|
|
97
|
+
|
|
98
|
+
第一轮**不传** `threadId`,走单轮模式。响应里有 `resp.data.data.thread_id`,
|
|
99
|
+
**记在 agent 当前对话上下文里**,后续追问把它原样传回 `threadId` 入参。
|
|
100
|
+
**不要**把 thread_id 写到任何文件 / .env / 状态——它只是会话短期记忆。
|
|
101
|
+
|
|
102
|
+
跨 session(用户关了 chat)就**不再延续**,新 session 重新发起新一轮即可。
|
|
103
|
+
|
|
104
|
+
### 3. 响应只取 answer 给用户
|
|
105
|
+
|
|
106
|
+
`xiaobao_quick_qa` 返回结构:
|
|
107
|
+
|
|
108
|
+
```jsonc
|
|
109
|
+
{
|
|
110
|
+
"code": "0",
|
|
111
|
+
"msg": "success",
|
|
112
|
+
"data": {
|
|
113
|
+
"type": "quick-qa",
|
|
114
|
+
"thread_id": "...",
|
|
115
|
+
"answer": "最终文本(这就是要展示给用户的)",
|
|
116
|
+
"output": { /* 原始结构化数据,agent 自己看就行,不展示 */ }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
plugin tool 又把上面塞进 `{ status, ok, data }` 外包:拿最终文本写
|
|
122
|
+
`resp.data.data.answer`,渲染给用户**只展示 answer**。
|
|
123
|
+
|
|
124
|
+
如果要支持后续追问,结尾加一句"💡 想接着问可以告诉我,会沿用本次对话上下文"
|
|
125
|
+
(threadId 由 agent 自己存,不要让用户记)。
|
|
126
|
+
|
|
127
|
+
### 4. 不要拉太多上下文进 context
|
|
128
|
+
|
|
129
|
+
`context` 字段可以塞额外背景,但**控制在 < 4KB**。需要塞大块录音 / 客户
|
|
130
|
+
档案的需求暂时没有 plugin 侧支持——用户可以分多轮 prompt 喂,每轮塞一段。
|
|
131
|
+
|
|
132
|
+
### 5. 不要替代 audio-query 做"列录音元数据"
|
|
133
|
+
|
|
134
|
+
用户问"列下今天哪些录音"、"audioId 是多少"——那是
|
|
135
|
+
`wangxiaobao-audio-query` skill 的事(直接走录音元数据 API,更快也更精确)。
|
|
136
|
+
本 skill 是问"开放式业务问题"用的,不是数据列表 API 代理。
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 使用场景示例
|
|
141
|
+
|
|
142
|
+
### 场景 1:问客户来访
|
|
143
|
+
|
|
144
|
+
```jsonc
|
|
145
|
+
// xiaobao_quick_qa
|
|
146
|
+
{ "prompt": "今天到访了多少组客户,里面有几组是首访?" }
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
渲染:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
今天到访 18 组,其中:
|
|
153
|
+
- 首访 11 组(61%)
|
|
154
|
+
- 复访 7 组
|
|
155
|
+
|
|
156
|
+
💡 想接着问可以告诉我,会沿用本次对话上下文。
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 场景 2:问销冠
|
|
160
|
+
|
|
161
|
+
```jsonc
|
|
162
|
+
{ "prompt": "本月销冠是谁,业绩多少?" }
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
渲染:
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
本月销冠:张三
|
|
169
|
+
- 成交 8 单 / 金额 1240 万
|
|
170
|
+
- 跟进客户 47 组,成交转化率 17%
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 场景 3:问录音覆盖率
|
|
174
|
+
|
|
175
|
+
```jsonc
|
|
176
|
+
{ "prompt": "本周录音覆盖率怎么样?哪些销售覆盖低?" }
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
渲染:
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
本周录音覆盖率 78%(45 个销售里 35 个开了工牌录音)。
|
|
183
|
+
覆盖偏低的销售(< 50%):
|
|
184
|
+
1. 李四(22%)
|
|
185
|
+
2. 王五(38%)
|
|
186
|
+
3. 赵六(45%)
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 场景 4:接着追问(多轮)
|
|
190
|
+
|
|
191
|
+
用户:"那张三跟客户讲到学区时通常怎么应对?"
|
|
192
|
+
(接着上一轮 ——agent 自己存了 threadId)
|
|
193
|
+
|
|
194
|
+
```jsonc
|
|
195
|
+
{
|
|
196
|
+
"prompt": "那张三跟客户讲到学区时通常怎么应对?",
|
|
197
|
+
"threadId": "<上一轮 resp.data.data.thread_id>"
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 场景 5:带额外 context
|
|
202
|
+
|
|
203
|
+
```jsonc
|
|
204
|
+
{
|
|
205
|
+
"prompt": "评估一下这个客户的成交概率",
|
|
206
|
+
"context": {
|
|
207
|
+
"customer_id": 12345,
|
|
208
|
+
"recent_audio_ids": [9001, 9023, 9045]
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## 典型问数关键词参考
|
|
216
|
+
|
|
217
|
+
帮 agent 识别用户意图。看到这类词就走本 skill:
|
|
218
|
+
|
|
219
|
+
- **客户类**:客户、新客、老客、意向客、成交客、客户画像、客户分级、回访
|
|
220
|
+
- **来访类**:到访、来访、首访、复访、上门、到店、客流
|
|
221
|
+
- **挖需 / 转化**:挖需率、转化率、意向、成交率、跟进、转化漏斗
|
|
222
|
+
- **销售 / 销冠**:销冠、销售排行、业绩、佣金、TOP、成单
|
|
223
|
+
- **录音 / 接待**:录音、通话、对话、接待、覆盖率、时长
|
|
224
|
+
- **业务指标**:成单、签约、定金、退订、回款、佣金
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## 常见错误与排查
|
|
229
|
+
|
|
230
|
+
- **`error: 'NO_ACTIVE_PROJECT'`** — 还没设过激活项目 → 跑
|
|
231
|
+
`wangxiaobao-switch-project` skill 后重试
|
|
232
|
+
- **401 / token 过期** — 调 `xiaobao_authorize { force: true }` 重登,重试一次
|
|
233
|
+
- **响应耗时 > 30 分钟** — 后端慢到打满 plugin timeout → 告诉用户"上游慢,稍后重试"
|
|
234
|
+
- **answer 为空** — 上游这一轮没产出最终文本 → 让用户换个 prompt 重试
|
|
235
|
+
- **用户想"批量出报告"** — 拦住:本期 plugin 没有报告生成 skill,
|
|
236
|
+
解释"出长报告的功能在做异步化改造,下期发布"
|
|
237
|
+
- **用户问"列录音元数据 / audioId 是多少"** — 切到
|
|
238
|
+
`wangxiaobao-audio-query` skill,那个走元数据 API 更精确
|