@bty/customer-service-cli 0.1.11 → 0.1.12
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 +4 -1
- package/dist/bin.js +46 -0
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -226,6 +226,7 @@ cs-cli product update-sku --agent <id> --sku "颜色分类:粉红" --update '{"
|
|
|
226
226
|
| -------------------------------------------------------------------------------- | -------- |
|
|
227
227
|
| `conversation list --agent <id> [--user <用户名>] [--start <日期>] [--end <日期>]` | 搜索会话 |
|
|
228
228
|
| `conversation records <conversation_id> [--page-size N] [--direction prev|next]` | 获取会话聊天记录 |
|
|
229
|
+
| `conversation context-search --query <文本> [--start <时间>] [--end <时间>]` | 通过上下文内容模糊搜索对话记录(返回匹配消息详情,时间范围最多 3 天) |
|
|
229
230
|
|
|
230
231
|
|
|
231
232
|
### Agent 调试 (`debug`)
|
|
@@ -387,6 +388,9 @@ cs-cli product update-sku --agent <id> --sku "颜色分类:粉红" --update '{"
|
|
|
387
388
|
# 添加 FAQ
|
|
388
389
|
cs-cli faq add --agent <id> --file "常见问题" --questions "怎么退款,如何退款" --answers "答案=请联系客服处理退款"
|
|
389
390
|
|
|
391
|
+
# 通过上下文内容模糊搜索对话记录(自动使用当前工作空间,查询窗口最多 3 天)
|
|
392
|
+
cs-cli conversation context-search --query "退款问题" --start 2026-03-22T00:00:00 --end 2026-03-22T23:59:59
|
|
393
|
+
|
|
390
394
|
# 重放对话测试 Agent
|
|
391
395
|
cs-cli debug ask --agent <id> --messages @conversation.json
|
|
392
396
|
|
|
@@ -399,4 +403,3 @@ cs-cli repair-record create --issue <issue_id> --agent <agent_id> --action "更
|
|
|
399
403
|
# 更新修复记录状态
|
|
400
404
|
cs-cli repair-record update <record_id> --data '{"repair_status":"success","duration_ms":1200}'
|
|
401
405
|
```
|
|
402
|
-
|
package/dist/bin.js
CHANGED
|
@@ -1247,6 +1247,39 @@ function registerFaqCommand(program2) {
|
|
|
1247
1247
|
}
|
|
1248
1248
|
|
|
1249
1249
|
// src/client/conversation-api.ts
|
|
1250
|
+
var MAX_CONTEXT_SEARCH_RANGE_MS = 3 * 24 * 60 * 60 * 1e3;
|
|
1251
|
+
function parseSearchTime(value, fieldName) {
|
|
1252
|
+
const parsed = new Date(value);
|
|
1253
|
+
if (Number.isNaN(parsed.getTime())) {
|
|
1254
|
+
throw new Error(`${fieldName} \u683C\u5F0F\u65E0\u6548\uFF0C\u8BF7\u4F7F\u7528 ISO \u65F6\u95F4\uFF0C\u4F8B\u5982 2026-03-22T00:00:00`);
|
|
1255
|
+
}
|
|
1256
|
+
return parsed;
|
|
1257
|
+
}
|
|
1258
|
+
function validateContextSearchRange(startTime, endTime) {
|
|
1259
|
+
if (!startTime || !endTime) return;
|
|
1260
|
+
const start = parseSearchTime(startTime, "\u5F00\u59CB\u65F6\u95F4");
|
|
1261
|
+
const end = parseSearchTime(endTime, "\u7ED3\u675F\u65F6\u95F4");
|
|
1262
|
+
if (end.getTime() < start.getTime()) {
|
|
1263
|
+
throw new Error("\u7ED3\u675F\u65F6\u95F4\u4E0D\u80FD\u65E9\u4E8E\u5F00\u59CB\u65F6\u95F4");
|
|
1264
|
+
}
|
|
1265
|
+
if (end.getTime() - start.getTime() > MAX_CONTEXT_SEARCH_RANGE_MS) {
|
|
1266
|
+
throw new Error("\u67E5\u8BE2\u65F6\u95F4\u8303\u56F4\u4E0D\u80FD\u8D85\u8FC73\u5929");
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
async function contextSearchRecords(opts) {
|
|
1270
|
+
validateContextSearchRange(opts.startTime, opts.endTime);
|
|
1271
|
+
const wsId = getWorkspaceId(opts.workspaceId);
|
|
1272
|
+
const request = createRequest();
|
|
1273
|
+
return request(getCustomerServiceUrl(), "/v1/chat/records/context-search", {
|
|
1274
|
+
method: "GET",
|
|
1275
|
+
query: {
|
|
1276
|
+
workspace_id: wsId,
|
|
1277
|
+
query_content: opts.queryContent,
|
|
1278
|
+
start_time: opts.startTime,
|
|
1279
|
+
end_time: opts.endTime
|
|
1280
|
+
}
|
|
1281
|
+
});
|
|
1282
|
+
}
|
|
1250
1283
|
async function getConversationRecords(opts) {
|
|
1251
1284
|
const request = createRequest();
|
|
1252
1285
|
return request(getCustomerServiceUrl(), `/v1/chat/${opts.conversationId}/records`, {
|
|
@@ -1308,6 +1341,19 @@ function registerConversationCommand(program2) {
|
|
|
1308
1341
|
process.exit(toExitCode(err));
|
|
1309
1342
|
}
|
|
1310
1343
|
});
|
|
1344
|
+
conversation.command("context-search").description("\u901A\u8FC7\u4E0A\u4E0B\u6587\u5185\u5BB9\u6A21\u7CCA\u641C\u7D22\u5BF9\u8BDD\u8BB0\u5F55\uFF0C\u8FD4\u56DE\u5339\u914D\u6D88\u606F\u8BE6\u60C5\uFF08\u542B conversation_id\u3001record_id\u3001context \u7B49\u5B57\u6BB5\uFF0C\u65F6\u95F4\u8303\u56F4\u6700\u591A 3 \u5929\uFF09").requiredOption("--query <text>", "\u641C\u7D22\u7684\u6587\u672C\u5185\u5BB9\uFF08\u5982 AI \u7684\u9519\u8BEF\u56DE\u7B54\uFF09").option("--start <date>", "\u5F00\u59CB\u65F6\u95F4\uFF08ISO \u683C\u5F0F\uFF0C\u5982 2026-03-22T00:00:00\uFF1B\u4E0E\u7ED3\u675F\u65F6\u95F4\u8DE8\u5EA6\u6700\u591A 3 \u5929\uFF09").option("--end <date>", "\u7ED3\u675F\u65F6\u95F4\uFF08ISO \u683C\u5F0F\uFF0C\u5982 2026-03-22T23:59:59\uFF1B\u4E0E\u5F00\u59CB\u65F6\u95F4\u8DE8\u5EA6\u6700\u591A 3 \u5929\uFF09").action(async (opts) => {
|
|
1345
|
+
try {
|
|
1346
|
+
const data = await contextSearchRecords({
|
|
1347
|
+
queryContent: opts.query,
|
|
1348
|
+
startTime: opts.start,
|
|
1349
|
+
endTime: opts.end
|
|
1350
|
+
});
|
|
1351
|
+
formatOutput({ success: true, data }, program2.opts().table);
|
|
1352
|
+
} catch (err) {
|
|
1353
|
+
outputError(err.statusCode ?? 1, err.message);
|
|
1354
|
+
process.exit(toExitCode(err));
|
|
1355
|
+
}
|
|
1356
|
+
});
|
|
1311
1357
|
}
|
|
1312
1358
|
|
|
1313
1359
|
// src/client/debug-api.ts
|
package/package.json
CHANGED
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bty/customer-service-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"description": "AI Customer Service CLI - Agent friendly",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/bin.js",
|
|
7
7
|
"bin": {
|
|
8
|
-
"cs-cli": "
|
|
8
|
+
"cs-cli": "dist/bin.js"
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"/dist"
|
|
12
12
|
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsup src/bin.ts --format esm --target node20 --shims",
|
|
15
|
+
"dev": "tsx src/bin.ts",
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:watch": "vitest"
|
|
18
|
+
},
|
|
13
19
|
"dependencies": {
|
|
14
20
|
"cli-table3": "^0.6.0",
|
|
15
|
-
"commander": "
|
|
16
|
-
"crypto-js": "
|
|
21
|
+
"commander": "catalog:",
|
|
22
|
+
"crypto-js": "catalog:"
|
|
17
23
|
},
|
|
18
24
|
"devDependencies": {
|
|
19
|
-
"@types/crypto-js": "
|
|
20
|
-
"@types/node": "
|
|
25
|
+
"@types/crypto-js": "catalog:",
|
|
26
|
+
"@types/node": "catalog:",
|
|
21
27
|
"tsup": "^8.0.0",
|
|
22
28
|
"tsx": "^4.0.0",
|
|
23
29
|
"vitest": "^2.0.0"
|
|
@@ -28,11 +34,5 @@
|
|
|
28
34
|
},
|
|
29
35
|
"engines": {
|
|
30
36
|
"node": ">=20.0.0"
|
|
31
|
-
},
|
|
32
|
-
"scripts": {
|
|
33
|
-
"build": "tsup src/bin.ts --format esm --target node20 --shims",
|
|
34
|
-
"dev": "tsx src/bin.ts",
|
|
35
|
-
"test": "vitest run",
|
|
36
|
-
"test:watch": "vitest"
|
|
37
37
|
}
|
|
38
|
-
}
|
|
38
|
+
}
|