---
name: vipthink-crm-recording
description: "豌豆思维CRM录音分析技能。从CRM调取通话录音,通过ASR转文字+AI质检,生成话术评分、客户意向、改进建议等报告。当用户提到以下任何内容时立即使用:CRM录音、录音分析、通话质检、销售录音、话术分析、CC复盘、团队录音、录音转文字、ASR转录、质检评分、豌豆思维、vipthink、语义分析、意图分析、录音报告、录音排名、优秀录音、差录音、录音培训、录音标杆、录音改进、录音总结、录音评价、录音数据、通话数据、有效通话、录音时长、拨通时长、CC表现、渠道分析、客户意向、对话质量、听听录音、看看通话、录音调取、录音下载、录音抽查、批量分析、录音URL、客服录音、电销录音、外呼录音、家长录音、试听录音、签约录音、跟进录音、回访录音。"
豌豆思维CRM1.0系统 - 录音调用与分析
概述
本技能封装了从VIPThink CRM系统调取电话录音并进行智能分析的完整操作流程,包括:
第一阶段:录音调取(CRM操作)
- 团队筛选(通过el-cascader级联选择器)
- 筛选条件选择(如今日完课)
- 定位学生并打开详情
- 切换到电话标签页
- 筛选有效接通录音(>30秒)
- 获取录音URL
第二阶段:语音分析(API调用)
- 阿里云ASR语音转录(Paraformer-v2,支持粤语/普通话)
- AI质检分析(Qwen-Plus,多维度评分)
- 批量分析与多维度报告生成
触发后第一轮对话
当本skill被触发时,必须先向用户确认以下信息后再执行任何CRM或API操作:
- 分析范围:"请确认要分析哪个团队?"
n - 港澳团队(默认)n - 北京上海团队`n - 台湾团队 - 筛选条件:"要分析哪类学生?"
- 今日完课(默认)
- 今日新分配
- 今日需回访
- 未约课
- 今日上课
- 课后未拨通 - 分析模式:
- 单条录音分析(默认)
- 批量分析(需确认数量上限,建议≤20条/批) - 输出格式:
- Markdown报告(默认)
- Excel报表
用户确认后,根据选择拼接CRM URL并开始执行。
适用场景
- 电销团队录音质检分析
- 客服通话质量抽查
- 销售话术复盘
- 团队通话数据分析
- 批量录音自动化质检
核心工具
CRM操作工具(通过run_mcp调用integrated_browser)
| 工具 | 用途 |
|---|---|
| browser_evaluate | 执行JavaScript,操作Vue动态渲染内容 |
| browser_snapshot | 获取页面快照,定位元素 |
| browser_wait_for | 等待页面加载/弹窗出现 |
| browser_tabs | 管理浏览器标签页 |
分析服务(Python脚本调用)
| 服务 | 用途 | 详情 |
|---|---|---|
| 阿里云DashScope ASR | 语音转录 | Paraformer-v2模型,支持粤语+普通话,说话人分离 |
| 阿里云DashScope LLM | 质检分析 | Qwen-Plus模型,结构化JSON输出 |
快速开始
一、CRM录音调取
团队ID映射
| 团队 | admin_group_list |n|------|-----------------|n| 港澳团队 | 8,70,172 |n| 北京上海团队 | 8,70,154 |n| 台湾团队 | 8,70,180|
筛选条件类型(main_type)
| 显示名称 | URL值 |
|---|---|
| 全部 | all |
| 今日新分配 | today_new |
| 今日需回访 | today_callback |
| 未约课 | no_lesson |
| 今日上课 | today_lesson |
| 今日完课 | today_lesson_end |
| 课后未拨通 | after_class_no_call |
调用流程(6步)
Step 1: 导航到CRM页面
URL: https://cc.vipthink.cn/#/student/cc_m_list?admin_group_list=8,70,172&main_type=today_lesson_endnn 注:北京上海团队使用 admin_group_list=8,70,154`n 注:台湾团队使用 admin_group_list=8,70,180
Step 2: 点击学生姓名(browser_evaluate)
var rows = document.querySelectorAll('.el-table__body-wrapper tbody tr');
rows[0].querySelector('td:nth-child(4) .el-button--text').click();
Step 3: 切换到电话标签(browser_evaluate)
var dialog = document.querySelectorAll('.el-dialog__wrapper')[11];
dialog.querySelectorAll('.el-tabs__item')[2].click();
Step 4: 筛选有效通话(>30秒)
列结构: 0=复选框, 1=拨打时间, 2=接听时间, 3=拨打人, 4=渠道, 5=拨通时长, 6=通话时长, 7=是否有效
条件: isValid === '是' && totalSeconds > 30
Step 5: 获取录音URL(browser_evaluate)
// 方法1:从audio元素获取
var audio = document.querySelector('audio');
var url = audio ? audio.src : null;
// 方法2:从下载按钮获取
if (!url) {
var btns = document.querySelectorAll('.el-button--text');
btns.forEach(function(btn) {
if (btn.textContent.includes('下载')) {
url = btn.getAttribute('href') || btn.onclick.toString().match(/'(https?:\/\/[^']+)'/);
}
});
}
// 方法3:从网络请求拦截
if (!url) {
var entries = performance.getEntriesByType('resource');
entries.forEach(function(e) {
if (e.name.includes('.mp3') || e.name.includes('.wav') || e.name.includes('oss')) {
url = e.name;
}
});
}
Step 6: 播放/验证录音
点击小喇叭播放验证
二、语音分析
API配置
| 配置项 | 值 |
|---|---|
| DashScope API Key | sk-99f9364af58c49d5b927f43dc08e2e5c |
| ASR模型 | paraformer-v2 |
| ASR端点 | https://dashscope.aliyuncs.com/api/v1/services/audio/asr/transcription |
| 质检模型 | qwen-plus |
| 质检端点 | https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions |
ASR转录参数
model: paraformer-v2
input: file_urls: [录音URL]
parameters:
channel_id: [0]
language_hints: [zh, yue]
diarization_enabled: true
disfluency_removal_enabled: true
语言自动检测
在ASR转录前,通过以下方式判断录音语言,优化转录准确率:
- 查看学生所属渠道(港澳团队→粤语概率高)
- 查看CC名字(粤语名字→粤语概率高)
- 默认使用 language_hints: [zh, yue] 让ASR自动识别
- 如果转录结果出现大量乱码或识别率<60%,尝试单独使用 language_hints: [yue] 或 [zh] 重试
质检分析输出格式
checkpoints: [{name, status(完成/未完成/部分完成), evidence, suggestion}]
score: 0-100
level: 优秀/合格/待改进
summary: 整体评价
customer_intent: 高/中/低
conversation_quality: 流畅/一般/生硬
key_phrases: [关键话术]
improvements: [改进建议]
三、批量分析报告
报告包含8大模块:
| 模块 | 内容 |
|---|---|
| 总体概况 | 录音数、平均分、质量分布、趋势对比 |
| CC维度分析 | CC排名、详细表现、薄弱项识别 |
| 渠道维度分析 | 各渠道平均分、标准差 |
| 质检项完成情况 | 完成率可视化、薄弱项典型案例 |
| 客户意向分析 | 高/中/低意向分布及跟进建议 |
| 对话质量分析 | 流畅/一般/生硬分布 |
| 录音详细分析 | 每条录音完整质检项、关键话术、改进建议 |
| 行动建议 | 高意向客户清单、需补救CC、培训建议 |
检查点
在以下关键节点必须暂停并等待用户确认:
- [CP1] 分析前确认:展示筛选结果(学生数量、有效通话数量),用户确认后再开始分析
- [CP2] 批量分析前确认:当有效通话>10条时,提醒用户分析时间和API消耗(约30秒/条),确认后继续
- [CP3] 报告生成后确认:展示报告摘要,询问用户是否需要深入分析某条录音或导出Excel
References
CRM操作
- ./references/team-selection.md - 团队筛选与URL参数详解
- ./references/student-detail.md - 学生详情弹窗操作指南
- ./references/recording-flow.md - 录音调取完整流程
语音分析
- ./references/asr-service.md - 阿里云ASR服务配置与调用
- ./references/qc-standards.md - 质检标准与评分规则
- ./references/batch-analysis.md - 批量分析流程与报告结构
脚本文件
| 脚本 | 用途 | 位置 |
|---|---|---|
| batch_recording_analyzer_v2.py | 批量分析主脚本(并行+多维度报告) | d:\Trae工作内容\日常项目\scripts\ |
| pre_class_recording_analyzer.py | 单条课前录音分析脚本 | d:\Trae工作内容\日常项目\scripts\ |
关键发现点
CRM表格结构(Element UI)
el-table > el-table__body-wrapper > tbody > tr > td
cell 0: 复选框, cell 1: 组别, cell 2: CC名字, cell 3: 学生姓名, cell 4: 学生ID
弹窗结构
el-dialog__wrapper > el-tabs > el-tabs__item: 跟进(0), 课程(1), 电话(2), 测网(3), 合同(4)
每行3个按钮: 听录音、下载录音、设为有效
JavaScript定位关键点
| 目标 | CSS选择器/方法 |
|---|---|
| 学生姓名按钮 | tr:nth-child(n) td:nth-child(4) .el-button--text |
| 电话标签 | .el-tabs__item:nth-child(3) |
| 听录音按钮 | tr:nth-child(n) .el-button--text |
| 小喇叭图标 | .icon-shengyin |
| 录音URL | audio元素src / 下载按钮href |
故障排除
CRM操作
| 问题 | 解决方案 |
|---|---|
| browser_evaluate返回null | 检查preload脚本;刷新页面后重试 |
| 学生姓名snapshot不可见 | 使用JavaScript直接操作,不要依赖snapshot |
| 弹窗未出现 | 等待2秒后检查;确认点击的是正确元素 |
| 录音未播放 | 检查audio元素src是否为空 |
| cascader遮挡 | 点击弹窗关闭按钮会自动关闭cascader |
| CRM页面改版/选择器失效 | 使用browser_snapshot重新获取页面结构,对比现有选择器,动态适配新的CSS选择器 |
| 日期设值后页面数据空白 | 使用箭头刷新法:点击右箭头前进一天→点击左箭头回到目标日期,触发Vue响应式刷新 |
| 只获取到第一页数据 | 滚动到底部检查分页组件,遍历所有页获取完整数据;注意筛选可见且非disabled的next按钮 |
语音分析
| 问题 | 解决方案 |
|---|---|
| ASR转录失败 | 检查录音URL是否过期(OSS签名7天有效);检查网络 |
| 质检分析返回404 | 确认使用 /compatible-mode/v1/ 端点 |
| API Key无效 | 确认使用DashScope API Key(sk-开头),非老版AccessKey |
| 粤语识别不准 | 确认language_hints包含yue |
| 转录乱码/识别率低 | 尝试单独使用 language_hints: [yue] 或 [zh] 重试 |
通用操作原则(学员列表 & 录音场景均适用)
原则1:日期筛选自我修复(箭头刷新法)
CRM的日期选择器使用Vue自定义组件,原生value setter无法触发Vue响应式更新。设值后页面数据可能为空白。
修复流程:
1. 通过原生setter或Vue emit设置目标日期值
2. 等待1-2秒检查页面数据是否加载
3. 如果数据为空白,执行箭头刷新:
- 点击右箭头(i.el-icon-arrow-right,位置约 y=131)前进一天
- 等待页面响应
- 再点击左箭头(i.el-icon-arrow-left,位置约 y=131)回到目标日期
- 页面会触发Vue响应式刷新,加载数据
4. 再次检查数据是否正常显示
5. 如果仍为空,重复步骤3最多2次
Playwright实现示例:
# 日期设值后检查是否空白
await page.wait_for_timeout(1500)
row_count = await page.locator('.el-table__body-wrapper .el-table__row').count()
if row_count == 0:
# 箭头刷新法:右→左触发Vue刷新
await page.locator('i.el-icon-arrow-right').first.click()
await page.wait_for_timeout(1000)
await page.locator('i.el-icon-arrow-left').first.click()
await page.wait_for_timeout(2000)
`
**browser_evaluate JS版本:**
```javascript
// 箭头刷新法 - JS版本
document.querySelector('i.el-icon-arrow-right').click();
// 等待1秒后点击左箭头回到目标日期
setTimeout(function() {
document.querySelector('i.el-icon-arrow-left').click();
}, 1000);
// 再等待2秒让数据加载
// 翻页检查 - JS版本
var totalText = document.querySelector('.el-pagination__total').textContent;
var totalPages = parseInt(totalText.match(/共 (\d+) 页/)[1]);
var nextPageBtns = document.querySelectorAll('.btn-next');
// 筛选可见且非disabled的按钮
for (var i = 0; i < nextPageBtns.length; i++) {
var btn = nextPageBtns[i];
if (!btn.disabled && btn.offsetParent !== null) {
btn.click();
break;
}
}
`````
### 原则2:数据全面性检查(翻页完整性)
CRM列表页面默认每页仅显示10条数据,实际数据可能有数十甚至上百条。**必须翻页获取全部数据,严禁只取第一页。**
**操作流程:**
1. 获取第一页数据后,滚动到页面底部检查分页组件
2. 读取分页信息:总条数、总页数、当前页码(`.el-pagination__total`等)
3. 如果总页数 > 1,逐页翻页获取所有数据
4. **翻页注意事项:**
- 页面可能存在多个`.btn-next`按钮(主分页 + 弹窗内分页),必须筛选**可见且非disabled**的按钮
- 每次翻页后等待2秒让数据加载完成
- 翻页前滚动到底部确保分页组件可见
- 获取的数据按唯一标识(如学员ID/录音ID)去重
**Playwright翻页实现示例:**
```python
all_data = []
for pg in range(1, max_pages + 1):
if pg > 1:
await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
await page.wait_for_timeout(500)
# 找到可见且非disabled的next按钮
next_btns = page.locator('.el-pagination button.btn-next')
for idx in range(await next_btns.count()):
btn = next_btns.nth(idx)
if not await btn.is_disabled():
box = await btn.bounding_box()
if box and box['y'] > 0:
await btn.click()
break
await page.wait_for_timeout(2000)
# 提取当前页数据...
# 按唯一ID去重
注意事项
- browser_evaluate是核心:Vue.js动态渲染的内容只有通过JavaScript才能可靠操作
- URL参数控制筛选:不同团队/筛选条件通过admin_group_list和main_type控制
- 等待加载:每次点击后等待1-2秒让Vue完成渲染
- 录音URL有时效:OSS签名URL有效期约7天
- API Key区分:DashScope API Key(sk-开头)用于ASR和质检,老版AccessKey不适用
- 并行限流:批量分析时建议max_workers=3,避免API限流
- 粤语支持:ASR需设置language_hints包含yue才能识别粤语
- 检查点必停:到达CP1/CP2/CP3时必须等待用户确认,不可自动跳过
- 日期筛选必须验证:设值后检查数据是否加载,空白时立即使用箭头刷新法修复
- 翻页必须完整:任何列表操作(学员列表/通话记录/录音列表)都必须检查分页并获取全部数据,不可只取首页
版本历史
| 日期 | 版本 | 内容 |
|---|---|---|
| 2026-05-08 | 1.0 | CRM录音调取技能(团队筛选+学生定位+录音播放) |
| 2026-05-09 | 2.0 | 新增语音分析能力(ASR转录+AI质检+批量报告) |
| 2026-05-09 | 2.1 | 优化description触发词,解决AI无法识别调用问题 |
| 2026-05-11 | 2.2 | 全面优化:添加用户交互入口、检查点设计、Step5代码补全、语言自动检测、CRM改版fallback、资源路径具体化 |
| 2026-05-11 | 2.3 | 新增通用操作原则:日期筛选箭头刷新法(自我修复空白问题)+ 数据全面性翻页检查(学员列表&录音场景均适用) |
| ``` |