@yunkeai/yunke-cli 3.0.0-alpha.0 → 3.0.1

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.
@@ -1,167 +0,0 @@
1
- ---
2
- name: yunke-cli-skills
3
- description: "yunke 是 AI-native 可插拔 CLI 框架,所有命令输出为 JSON。当需要探索可用命令、管理插件、控制 feature flag、检查/更新版本时调用。业务操作请加载对应的业务 skill(清单见下)。"
4
- metadata:
5
- requires:
6
- bins: ["yunke"]
7
- cliHelp: "yunke help"
8
- ---
9
-
10
- # yunke
11
-
12
- 每次使用 yunke 前必须读取本文件。
13
-
14
- > **版本门槛:** 本 skill 与随附业务 skill 依赖 yunke-cli **≥ 3.0.0**。
15
- > 检查:`yunke --version`(输出含 `version` / `flavor` / `package`);升级以安装包为准
16
- > (SaaS 生产包可 `yunke self.update` 检查,私部/测试包会提示联系交付方)。
17
-
18
- ## 输出格式
19
-
20
- 所有命令统一返回:
21
-
22
- ```json
23
- {
24
- "success": true,
25
- "data": { ... },
26
- "error": null,
27
- "metadata": {
28
- "command": "schema",
29
- "duration_ms": 2,
30
- "timestamp": "2026-04-10T00:00:00.000Z",
31
- "plugin": "builtin:schema"
32
- }
33
- }
34
- ```
35
-
36
- - 业务数据在 `data` 字段
37
- - `success=false` 时读 `error`,停止后续步骤
38
- - 例外:`crm.auth.login-web` 输出**不是** JSON 信封(首行为授权 URL),以退出码判定登录成败;`crm.auth.login-device-code` 首个输出是裸授权 URL,交互结束后追加一行与 `crm.auth.status` 同形的 JSON 信封;`crm.auth.status` 是 JSON 信封(`success`/`data.message`),同时保留退出码(0=已登录,1=未登录),详见 yunke-crm skill 登录流程
39
-
40
- ## 与用户交互规则
41
-
42
- **默认以业务助理身份与用户对话,不暴露底层命令、JSON 结构或技术细节。**
43
-
44
- - 用自然语言描述操作结果,不要把原始 JSON 直接输出给用户
45
- - 缺少必要信息时,只追问缺失的那一项,不要一次列出所有参数
46
- - 操作成功时,用一句话告知结果;失败时,用用户能理解的语言说明原因
47
- - 只有用户明确要求"看原始数据 / 看命令 / 看返回值"时,才展示技术细节
48
- - 多步骤任务中,每步完成后简短告知进度,不要把步骤编号暴露给用户
49
- - 登录是浏览器页面登录:发起 `crm.auth.login-web` 后告知用户「浏览器已打开登录页,请去页面完成登录」,**不要在聊天里索要手机号或验证码**
50
- - 宿主无法接收本地回调(如百度搭子)时用 `crm.auth.login-device-code`:命令打印授权链接和用户码,请用户在可打开浏览器的设备上访问链接并输入用户码,**不要索要账号密码**
51
-
52
- 示例:
53
- - ✅ "浏览器已打开登录页,请在页面上完成登录。"
54
- - ❌ "已执行 `crm.auth.login-web`,输出授权 URL 并阻塞等待回调"
55
-
56
- ## 核心规则
57
-
58
- - **参数与返回值一律运行时查**:见下方「命令发现」。业务 skill 只写场景与顺序,不抄参数表;
59
- 场景必需时可以用一两个参数把效果说清楚(如「需要员工节点时加 `show_user: true`」),但不罗列参数
60
- - 不确定命令名时,先用 `schema` 探索(内部操作,不告知用户)
61
- - 业务操作前,先加载对应业务 skill(清单见下方「业务技能」)
62
- - 不要忽略 `success=false` 继续执行
63
-
64
- ## 命令发现
65
-
66
- ```bash
67
- # 列出全部命令
68
- yunke schema
69
-
70
- # 查看指定命令的参数和返回值结构(参数/返回值来自上游契约)
71
- yunke schema.detail --command <command-name>
72
- ```
73
-
74
- - **参数名不许猜**:各命令族没有统一惯例,未知参数会被直接拒绝(`VALIDATION_FAILED`,`details.available` 是可用参数清单)。一次查全,比逐个试错快。
75
- - 可选参数不要凭印象补默认值,留空让上游默认值生效。
76
-
77
- ## 插件管理
78
-
79
- ```bash
80
- yunke plugin.list
81
- yunke plugin.install --path /path/to/plugin
82
- yunke plugin.enable --name <name>
83
- yunke plugin.disable --name <name>
84
- yunke plugin.remove --name <name>
85
- ```
86
-
87
- ## Feature Flag
88
-
89
- ```bash
90
- yunke feature.list
91
- yunke feature.enable --name <name> # 下次运行生效
92
- yunke feature.disable --name <name>
93
- ```
94
-
95
- ## 版本管理
96
-
97
- ```bash
98
- yunke self.check # 检查新版本(仅 SaaS 生产包)
99
- yunke self.update # 更新(仅 SaaS 生产包;含备份和完整性校验)
100
- yunke self.rollback # 回滚到上一版本
101
- ```
102
-
103
- 私部/测试包的版本与包内技能由安装包锁定:`self.check` / `self.update` 会返回
104
- 「该构建由安装包管理,请联系交付方获取新版本」,升级需更换安装包。
105
-
106
- ## 运行时配置
107
-
108
- | 文件 | 用途 |
109
- |------|------|
110
- | `~/.yunke/plugins.json` | 用户安装的插件列表 |
111
- | `~/.yunke/features.json` | feature flag 开关 |
112
- | `~/.yunke/crm.json` | yunke-crm 登录凭证 |
113
- | `~/.yunke/agenphone.json` | agenphone 配置和 token |
114
-
115
- ## 业务技能
116
-
117
- 以下技能随 CLI 安装时自动装好(postinstall 默认安装),一般无需手动操作:
118
-
119
- | 技能名 | slug | 用途 |
120
- |--------|------|------|
121
- | 云客 CRM | `yunke-crm` | 登录认证、组织架构、员工报表 |
122
- | 企业微信 | `yunke-wecom` | 企微客户、会话、客户群、敏感词、朋友圈按场景取数 |
123
- | 云客能力导览 | `yunke-crm-guide` | 用户问"能做什么"时的能力介绍与开口引导 |
124
- | 周期报告 | `yunke-crm-periodic-report` | 日报/周报/月报自动生成 |
125
- | 团队沟通分析 | `yunke-crm-team-analysis` | 团队沟通分析长文报告 |
126
-
127
- 这些技能随安装包分发(`skillshub.list` 里 `source` 为 `bundled`),版本与 CLI 绑定,
128
- 不能单独热更。
129
-
130
- ### 安装目录
131
-
132
- 技能文件写入 skillshub 配置的安装目录,可用 `yunke skillshub.info` 查询实际路径(默认 `~/.openclaw/workspace/skills/`,随所用智能体的配置而定)。
133
-
134
- ### 安装 / 升级 / 查看技能
135
-
136
- ```bash
137
- # 安装技能(默认技能之外的,如 agenphone 远程控制 Android 手机,先 search 找到再装)
138
- yunke skillshub.search --keyword <关键词>
139
- yunke skillshub.install --slug <slug>
140
-
141
- # 升级单个或全部已安装技能
142
- yunke skillshub.upgrade --slug yunke-crm
143
- yunke skillshub.upgrade
144
-
145
- # 查看已安装技能及安装路径
146
- yunke skillshub.list
147
- ```
148
-
149
- ### 安装后使用
150
-
151
- 技能安装完成后,加载其安装目录下的 `SKILL.md` 即可开始使用(各技能的安装路径见 `yunke skillshub.list` 输出)。
152
-
153
- > 业务 skill 只负责"场景 → 该调哪些命令、按什么顺序、有哪些坑";参数与返回值**一律**用
154
- > `yunke schema.detail --command <命令名>` 现场查。skill 里出现的参数只用来表达场景效果,
155
- > 不是参数清单——不一致时以 `schema.detail` 为准。
156
-
157
- > 如果用户要求使用某项业务功能但对应技能未安装,先引导安装再继续。
158
-
159
- ---
160
-
161
- ## 常见错误
162
-
163
- | 错误码 | 解决方案 |
164
- |--------|---------|
165
- | `COMMAND_NOT_FOUND` | `yunke schema` 确认命令名 |
166
- | `VALIDATION_FAILED` | `schema.detail` 查看参数类型 |
167
- | `EXECUTION_FAILED` | 读 `error` 字段,检查认证状态 |
@@ -1,138 +0,0 @@
1
- ---
2
- name: yunke-crm
3
- description: "通过 yunke 操作云客 CRM:登录认证、组织架构(部门树、员工搜索)、客户列表、员工报表统计、通话与定位。CRM 取数的命令族入口;参数与返回值运行时查 schema。使用前需确保 yunke 已安装。"
4
- metadata:
5
- requires:
6
- bins: ["yunke"]
7
- ---
8
-
9
- # yunke-crm
10
-
11
- 通过 yunke 的 crm 插件操作云客 CRM。
12
-
13
- 本 skill 只讲**登录状态机、场景与命令的对应关系、语义坑**——参数名、类型、枚举、默认值和返回结构
14
- 不在这里抄,一律运行时查。
15
-
16
- > **版本门槛:** 依赖 yunke-cli **≥ 3.0.0**(`schema.detail` 的参数/返回值直接来自上游契约)。
17
- > 检查 `yunke --version`(输出含 `version` / `flavor` / `package`),升级以安装包为准
18
- > (SaaS 生产包可 `yunke self.update` 检查)。
19
-
20
- > **前置:** 先读 `../yunke-cli-skills/SKILL.md`(JSON 信封、与用户交互的规则、命令发现)。
21
-
22
- ## 参数与返回值:一律运行时查
23
-
24
- ```bash
25
- yunke schema.detail --command <命令名>
26
- ```
27
-
28
- - **参数名不许猜。** 各命令族没有统一惯例(部门维度就有 `depart_id` / `department_id` / `dpt_id` / `department_ids` 几种写法)。猜错会被直接拒绝(`VALIDATION_FAILED`,`details.available` 就是该命令的可用参数清单)——一次查全,比逐个试错快。
29
- - 返回值以上面的 `returns`(上游 outputSchema)为准。本文只记**命名误导**和**跨命令依赖**。
30
- - 可选参数不要凭印象补默认值,留空让上游默认值生效。
31
-
32
- ## 登录流程(浏览器页面登录)
33
-
34
- yunke-crm 使用浏览器 OAuth 页面登录,凭证写入 `~/.yunke/crm.json`。**不要在聊天里向用户索要手机号或验证码**,登录全部在浏览器页面上完成。
35
-
36
- ### 第一步:检查登录状态
37
-
38
- ```bash
39
- yunke crm.auth.status
40
- ```
41
-
42
- 输出是标准 JSON 信封:exit 0 + `success=true` + `data.message` 为 `Logged in as <用户名>` = 已登录,跳过后续步骤。exit 1 时看 `error.code`:`AUTH_REQUIRED` = 未登录,`AUTH_REFRESH_FAILED` = 续期失败、需重新登录(`error.details.reauth_commands` 列出可用的登录命令)。token 到期前 5 分钟该命令会自动尝试刷新,刷新成功同样 exit 0。
43
-
44
- ### 第二步:发起登录
45
-
46
- 默认走浏览器回调登录:
47
-
48
- ```bash
49
- yunke crm.auth.login-web
50
- ```
51
-
52
- 该命令自动打开系统浏览器进入授权页,并**阻塞等待用户在页面上完成授权(最长约 5 分钟)**。执行后立即告知用户「浏览器已打开登录页,请在页面上完成登录」,然后等待命令退出;浏览器未弹出时,stdout 打印的授权 URL 可转给用户手动打开。
53
-
54
- 宿主无法接收本地回调(如百度搭子)时,改用设备码登录:
55
-
56
- ```bash
57
- yunke crm.auth.login-device-code
58
- ```
59
-
60
- 命令首行打印授权链接、次行打印 `user_code`,并持续轮询直到用户在任意设备上打开链接完成授权(最长 15 分钟)。把链接和用户码转给用户即可,**不要在聊天里索要账号密码**。结束后追加一行与 `crm.auth.status` 同形的 JSON 信封(成功 `success=true`;失败 `error.code` 为 `AUTH_REQUIRED` / `CONFIG_ERROR` / `EXECUTION_FAILED`,`error.details.reason` 给出 `access_denied` / `timeout` 等具体原因),同时以退出码 0/1 判定成败。
61
-
62
- ### 第三步:判定登录结果
63
-
64
- - 退出码 0 → 再执行 `crm.auth.status` 复查,exit 0 + `data.message` 为 `Logged in as <名字>` 即登录成功(顺带拿到用户名)
65
- - 退出码 1 → 读 stderr 原因转告用户
66
-
67
- ### 登出
68
-
69
- ```bash
70
- yunke crm.auth.logout
71
- ```
72
-
73
- 幂等,未登录时执行也成功。
74
-
75
- > **注意:** `crm.auth.login-web` 的输出**不是 JSON 信封**(首行为授权 URL),以退出码判定登录成败;`crm.auth.login-device-code` 首个输出是裸授权 URL,轮询结束后追加一行 JSON 信封;`crm.auth.status` 是 JSON 信封,`data.message` 保留 `Logged in as` 文本,同时以退出码表示登录态。等待期间命令长时间不返回是正常的(用户需要在页面上操作),不要提前终止或重试。
76
-
77
- ---
78
-
79
- ## 场景 → 命令
80
-
81
- | 用户想做什么 | 走哪条命令 |
82
- |---|---|
83
- | 登录 / 查登录态 | `crm.auth.status` → 未登录则 `crm.auth.login-web`(宿主无本地回调时用 `crm.auth.login-device-code`)→ 再 `crm.auth.status` 复查 |
84
- | 看部门结构 | `crm.org.department-tree`(单级展开,逐级下钻;要人员节点时传 `show_user: true`) |
85
- | 找员工 / 找部门 | `crm.org.search`(用搜索类型区分员工与部门) |
86
- | 查客户 / 搜客户 | `crm.customer.list`(关键词、手机号、客户名、时间等过滤键查 schema) |
87
- | 查某人跟进的客户 | `crm.customer.list`(只能按跟进人维度,见下方 `user_query` 坑) |
88
- | 只要客户总数 | `crm.customer.list`(有只取总数的开关) |
89
- | 解读自定义字段 / 列定义 | `crm.customer.default-head`(与 `customer.list` 成对) |
90
- | 部门维度报表 | `crm.report.custom-report-list`(维度开关查 schema) |
91
- | 员工维度报表 | `crm.report.custom-report-list`(切到员工维度) |
92
- | 报表列定义 / 启用隐藏列 | `crm.report.custom-report-columns` / `crm.report.set-custom-report-columns` |
93
- | 通话记录 → 录音转写 | `crm.call.log-list` → `crm.call.asr-result` |
94
- | 部门 / 员工定位轨迹 | `crm.location.everyone-last-location` / `crm.location.record-list` |
95
- | 客户 / 员工 AI 分析 | `crm.ai.*` 家族,用 `yunke schema` 看有哪些 |
96
- | 企业微信(客户、会话、客户群、敏感词、朋友圈) | 见 `../yunke-wecom/SKILL.md` |
97
- | 更多命令(短信、风控、录音…) | `yunke schema` 按插件分组浏览 |
98
-
99
- ## 语义坑(schema 里看不出来的)
100
-
101
- ### 组织架构
102
-
103
- - `department-tree` 的 `data.list` 里部门与人员**节点同构**,靠 `isDept` 区分;但**默认只返回部门节点**,要人员节点必须传 `show_user: true`。没有 `departments` / `employees` 两个分组数组。
104
- - `org.search` 的 `data.list` 同样是节点数组,默认 `search_type=3`,部门与人员都会返回。
105
- - 每项的 `id` 就是后续命令要的部门 ID / 员工 ID,`pid` 是父节点。
106
- - `department-tree` 只展开一级,不递归。
107
- - `org.search` 的 `search_type`:**1=仅部门 2=仅员工 3=全部(默认)**。找员工时传 2,否则会被同名部门干扰。
108
-
109
- ### 客户
110
-
111
- - `customer.default-head` 给列定义(`defaultHead`)、`customer.list` 给数据行,**成对使用**。
112
- - 行内 `customFieldValues[]` 的 `fieldName` 已由服务端回填,一般直接可读;需要完整列清单/字段类型时查 `default-head`,其自定义列的 `fieldCode` 就是 `fieldId` 的字符串形式。
113
- - **分页深度上限**:`pageIndex × pageSize > 100000` 会被拒,深翻页改用时间/部门/跟进人收窄。
114
- - 统计客户数或分布**必须取全再汇总**,不能只看第一页。
115
- - 手机号/客户名可能带 `*`,是公司脱敏配置,不是数据错误。
116
- - `user_query`(跟进人 OR 协作人)**上游未承接该过滤键**,传了不生效;协作人维度只能用跟进人维度近似。
117
-
118
- ### 员工报表
119
-
120
- - `custom-report-list` 的行内 key 是驼峰 `fieldCode`,且**不返回列定义**;`fieldCode ↔ showName` 要到 `custom-report-columns` 的 `customShowHeads[]` 里对照。开场取一次列配置,后续翻页复用。
121
- - `data.maxRoute` = **总页数**(名字容易误读成「最大路由」)。
122
- - 取数前若需要的字段被隐藏,先用 `set-custom-report-columns` 启用(整包传列配置,其余字段保持不变)。
123
-
124
- ### 通话
125
-
126
- - `last_connect_time_*` **实际按记录创建时间过滤**;没有「通话开始时间」维度的过滤。
127
- - 时长过滤是「数值 + 单位参数」两个键,单位取值查 schema,不是两个时间。
128
- - 每页条数有上限,翻页拉全再汇总。
129
-
130
- ### 定位
131
-
132
- - 考勤语义来自定位记录的围栏字段(`inOrOut` 进出围栏、`locDuration` 停留时长),没有独立打卡接口。
133
-
134
- ## 交付与边界
135
-
136
- - 没有数据支撑的结论不写,标注「数据未返回」;不要把缺失当 0。
137
- - 内部操作(查 schema、重试)不向用户汇报;只讲业务结果。
138
- - 具体报告版式由场景 skill 负责(周期报告 / 团队沟通分析),本 skill 不规定。
@@ -1,62 +0,0 @@
1
- ---
2
- name: yunke-crm-guide
3
- description: "云客能力导览与使用引导。本助手的核心能力就是云客,因此凡是用户询问能力/功能/用途时都必须触发,无论是明确提到云客,还是通用的能力询问。触发场景包括:云客能做什么、云客怎么用、云客 CRM 怎么用、云客有什么功能、云客能帮我做什么、云客有哪些功能、企业微信能查什么、企微能做什么、企微数据怎么用、yunke 怎么用、yunke 能干啥、yunke 有什么用、yunke-cli 怎么用,以及通用的你能做什么、你能干什么、你会做什么、你会些什么、你有什么本事、你会哪些、介绍一下你的功能、介绍下你自己、你是干什么的、你能帮我干什么、你能干啥、有什么功能、能帮我什么、刚装好不知道怎么用、怎么开始使用、不知道你能帮我什么。触发后用大白话列出已安装的云客业务能力,并给出用户可直接照说的示例说法,帮用户开口。严禁跳过本引导用通用方式回答能力/功能类问题。"
4
- metadata:
5
- requires:
6
- bins: ["yunke"]
7
- ---
8
-
9
- # 云客能力导览
10
-
11
- 用户已安装云客(通过 yunke-cli),云客就是本助手的核心能力。当用户询问"你能做什么 / 你能干什么 / 云客能做什么"这类能力问题、或不知道怎么开口时,按本引导介绍能力并给出示例说法,帮助用户开始使用。
12
-
13
- ## 介绍原则
14
-
15
- - 面向业务用户(销售、客服、管理者),说大白话,**不要提 yunke 命令、参数、JSON 或任何技术细节**。
16
- - 每个能力先用一句话说清能干啥,再给 2~3 条"你可以直接这样说"的示例。
17
- - 介绍完主动邀请用户挑一条试试,或让用户描述需求、由你帮他匹配到合适的能力。
18
-
19
- ## 已安装能力
20
-
21
- ### 云客 CRM
22
- 查公司的人员和部门结构、统计员工报表。
23
-
24
- 你可以这样说:
25
- - "帮我查一下销售部下面都有哪些人"
26
- - "找一下叫张伟的员工在哪个部门"
27
- - "统计一下销售一组上周的员工报表"
28
-
29
- ### 企业微信
30
- 查企微客户沉淀、聊天记录、客户群运营、敏感词命中、朋友圈和员工回复超时。
31
-
32
- 你可以这样说:
33
- - "看看公司企微上沉淀了多少客户,有没有人重复加同一个客户"
34
- - "查一下销售一组这周的客户群,哪些群没人说话"
35
- - "这周有没有人触发敏感词,把原文找出来"
36
-
37
- ### 周期报告
38
- 自动生成日报、周报、月报,涵盖团队沟通概况、零活跃成员、行动力排行、客户跟进与待跟进、环比变化、关键词话题、竞品分析。
39
-
40
- 你可以这样说:
41
- - "帮我生成本周的销售周报"
42
- - "出一份昨天的每日简报"
43
- - "做一份上月的月报,重点看团队沟通"
44
-
45
- ### 团队沟通分析
46
- 基于通话录音、企业微信沟通、考勤定位等数据,生成团队沟通分析报告,识别风险话术、优秀话术标杆、工作量饱和度,并给出管理建议(员工信息默认匿名)。
47
-
48
- 你可以这样说:
49
- - "分析一下销售团队这周的沟通情况"
50
- - "帮我看看团队里有没有违规话术"
51
- - "这周谁的工作量最饱和、谁最闲"
52
-
53
- ## 引导之后
54
-
55
- - 用户挑了某条示例 → 直接进入对应能力帮他完成,不要再重复引导。
56
- - 用户说不清要什么 → 问一句"你主要想查人员数据、企微客户和聊天、统计报表、还是出分析报告?"帮他选。
57
- - 用户想要清单里没有的能力 → 告诉他"可以说'帮我找个能做 XX 的技能'来搜索更多技能"。
58
-
59
- ## 边界
60
-
61
- - 本引导只负责"能做什么 + 怎么开口"。具体执行流程由对应能力自身负责,不要在这里展开。
62
- - 首次使用云客功能通常要先登录(会打开浏览器登录页,在页面上完成即可,不需要在聊天里提供手机号或验证码)。如果用户选了某项能力但还没登录,进入该能力后按它的流程引导登录即可。
@@ -1,126 +0,0 @@
1
- ---
2
- name: yunke-crm-periodic-report
3
- description: "用 yunke 拉取真实 CRM 数据,生成周期报告——每日简报、每周报告、每月/专项报告。用户提到日报、周报、月报、周期报告、自动简报、团队沟通概况、零活跃、行动力 TOP/Bottom、客户跟进与待跟进、环比、关键词话题、竞品分析、市场需求、营销活动反馈时使用。前置:需先完成 CRM 登录(浏览器页面登录)。"
4
- metadata:
5
- requires:
6
- bins: ["yunke"]
7
- ---
8
-
9
- # 云客周期报告(CLI 数据驱动)
10
-
11
- > **版本门槛:** 依赖 yunke-cli **≥ 3.0.0**(`schema.detail` 的参数/返回值来自上游契约)。
12
- > 检查 `yunke --version`,升级以安装包为准(SaaS 生产包可 `yunke self.update` 检查)。
13
-
14
- > **前置依赖**
15
- > - 登录状态机与命令族总览见 `../yunke-crm/SKILL.md`;必须先登录(`yunke crm.auth.status` 显示已登录即可,未登录走 `crm.auth.login-web` 浏览器页面登录;宿主无本地回调时用 `crm.auth.login-device-code`)。
16
- > - **本文只写顺序与判据,不抄参数。** 首次调用某命令前先跑
17
- > `yunke schema.detail --command <命令名>`,一次拿全参数名/类型/枚举/默认值。
18
-
19
- ## 前置:加载参考资料(必须)
20
-
21
- 执行任何取数或生成报告之前,**必须先读以下两份 reference**,否则语义坑会踩、报告版式会偏:
22
-
23
- - `references/cli-call-map.md` —— 命令到报告章节的映射、调用顺序、语义坑
24
- - `references/product-spec-snippets.md` —— 产品文档版式规范(日报/周报/月报结构、章节顺序、风险分级标注)
25
-
26
- ## 目标
27
-
28
- 把「周期报告自动生成」落到可执行流程:用 CRM 命令取数 → 对齐报告类型与时间窗 → 按固定版式输出中文管理向报告。
29
-
30
- ## 报告类型与时间窗
31
-
32
- | 类型 | 频率 | 统计时间窗 |
33
- |------|------|-----------|
34
- | 每日简报 | 每工作日 | 上一自然日或用户指定"昨日" |
35
- | 每周报告 | 每周 | 上周一至上周日 |
36
- | 每月报告 | 次月 1 日 | 上一自然月 |
37
- | 专项报告 | 按需 | 用户指定主题与时间 |
38
-
39
- > **时间参数各命令族不统一**(键名和格式都不同:报表类多为纯日期,AI 分析类多数要求带时分秒且必填)。
40
- > 不要凭记忆写,按 `schema.detail` 的键名与格式传。
41
-
42
- ## 执行顺序(严格按序)
43
-
44
- ### Step 1:确认范围
45
-
46
- 报告类型、部门(名称或 ID)、时间窗、是否全团队分页拉齐。
47
-
48
- ### Step 2:解析部门 ID(若未知)
49
-
50
- ```bash
51
- # 逐级下钻:不传部门查根节点,再展开到目标部门
52
- yunke crm.org.department-tree
53
-
54
- # 或关键词搜索部门/员工
55
- yunke crm.org.search
56
- ```
57
-
58
- 部门树返回节点数组,部门与人员节点同构、靠 `isDept` 区分;`id` 即后续要传的部门 ID。
59
- 下钻到某个部门要传部门 ID(键名查 `schema.detail`);默认只返回部门节点,
60
- 需要员工节点时加 `show_user: true`。
61
-
62
- ### Step 3:核心团队洞察(几乎必调)—— 自定义报表三步法
63
-
64
- 完整说明见 `references/cli-call-map.md`。
65
-
66
- 1. 取列配置:
67
- ```bash
68
- yunke crm.report.custom-report-columns
69
- ```
70
- 2. 若需要的字段被隐藏,启用它(其余列保持不变,整包传回):
71
- ```bash
72
- yunke crm.report.set-custom-report-columns
73
- ```
74
- 3. 取数(部门维度 / 员工维度由开关切换,取值查 schema):
75
- ```bash
76
- yunke crm.report.custom-report-list
77
- ```
78
-
79
- - **判据**:逐人明细用员工维度;只要汇总用部门维度。
80
- - **分页铁律**:`page_size` 可放到 100;`total` > 当前页记录数就继续翻页,拉完全量再汇总。严禁只看第一页就下结论。
81
- - **字段解读**:行集是 `list`(不是 `rows`),每个 key 是驼峰 `fieldCode`;含义回到第 1 步的 `customShowHeads[]` 按 `fieldCode ↔ showName` 对照——`custom-report-list` 本身不返回列定义。
82
-
83
- ### Step 4:客户侧概况与环比(日报/周报强烈建议)
84
-
85
- ```bash
86
- yunke crm.report.customer-metrics
87
- ```
88
-
89
- - `time_range` **必填**,按报告周期选:**2=昨日 3=近7日 4=近15日 5=近30日**;不传直接 `VALIDATION_FAILED`。
90
- - 用返回里的 `compareData` 写"环比"类表述(它已算好差值/比率,不要自己用两期数据重算)。
91
-
92
- ### Step 5:关键词与话题(周报月报、专项"话术/舆情")
93
-
94
- ```bash
95
- yunke crm.ai.communication-keywords-list
96
- ```
97
-
98
- - 窄时间窗、小 `page_size`,避免大文本撑爆上下文。
99
- - 行内 `keywords` / `mood` / `content` 是 **JSON 字符串**,解析后再取词;只基于解析结果归纳,勿编造未出现的词。
100
-
101
- ### Step 6:市场与竞品洞察(周报/月报/专项"市场分析")
102
-
103
- ```bash
104
- yunke crm.ai.competitor-analyse-list
105
- ```
106
-
107
- - 返回是**逐次沟通行**(不是按竞品聚合),做竞品提及排行需自行按 `competitorName` 聚合。
108
- - 顶层出现 `_pagination` 提示时说明还有数据,按提示翻页。
109
- - 结合 Step 5 的需求类关键词做市场趋势。
110
-
111
- ## 输出版式
112
-
113
- **严格按 `references/product-spec-snippets.md` 的产品文档结构输出**,不得自行编造章节顺序。要点:
114
-
115
- - **每日简报**:概况 / 需关注事项(🔴🟡🟠)/ 今日亮点
116
- - **每周报告八章**:执行摘要 → 沟通效率 → 协作密度 → 风险预警 → 工作量饱和度 → 话术标杆 → 违规话术 → 行动建议;外加"市场与竞品洞察"章节
117
- - 无数据支撑的句子不写,或标为"数据未返回"
118
-
119
- ## 自检清单
120
-
121
- - [ ] 已读 `references/cli-call-map.md` 和 `references/product-spec-snippets.md`
122
- - [ ] 报告类型、部门、时间窗在文首已写明
123
- - [ ] 章节结构与 product-spec-snippets 一致
124
- - [ ] 量化结论可追溯到某次 CLI 返回;未返回则标注缺失
125
- - [ ] `custom-report-list` 已翻完所有分页
126
- - [ ] 风险项用 🔴🟡🟠 分级标注
@@ -1,73 +0,0 @@
1
- ---
2
- name: cli-call-map
3
- skill: yunke-crm-periodic-report
4
- ---
5
-
6
- # 命令 → 周期报告映射
7
-
8
- 把 CRM 命令映射到周期报告各章节,并给出**调用顺序、判据与语义坑**。
9
-
10
- > **参数与返回值事实源:** 各命令的参数名、类型、枚举、默认值和返回结构一律以
11
- > `yunke schema.detail --command <命令名>` 的实时输出为准(来自上游契约)。本文只记
12
- > 跨命令差异、命名误导和调用顺序——**不抄参数表**。
13
- >
14
- > **通用规则:** 未知参数会被直接拒绝(`VALIDATION_FAILED`,`details.available` 是可用参数清单)。
15
- > 各命令族的部门键(`depart_id` / `department_id` / `dpt_id` / `department_ids`)和时间键
16
- > (`starttime` / `start_time` / `last_connect_time_*` …)都不一样,不要凭记忆写。
17
-
18
- ## 自定义报表三步法(核心数据源)
19
-
20
- 员工自定义报表覆盖短信、通话(呼出呼入/接通率/时长)等多维度绩效,绝大多数员工行为统计都应优先走这里。
21
-
22
- 1. **`crm.report.custom-report-columns`** —— 取列配置。
23
- 返回 `customShowHeads[]`,每项含中文名、`fieldCode`、`hiddens`、模块、类型。
24
- `fieldCode ↔ showName` 就是后面 `list` 行集的中文对照表;开场取一次,翻页复用。
25
- 2. **`crm.report.set-custom-report-columns`** —— 仅当需要的字段 `hiddens` 为隐藏时调用。
26
- 把第 1 步的结果改好 `hiddens` 后**整包传回**,其余字段保持不变。
27
- 3. **`crm.report.custom-report-list`** —— 取数。
28
- - 维度开关:0=部门维度 / 1=员工维度。
29
- - 返回 `{total, maxRoute, list[]}`(`maxRoute` = **总页数**,不是"最大路由")。
30
- - 行内 key 是驼峰 `fieldCode`(如 `callOutVolume`),**本命令不返回列定义**。
31
- - **分页铁律**:`total` > 当前页记录数就继续翻页,拉完全量再汇总。
32
-
33
- ## 核心工具
34
-
35
- ### crm.report.customer-metrics
36
-
37
- - 返回 `currentStats.customerMetrics`(新增/已跟进/待跟进/成交/总数)+ `compareStats`(上期)+ `compareData`(**已算好的环比**,形如 `{"new_count":{"diffCount":47,"diffRate":"94.00%"}}`)。
38
- - **对应报告块**:日报/周报的客户跟进、待跟进预警。环比直接用 `compareData`,不要自己用两期数据重算。
39
-
40
- ### crm.ai.communication-keywords-list
41
-
42
- - 行集在 `list` 键下;行内 `keywords` / `mood` / `content` 是 **JSON 字符串**,解析后取词。
43
- - `keyword_types` 是关键词**类别**短语过滤(实测:痛点/需求/情绪有效,具体关键词文本无效)。
44
- - **建议**:小 `page_size`、窄时间窗。测试部门可能 `total=0`,如实写"数据未返回"。
45
- - **对应报告块**:周报关键词与话题、专项报告。
46
-
47
- ### crm.org.department-tree
48
-
49
- - 部门名 → 部门 ID 的入口;`list` 是节点数组,部门与人员节点同构、靠 `isDept` 区分。
50
- - **默认只返回部门节点**;需要员工 ID 时加 `show_user: true`。
51
- - **对应报告块**:所有需要部门 ID 的前置步骤(Step 2)。
52
-
53
- ## 市场与竞品洞察
54
-
55
- ### crm.ai.competitor-analyse-list
56
-
57
- - 返回为**逐次沟通行**(不是按竞品聚合):`competitorName` 是命中的竞品名,优劣势明细需解析行内 `content` JSON 的竞品分析段。
58
- - 做"竞品提及排行"要自行按 `competitorName` 聚合;顶层带 `_pagination` 时说明还有数据。
59
- - **建议**:结合 `communication-keywords-list` 的需求类关键词共同支撑市场趋势。
60
- - **对应报告块**:周报/月报「市场与竞品洞察」。
61
-
62
- ## 可选扩展(专项或用户明确要求时再调)
63
-
64
- - 客户意向专题:`crm.ai.customer-intention-list`(无时间参数,用意向档位与分页筛选)
65
- - 员工情绪专题:`crm.ai.employee-analyse-list`(用情绪类型过滤)
66
- - 客户异议 / 痛点 / 问题专题:`crm.ai.customer-objection-list`、`crm.ai.customer-pain-list`、`crm.ai.customer-issue-list`
67
- - 质检:`crm.ai.sop-quality-analyse-list`
68
- - 通话清单级证据:`crm.call.log-list`(日期过滤实际按记录创建时间,没有"通话开始时间"维度)
69
- - 设备使用专题:`crm.report.device-statistics`、`crm.report.device-app-statistics-list`
70
-
71
- ## 与产品「违规话术」的差距
72
-
73
- 当前没有独立的「质检违规」数据源时:只用关键词与沟通分析字段做线索汇总,并明确声明需人工/质检系统复核,**不得直接定性为"已违规"**。
@@ -1,39 +0,0 @@
1
- ---
2
- name: product-spec-snippets
3
- skill: yunke-crm-periodic-report
4
- ---
5
-
6
- # 周期报告 — 产品文档摘录
7
-
8
- 摘自《中枢产品设计文档》模块五,供版式对齐用。
9
-
10
- ## 报告类型(7.2)
11
-
12
- | 报告类型 | 生成频率 | 核心内容 |
13
- |---------|----------|----------|
14
- | 每日简报 | 每工作日 | 昨日团队沟通概况 + 异常项 |
15
- | 每周报告 | 每周 | 周维度全量分析 + 趋势对比 |
16
- | 每月报告 | 每月 | 月度深度分析 + 改进追踪 |
17
- | 专项报告 | 按需 | 特定主题深度分析 |
18
-
19
- ## 每日简报结构(7.3)
20
-
21
- - 标题:`[部门] · 每日沟通简报 · YYYY-MM-DD`
22
- - **今日概况**:团队总沟通量/环比、活跃员工占比、零活跃人数、新增客户联系、待跟进客户(如数据支持)
23
- - **需关注事项**:按严重程度 🔴🟡🟠 列出(零沟通、高意向未跟进、指标异常等)
24
- - **今日亮点**:正向案例 1~3 条
25
-
26
- ## 每周报告结构(7.4)
27
-
28
- 1. 执行摘要(3~5 条关键发现)
29
- 2. 沟通效率指标(员工维度 + 异常标注)
30
- 3. 协作密度分析(高/中/低/零协作分层)
31
- 4. 风险识别预警(高/中风险分级)
32
- 5. 工作量饱和度(分层表 + 资源分配建议)
33
- 6. 沟通话术标杆(优秀案例 3~5 个)
34
- 7. 违规话术识别(类型 + 处理建议)
35
- 8. 行动建议(立即行动 / 短期改进 / 长期优化)
36
-
37
- ## 存档与推送(7.5)
38
-
39
- 报告可备注:类型(日报/周报/月报/专项)、生成时间、可导出 PDF/飞书推送——实现状态以实际系统为准,本 skill 仅生成正文内容。