@sokeai/cli 1.0.64 → 1.0.66
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/package.json +1 -1
- package/skills/.claude/settings.local.json +7 -0
- package/skills/soke-ai-training/SKILL.md +159 -3
- package/skills/soke-assign/SKILL.md +58 -338
- package/skills/soke-course/SKILL.md +310 -417
- package/skills/soke-course/agents/openai.yaml +7 -0
- package/skills/soke-course/examples/create-basic.md +70 -0
- package/skills/soke-course/references/intent-cases.md +99 -0
- package/skills/soke-course/references/sop-full-workflow.md +172 -0
- package/skills/soke-course/references/sop-lesson-types.md +66 -0
- package/skills/soke-course/references/sop-publish-check.md +74 -0
- package/skills/soke-course/references/subs/ai/SOP.md +153 -0
- package/skills/soke-course/references/subs/category/SOP.md +112 -0
- package/skills/soke-course/references/subs/charge/SOP.md +107 -0
- package/skills/soke-course/references/subs/copy/SOP.md +80 -0
- package/skills/soke-course/references/subs/publish/SOP.md +138 -0
- package/skills/soke-course/references/subs/query/SOP.md +163 -0
- package/skills/soke-course/references/subs/settings/SOP.md +74 -0
- package/skills/soke-course/references/subs/template/SOP.md +223 -0
- package/skills/soke-course/references/troubleshoot.md +68 -0
- package/skills/soke-course/scripts/check_readiness.sh +82 -0
- package/skills/soke-lesson/SKILL.md +78 -472
- package/skills/soke-material/SKILL.md +64 -349
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: soke-ai-training
|
|
3
|
-
summary: AI教练知识包同步、source
|
|
3
|
+
summary: AI教练知识包同步、source管理、场景绑定、知识计划查询和场景CLI更新
|
|
4
4
|
version: 1.0.0
|
|
5
|
-
description: "用于本地Agent通过soke-cli调用开放平台AI
|
|
5
|
+
description: "用于本地Agent通过soke-cli调用开放平台AI教练接口,完成Markdown source上传、结构化entries同步、source管理、场景知识包版本绑定、知识计划编译查询、场景详情读取、系统角色资源查询和场景CLI安全更新。"
|
|
6
6
|
metadata:
|
|
7
7
|
requires:
|
|
8
8
|
bins: ["soke-cli"]
|
|
9
9
|
cliHelp: "soke-cli ai-training --help"
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
# AI
|
|
12
|
+
# AI教练知识包与场景管理
|
|
13
13
|
|
|
14
14
|
**CRITICAL — 开始前 MUST 先读取 [`../soke-shared/SKILL.md`](../soke-shared/SKILL.md),其中包含认证、配置和权限处理。**
|
|
15
15
|
|
|
@@ -85,9 +85,165 @@ soke-cli ai-training +compile-plan \
|
|
|
85
85
|
soke-cli ai-training +get-plan --scenario-id scenario_micro_loan_sales --format json
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
+
## 场景读取与更新
|
|
89
|
+
|
|
90
|
+
场景配置更新必须先读取当前场景,再基于 `updated_at` 构造 `base_updated_at`。只修改描述、角色、评分或流程时,使用 `+preview-scenario-update` 和 `+apply-scenario-update`;发布场景时才使用 `+publish-scenario`。
|
|
91
|
+
|
|
92
|
+
### 创建场景
|
|
93
|
+
|
|
94
|
+
如果封面图由本地智能体生成,先上传封面并拿到可写入 `scenario_cover` 的 CDN URL:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
soke-cli ai-training +upload-scenario-cover \
|
|
98
|
+
--file ./cover.png
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
默认只输出 CDN URL。需要排障时可加 `--raw` 查看完整上传凭证响应;不要把 `upload_url`、OSS 签名字段、access key 或 security token 写入仓库、状态文件或对话记录。SaaS 与 MentorAI 共用 OSS/CDN,封面上传复用开放平台的 SaaS OSS 签名能力,不需要 MentorAI 端单独上传接口。
|
|
102
|
+
|
|
103
|
+
最小参数创建:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
soke-cli ai-training +upload-scenario-cover --file ./cover.png > cover-url.txt
|
|
107
|
+
|
|
108
|
+
soke-cli ai-training +create-scenario \
|
|
109
|
+
--name "创建测试" \
|
|
110
|
+
--description "描述" \
|
|
111
|
+
--tags "" \
|
|
112
|
+
--key-points "关键点" \
|
|
113
|
+
--scene-lang zh \
|
|
114
|
+
--scenario-cover "$(cat cover-url.txt)" \
|
|
115
|
+
--pretty
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
复杂角色、评分规则、流程步骤和时间设置使用完整 JSON:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
soke-cli ai-training +create-scenario \
|
|
122
|
+
--request-file scenario-create.json \
|
|
123
|
+
--pretty
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
创建命令默认输出 MentorAI `BaseResponse.data`,通常可从返回对象中读取新场景 ID。创建请求中的 `corp_id`、`company_id`、`user_id`、`implementation_corp_id` 不作为授权依据,企业和用户上下文由开放平台认证注入。
|
|
127
|
+
|
|
128
|
+
### 读取和资源选择
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
soke-cli ai-training +list-scenarios \
|
|
132
|
+
--page 1 \
|
|
133
|
+
--page-size 20 \
|
|
134
|
+
--keyword "销售" \
|
|
135
|
+
--pretty
|
|
136
|
+
|
|
137
|
+
soke-cli ai-training +get-scenario \
|
|
138
|
+
--scenario-id scenario_micro_loan_sales \
|
|
139
|
+
--pretty \
|
|
140
|
+
--output scenario.json
|
|
141
|
+
|
|
142
|
+
soke-cli ai-training +list-role-avatars \
|
|
143
|
+
--lang zh \
|
|
144
|
+
--show-detail \
|
|
145
|
+
--pretty
|
|
146
|
+
|
|
147
|
+
soke-cli ai-training +list-role-voices \
|
|
148
|
+
--lang zh \
|
|
149
|
+
--gender female \
|
|
150
|
+
--pretty
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
`+list-scenarios` 默认输出 MentorAI `BaseResponse.data`,用于发现可操作场景 ID。列表 query 不要伪造 `corp_id`、`company_id`、`user_id` 或 `implementation_corp_id`;可见范围由开放平台 token、用户登录态和 MentorAI 权限决定。拿到场景 ID 后,优先执行 `+get-scenario` 保存完整基准 JSON。
|
|
154
|
+
|
|
155
|
+
头像更新写入 `ai_roles[].role_data.avatar` 时使用头像资源的 `url`,不是资源 `id`。声音更新写入 `ai_roles[].role_data.voice_id` 时使用声音资源的 `id`,不是 `sample_url`。
|
|
156
|
+
|
|
157
|
+
### 预览和应用
|
|
158
|
+
|
|
159
|
+
完整请求文件示例:
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"base_updated_at": "2026-07-08T10:20:00+08:00",
|
|
164
|
+
"idempotency_key": "cli-scenario-update-001",
|
|
165
|
+
"reason": "优化客户角色开场和声音",
|
|
166
|
+
"source": "cli",
|
|
167
|
+
"operations": [
|
|
168
|
+
{
|
|
169
|
+
"type": "patch_ai_role",
|
|
170
|
+
"data": {
|
|
171
|
+
"scenario_role_id": "role_customer_owner",
|
|
172
|
+
"patch": {
|
|
173
|
+
"role_data": {
|
|
174
|
+
"voice_id": "zh_female_warm_01"
|
|
175
|
+
},
|
|
176
|
+
"customized_fields": ["voice_id"]
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
soke-cli ai-training +preview-scenario-update \
|
|
186
|
+
--scenario-id scenario_micro_loan_sales \
|
|
187
|
+
--request-file update.json \
|
|
188
|
+
--pretty
|
|
189
|
+
|
|
190
|
+
soke-cli ai-training +apply-scenario-update \
|
|
191
|
+
--scenario-id scenario_micro_loan_sales \
|
|
192
|
+
--request-file update.json \
|
|
193
|
+
--pretty
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
也可以只提供 operations 数组,并用 flag 组装请求:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
soke-cli ai-training +preview-scenario-update \
|
|
200
|
+
--scenario-id scenario_micro_loan_sales \
|
|
201
|
+
--operations-file operations.json \
|
|
202
|
+
--base-updated-at "2026-07-08T10:20:00+08:00" \
|
|
203
|
+
--reason "优化场景说明" \
|
|
204
|
+
--pretty
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
`+apply-scenario-update` 必须有 `idempotency_key`,可放在 `--request-file` 中,或用 `--idempotency-key` 覆盖补充。遇到 409 乐观锁冲突时,重新执行 `+get-scenario` 获取最新 `updated_at` 后再生成更新请求。
|
|
208
|
+
|
|
209
|
+
### 发布场景
|
|
210
|
+
|
|
211
|
+
发布场景使用独立命令:
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
soke-cli ai-training +publish-scenario \
|
|
215
|
+
--scenario-id scenario_micro_loan_sales \
|
|
216
|
+
--pretty
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
MentorAI `POST /api/v1/scenarios/{scenario_id}/publish` 使用路径中的 `scenario_id`,并在 body 中发送 `version` 和 `version_description`。CLI 默认 `--version 1`、`--version-description "CLI发布"`,不再提供 `--request-file`。不要用 `+publish-scenario` 做任意局部更新;如果只是修改描述、角色字段、评分项或对话步骤,继续走 preview/apply。发布接口返回 409/422 时,加 `--raw` 保留 `errorCode/errorMessage/details/traceId`。
|
|
220
|
+
|
|
221
|
+
### 快照
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
soke-cli ai-training +list-scenario-snapshots \
|
|
225
|
+
--scenario-id scenario_micro_loan_sales \
|
|
226
|
+
--page 1 \
|
|
227
|
+
--page-size 20 \
|
|
228
|
+
--pretty
|
|
229
|
+
|
|
230
|
+
soke-cli ai-training +restore-scenario-snapshot \
|
|
231
|
+
--scenario-id scenario_micro_loan_sales \
|
|
232
|
+
--snapshot-id snapshot_001 \
|
|
233
|
+
--reason "回滚错误CLI更新" \
|
|
234
|
+
--pretty
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
新增场景命令默认输出 MentorAI `BaseResponse.data`;排查错误时加 `--raw` 保留 `success/errorCode/errorMessage/details/traceId`。
|
|
238
|
+
|
|
88
239
|
## 注意
|
|
89
240
|
|
|
90
241
|
- 不要在 manifest 或 entries 中伪造 `corp_id`、`user_id` 或 `object_key`。
|
|
91
242
|
- `object_key` 必须使用 upload-token 返回值。
|
|
92
243
|
- 不要把客户原始资料、token、app_secret 或 OSS 签名写入仓库。
|
|
244
|
+
- `+upload-scenario-cover` 默认只输出 `cdn_url`;只有排障时才使用 `--raw`,且不要持久化完整签名响应。
|
|
93
245
|
- `advisor_golden_script` 不应进入 AI 客户角色可见知识。
|
|
246
|
+
- 场景更新请求体或 query 中不要伪造 `corp_id`、`company_id`、`user_id`。
|
|
247
|
+
- 场景创建请求体中的 `corp_id`、`company_id`、`user_id`、`implementation_corp_id` 会由代理剥离,不要依赖它们选择租户。
|
|
248
|
+
- 场景更新前必须以 `+get-scenario` 的 `updated_at` 作为 `base_updated_at`。
|
|
249
|
+
- 场景发布需要 `+publish-scenario --scenario-id <id>`,默认带 `version=1` 和 `version_description=CLI发布`;不要把它当作局部更新命令。
|
|
@@ -1,383 +1,103 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: soke-assign
|
|
3
|
-
summary: 授客学堂指派管理(创建指派/查询指派/查询部门/查询用户),支持课程、考试、学习地图等多种模块的指派操作
|
|
4
3
|
version: 1.0.0
|
|
5
|
-
description:
|
|
6
|
-
|
|
7
|
-
requires:
|
|
8
|
-
bins: ["soke-cli"]
|
|
9
|
-
cliHelp: "soke-cli assign --help"
|
|
4
|
+
description: 指派管理 — 查询部门/用户并指派课程给学员,支持必修/选修
|
|
5
|
+
tags: [soke, assign, department, user, enrollment]
|
|
10
6
|
---
|
|
11
7
|
|
|
12
|
-
# 指派管理
|
|
8
|
+
# 指派管理
|
|
13
9
|
|
|
14
|
-
|
|
10
|
+
## 触发描述
|
|
15
11
|
|
|
16
|
-
|
|
12
|
+
课程创建并发布后,需要将课程指派给部门或具体学员时触发本技能。支持查询组织架构、查询用户列表、创建指派记录及查看指派列表。
|
|
17
13
|
|
|
18
|
-
|
|
14
|
+
## 前置条件
|
|
19
15
|
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
- 目标课程 `status = 1`(已发布),未发布的课程不可指派
|
|
17
|
+
- 具有指派权限(管理员或课程负责人)
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
# 1. 用户登录授权(必须)
|
|
26
|
-
soke-cli auth login
|
|
27
|
-
|
|
28
|
-
# 2. 验证登录状态
|
|
29
|
-
soke-cli config show
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
未完成登录授权将无法调用任何指派管理相关的 API。详细的认证配置说明请参考 [soke-shared/SKILL.md](../soke-shared/SKILL.md)。
|
|
33
|
-
|
|
34
|
-
## 核心概念
|
|
35
|
-
|
|
36
|
-
- **Assign(指派)**: 将学习资源分配给特定对象的操作,通过 `uuid` 标识
|
|
37
|
-
- **Module(模块)**: 学习资源类型,如 course(课程)、exam(考试)、learning_map(学习地图)
|
|
38
|
-
- **Target(目标)**: 被指派的学习资源,通过 `target_id` 标识
|
|
39
|
-
- **AssignType(指派类型)**: 指派对象类型,包括 dept(部门)、user(用户)、group(群组)、position(职位)、role(角色)
|
|
40
|
-
- **LearnType(学习类型)**: required(必修)或 optional(选修)
|
|
41
|
-
|
|
42
|
-
## 支持的模块
|
|
43
|
-
|
|
44
|
-
- **course** - 课程指派
|
|
45
|
-
- **exam** - 考试指派
|
|
46
|
-
- **learning_map** - 学习地图指派
|
|
47
|
-
- 其他模块(根据系统配置)
|
|
48
|
-
|
|
49
|
-
## 支持的指派类型
|
|
50
|
-
|
|
51
|
-
- **dept(部门)**: 部门下所有成员都可以学习
|
|
52
|
-
- **user(用户)**: 只有指定的用户可以学习
|
|
53
|
-
|
|
54
|
-
## 可用命令
|
|
19
|
+
## 执行流程
|
|
55
20
|
|
|
56
|
-
### 1.
|
|
57
|
-
|
|
58
|
-
查询可用的部门列表,用于指派前选择目标部门。
|
|
21
|
+
### 1. 查询部门 `assign +list-departments`
|
|
59
22
|
|
|
60
23
|
```bash
|
|
61
|
-
soke
|
|
24
|
+
soke assign +list-departments
|
|
62
25
|
```
|
|
63
26
|
|
|
64
|
-
|
|
65
|
-
- `--page` - 页码(默认:1)
|
|
66
|
-
- `--limit` - 每页数量(默认:10)
|
|
67
|
-
- `--parent-id` - 父部门ID(默认:1,查询顶级部门)
|
|
68
|
-
- `--keyword` - 搜索关键词(部门名称)
|
|
69
|
-
|
|
70
|
-
**示例**:
|
|
71
|
-
```bash
|
|
72
|
-
# 查询顶级部门
|
|
73
|
-
soke-cli assign +list-departments
|
|
74
|
-
|
|
75
|
-
# 搜索部门
|
|
76
|
-
soke-cli assign +list-departments --keyword "研发"
|
|
27
|
+
返回当前租户下所有部门结构。输出格式预期为部门 ID 与名称的层级列表。
|
|
77
28
|
|
|
78
|
-
|
|
79
|
-
soke-cli assign +list-departments --parent-id "130110584"
|
|
80
|
-
```
|
|
29
|
+
> 该项为辅助查询,不直接参与指派创建,但可用于确认用户所属部门。
|
|
81
30
|
|
|
82
|
-
|
|
83
|
-
- 部门ID(用于创建指派)
|
|
84
|
-
- 部门名称
|
|
85
|
-
- 父部门ID
|
|
86
|
-
- 成员数量
|
|
87
|
-
- 子部门数量
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
### 2. 查询用户列表
|
|
92
|
-
|
|
93
|
-
查询可用的用户列表,用于指派前选择目标用户。
|
|
31
|
+
### 2. 查询用户 `assign +list-users`
|
|
94
32
|
|
|
95
33
|
```bash
|
|
96
|
-
soke
|
|
34
|
+
soke assign +list-users --department-id <departmentId>
|
|
97
35
|
```
|
|
98
36
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
- `--search-target` - 搜索目标:name(姓名)/phone(手机号)/job_number(工号),默认:name
|
|
103
|
-
- `--is-in` - 是否在权限范围内:0否/1是
|
|
104
|
-
- `--is-new` - 是否新用户:0否/1是(默认:0)
|
|
105
|
-
- `--page` - 页码(默认:1)
|
|
106
|
-
- `--limit` - 每页数量(默认:20)
|
|
107
|
-
|
|
108
|
-
**示例**:
|
|
109
|
-
```bash
|
|
110
|
-
# 查询所有用户
|
|
111
|
-
soke-cli assign +list-users
|
|
37
|
+
| 参数 | 必填 | 说明 |
|
|
38
|
+
|------|------|------|
|
|
39
|
+
| `--department-id` | 否 | 按部门过滤,不传则返回全部用户 |
|
|
112
40
|
|
|
113
|
-
|
|
114
|
-
soke-cli assign +list-users --dept-id "130110584"
|
|
41
|
+
返回用户列表,包含用户 ID、姓名、所属部门等基本信息。
|
|
115
42
|
|
|
116
|
-
|
|
117
|
-
soke-cli assign +list-users --keyword "张三" --search-target "name"
|
|
118
|
-
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
**输出信息**:
|
|
122
|
-
- 用户ID(用于创建指派)
|
|
123
|
-
- 姓名
|
|
124
|
-
- 部门ID
|
|
125
|
-
- 职位
|
|
126
|
-
- 工号
|
|
127
|
-
- 在职状态
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
### 3. 创建指派
|
|
132
|
-
|
|
133
|
-
将学习资源指派给部门、用户、群组、职位或角色。
|
|
43
|
+
### 3. 创建指派 `assign +create`
|
|
134
44
|
|
|
135
45
|
```bash
|
|
136
|
-
soke
|
|
46
|
+
soke assign +create \
|
|
47
|
+
--module course \
|
|
48
|
+
--module-id <courseId> \
|
|
49
|
+
--compulsory <1|0> \
|
|
50
|
+
--user-ids "<userId1>,<userId2>,<userId3>"
|
|
137
51
|
```
|
|
138
52
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- `--dept-ids` - 部门ID列表,逗号分隔
|
|
146
|
-
- `--dept-names` - 部门名称列表,逗号分隔,与dept-ids对应
|
|
147
|
-
- `--user-ids` - 用户ID列表,逗号分隔
|
|
148
|
-
- `--user-names` - 用户名称列表,逗号分隔,与user-ids对应
|
|
149
|
-
- `--message-content` - 通知消息内容
|
|
150
|
-
- `--message-switch` - 消息开关:0关闭/1开启,默认:1
|
|
151
|
-
|
|
152
|
-
**示例**:
|
|
153
|
-
```bash
|
|
154
|
-
# 指派课程给部门(必修)
|
|
155
|
-
soke-cli assign +create \
|
|
156
|
-
--module "course" \
|
|
157
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271" \
|
|
158
|
-
--dept-ids "130110584" \
|
|
159
|
-
--dept-names "研发部" \
|
|
160
|
-
--learn-type "required" \
|
|
161
|
-
--message-content "新课程已为您安排,请及时学习!"
|
|
162
|
-
|
|
163
|
-
# 指派课程给用户
|
|
164
|
-
soke-cli assign +create \
|
|
165
|
-
--module "course" \
|
|
166
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271" \
|
|
167
|
-
--user-ids "1241453468881932" \
|
|
168
|
-
--user-names "张三" \
|
|
169
|
-
--learn-type "required"
|
|
53
|
+
| 参数 | 必填 | 说明 |
|
|
54
|
+
|------|------|------|
|
|
55
|
+
| `--module` | 是 | 固定值 `course` |
|
|
56
|
+
| `--module-id` | 是 | 课程 ID |
|
|
57
|
+
| `--compulsory` | 是 | `1` = 必修,`0` = 选修 |
|
|
58
|
+
| `--user-ids` | 是 | 逗号分隔的用户 ID 列表 |
|
|
170
59
|
|
|
171
|
-
|
|
172
|
-
soke-cli assign +create \
|
|
173
|
-
--module "course" \
|
|
174
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271" \
|
|
175
|
-
--dept-ids "130110584,130110585" \
|
|
176
|
-
--dept-names "研发部,测试部" \
|
|
177
|
-
--user-ids "1241453468881932" \
|
|
178
|
-
--user-names "张三" \
|
|
179
|
-
--learn-type "required"
|
|
60
|
+
> ⚠️ 课程必须 `status = 1`(已发布),否则指派会失败。
|
|
180
61
|
|
|
181
|
-
|
|
182
|
-
soke-cli assign +create \
|
|
183
|
-
--module "exam" \
|
|
184
|
-
--target-id "EXAM-UUID-12345" \
|
|
185
|
-
--dept-ids "130110584" \
|
|
186
|
-
--dept-names "研发部" \
|
|
187
|
-
--learn-type "required"
|
|
188
|
-
|
|
189
|
-
# 创建选修课指派
|
|
190
|
-
soke-cli assign +create \
|
|
191
|
-
--module "course" \
|
|
192
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271" \
|
|
193
|
-
--dept-ids "130110584" \
|
|
194
|
-
--dept-names "研发部" \
|
|
195
|
-
--learn-type "optional"
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
**重要提示**:
|
|
199
|
-
- 至少需要指定一种指派类型(部门或用户)
|
|
200
|
-
- 支持批量指派,使用逗号分隔多个ID和名称
|
|
201
|
-
- ID和名称的顺序要一一对应
|
|
202
|
-
- 默认开启消息通知,可通过 `--message-switch 0` 关闭
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
### 4. 查询指派列表
|
|
207
|
-
|
|
208
|
-
查询已创建的指派记录。
|
|
62
|
+
### 4. 查询指派 `assign +list`
|
|
209
63
|
|
|
210
64
|
```bash
|
|
211
|
-
soke
|
|
65
|
+
soke assign +list --module-id <courseId>
|
|
212
66
|
```
|
|
213
67
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
- `--learn-type` - 学习类型:required/optional
|
|
218
|
-
- `--assign-type` - 指派类型:dept/user/group/position/role
|
|
219
|
-
- `--keyword` - 搜索关键词(部门名、用户名等)
|
|
220
|
-
- `--page` - 页码(默认:1)
|
|
221
|
-
- `--limit` - 每页数量(默认:10)
|
|
68
|
+
| 参数 | 必填 | 说明 |
|
|
69
|
+
|------|------|------|
|
|
70
|
+
| `--module-id` | 是 | 课程 ID |
|
|
222
71
|
|
|
223
|
-
|
|
224
|
-
```bash
|
|
225
|
-
# 查询特定课程的所有指派
|
|
226
|
-
soke-cli assign +list \
|
|
227
|
-
--module "course" \
|
|
228
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271"
|
|
72
|
+
返回该课程所有已指派的学员列表,包含用户信息、必修/选修标记、学习进度。
|
|
229
73
|
|
|
230
|
-
|
|
231
|
-
soke-cli assign +list \
|
|
232
|
-
--module "course" \
|
|
233
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271" \
|
|
234
|
-
--assign-type "dept"
|
|
74
|
+
## 输出标准
|
|
235
75
|
|
|
236
|
-
|
|
237
|
-
soke-cli assign +list \
|
|
238
|
-
--module "course" \
|
|
239
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271" \
|
|
240
|
-
--keyword "研发"
|
|
76
|
+
创建指派成功后输出:
|
|
241
77
|
|
|
242
|
-
# 查询必修课指派
|
|
243
|
-
soke-cli assign +list \
|
|
244
|
-
--module "course" \
|
|
245
|
-
--learn-type "required"
|
|
246
78
|
```
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
-
|
|
250
|
-
-
|
|
251
|
-
-
|
|
252
|
-
- 目标ID
|
|
253
|
-
- 学习类型
|
|
254
|
-
- 创建时间
|
|
255
|
-
- 创建人
|
|
256
|
-
- 状态信息
|
|
257
|
-
|
|
258
|
-
---
|
|
259
|
-
|
|
260
|
-
## 完整工作流
|
|
261
|
-
|
|
262
|
-
### 场景1:为新员工培训课程创建指派
|
|
263
|
-
|
|
264
|
-
```bash
|
|
265
|
-
# 步骤1: 查询部门列表,找到目标部门
|
|
266
|
-
soke-cli assign +list-departments --keyword "研发"
|
|
267
|
-
# 输出:部门ID: 130110584, 部门名称: 研发部
|
|
268
|
-
|
|
269
|
-
# 步骤2: 查询该部门的用户(可选)
|
|
270
|
-
soke-cli assign +list-users --dept-id "130110584"
|
|
271
|
-
# 输出:用户列表
|
|
272
|
-
|
|
273
|
-
# 步骤3: 创建课程指派
|
|
274
|
-
soke-cli assign +create \
|
|
275
|
-
--module "course" \
|
|
276
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271" \
|
|
277
|
-
--dept-ids "130110584" \
|
|
278
|
-
--dept-names "研发部" \
|
|
279
|
-
--learn-type "required" \
|
|
280
|
-
--message-content "新员工培训课程已为您安排,请在一周内完成学习!"
|
|
281
|
-
|
|
282
|
-
# 步骤4: 验证指派是否成功
|
|
283
|
-
soke-cli assign +list \
|
|
284
|
-
--module "course" \
|
|
285
|
-
--target-id "E08464D0-D567-4A01-8FAB-BD41AFFDB271"
|
|
79
|
+
✅ 指派创建成功
|
|
80
|
+
- 课程: {courseTitle} (ID: {courseId})
|
|
81
|
+
- 类型: {必修/选修}
|
|
82
|
+
- 指派人数: {N} 人
|
|
83
|
+
- 用户: {userName1}, {userName2}...
|
|
286
84
|
```
|
|
287
85
|
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
```bash
|
|
291
|
-
# 同时指派给部门和用户
|
|
292
|
-
soke-cli assign +create \
|
|
293
|
-
--module "exam" \
|
|
294
|
-
--target-id "EXAM-UUID-12345" \
|
|
295
|
-
--dept-ids "130110584,130110585" \
|
|
296
|
-
--dept-names "研发部,测试部" \
|
|
297
|
-
--user-ids "1241453468881932" \
|
|
298
|
-
--user-names "张三" \
|
|
299
|
-
--learn-type "required" \
|
|
300
|
-
--message-content "年度考核考试已开放,请按时参加!"
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
---
|
|
86
|
+
查询操作以表格或列表形式输出结果。
|
|
304
87
|
|
|
305
88
|
## 注意事项
|
|
306
89
|
|
|
307
|
-
1.
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
- 支持同时指派给多个对象
|
|
314
|
-
- 使用逗号分隔多个ID和名称
|
|
315
|
-
- ID和名称的顺序要一一对应
|
|
316
|
-
|
|
317
|
-
3. **必修 vs 选修**
|
|
318
|
-
- 必修(required):用户必须完成学习
|
|
319
|
-
- 选修(optional):用户可选择性学习
|
|
320
|
-
|
|
321
|
-
4. **消息通知**
|
|
322
|
-
- 默认开启消息通知
|
|
323
|
-
- 可自定义消息内容
|
|
324
|
-
- 可通过 `--message-switch 0` 关闭通知
|
|
325
|
-
|
|
326
|
-
5. **权限要求**
|
|
327
|
-
- 需要具有指派的读写权限
|
|
328
|
-
- 只能查询和操作权限范围内的部门和用户
|
|
329
|
-
|
|
330
|
-
---
|
|
331
|
-
|
|
332
|
-
## 常见问题
|
|
333
|
-
|
|
334
|
-
### Q1: 如何获取课程ID?
|
|
335
|
-
```bash
|
|
336
|
-
soke-cli course +list-courses --page 1 --limit 10
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
### Q2: 如何获取部门ID?
|
|
340
|
-
```bash
|
|
341
|
-
soke-cli assign +list-departments --keyword "研发"
|
|
342
|
-
```
|
|
90
|
+
1. **课程必须先发布**(status=1)才能指派,未发布课程无法创建指派记录
|
|
91
|
+
2. `--module` 当前仅支持 `course`,扩展模块后可能支持其他值
|
|
92
|
+
3. 必修课(compulsory=1)学员不可跳过,选修课(compulsory=0)学员可自主选择
|
|
93
|
+
4. 指派后可重复指派同一用户,以最新一次为准(覆盖更新)
|
|
94
|
+
5. 批量指派建议单次 user-ids 不超过 500 人,超出分批处理
|
|
95
|
+
6. 取消指派(删除指派记录)需通过后台操作,CLI 不直接支持
|
|
343
96
|
|
|
344
|
-
|
|
345
|
-
```bash
|
|
346
|
-
soke-cli assign +list-users --dept-id "1" --keyword "张三"
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
### Q4: 指派失败怎么办?
|
|
350
|
-
检查以下几点:
|
|
351
|
-
1. 目标资源是否已发布
|
|
352
|
-
2. 部门ID和用户ID是否正确
|
|
353
|
-
3. 是否有足够的权限
|
|
354
|
-
4. module 参数是否正确
|
|
355
|
-
|
|
356
|
-
### Q5: 可以同时指派给多种类型吗?
|
|
357
|
-
可以!在一次指派中可以同时指定部门、用户、群组、职位和角色。
|
|
358
|
-
|
|
359
|
-
---
|
|
360
|
-
|
|
361
|
-
## API 接口
|
|
362
|
-
|
|
363
|
-
本 skill 使用以下 API 接口:
|
|
364
|
-
|
|
365
|
-
- `GET /skills/department/list` - 查询部门列表
|
|
366
|
-
- `GET /skills/user/list` - 查询用户列表
|
|
367
|
-
- `POST /skills/assignLog/create` - 创建指派
|
|
368
|
-
- `GET /skills/assignLog/list` - 查询指派列表
|
|
369
|
-
|
|
370
|
-
详细的 API 文档请参考 [API_PROXY_INTERFACES_2.0.md](../../docs/API_PROXY_INTERFACES_2.0.md)。
|
|
371
|
-
|
|
372
|
-
---
|
|
373
|
-
|
|
374
|
-
## 相关 Skills
|
|
375
|
-
|
|
376
|
-
- **soke-course** - 课程管理,创建和管理课程
|
|
377
|
-
- **soke-exam** - 考试管理,创建和管理考试
|
|
378
|
-
- **soke-learning-profile** - 学习地图管理
|
|
379
|
-
|
|
380
|
-
---
|
|
97
|
+
## 检查清单
|
|
381
98
|
|
|
382
|
-
|
|
383
|
-
|
|
99
|
+
- [ ] 课程 status = 1(已发布确认)
|
|
100
|
+
- [ ] 已通过 list-departments / list-users 确认目标用户 ID
|
|
101
|
+
- [ ] compulsory 正确设定(1=必修, 0=选修)
|
|
102
|
+
- [ ] user-ids 为逗号分隔的有效用户 ID 列表
|
|
103
|
+
- [ ] 指派完成后通过 assign +list 验证结果
|