Back to skills
extension
Category: OtherAPI key required

vipthink-crm-recording

豌豆思维CRM录音分析技能。从CRM调取通话录音,通过ASR转文字+AI质检,生成话术评分、客户意向、改进建议等报告。当用户提到以下任何内容时立即使用:CRM录音、录音分析、通话质检、销售录音、话术分析、CC复盘、团队录音、录音转文字、ASR转录、质检评分、豌豆思维、vipthink、语义分析、意图分析、录音报告、录音排名、优秀录音、差录音、录音培训、录音标杆、录音改进、录音总结、录音评价、录音数据、通话数据、有效通话、录音时长、拨通时长、CC表现、渠道分析、客户意向、对话质量、听听录音、看看通话、录音调取、录音下载、录音抽查、批量分析、录音URL、客服录音、电销录音、外呼录音、家长录音、试听录音、签约录音、跟进录音、回访录音。

personAuthor: user_984b2fc9hubcommunity

豌豆思维CRM1.0系统 - 录音调用与分析

概述

本技能封装了从VIPThink CRM系统调取电话录音并进行智能分析的完整操作流程,包括:

第一阶段:录音调取(CRM操作)

  1. 团队筛选(通过el-cascader级联选择器)
  2. 筛选条件选择(如今日完课)
  3. 定位学生并打开详情
  4. 切换到电话标签页
  5. 筛选有效接通录音(>30秒)
  6. 获取录音URL

第二阶段:语音分析(API调用)

  1. 阿里云ASR语音转录(Paraformer-v2,支持粤语/普通话)
  2. AI质检分析(Qwen-Plus,多维度评分)
  3. 批量分析与多维度报告生成

触发后第一轮对话

当本skill被触发时,必须先向用户确认以下信息后再执行任何CRM或API操作:

  1. 分析范围:"请确认要分析哪个团队?"n - 港澳团队(默认)n - 北京上海团队`n - 台湾团队
  2. 筛选条件:"要分析哪类学生?"
    • 今日完课(默认)
    • 今日新分配
    • 今日需回访
    • 未约课
    • 今日上课
    • 课后未拨通
  3. 分析模式
    • 单条录音分析(默认)
    • 批量分析(需确认数量上限,建议≤20条/批)
  4. 输出格式
    • 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转录前,通过以下方式判断录音语言,优化转录准确率:

  1. 查看学生所属渠道(港澳团队→粤语概率高)
  2. 查看CC名字(粤语名字→粤语概率高)
  3. 默认使用 language_hints: [zh, yue] 让ASR自动识别
  4. 如果转录结果出现大量乱码或识别率<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翻页实现示例:

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去重

注意事项

  1. browser_evaluate是核心:Vue.js动态渲染的内容只有通过JavaScript才能可靠操作
  2. URL参数控制筛选:不同团队/筛选条件通过admin_group_list和main_type控制
  3. 等待加载:每次点击后等待1-2秒让Vue完成渲染
  4. 录音URL有时效:OSS签名URL有效期约7天
  5. API Key区分:DashScope API Key(sk-开头)用于ASR和质检,老版AccessKey不适用
  6. 并行限流:批量分析时建议max_workers=3,避免API限流
  7. 粤语支持:ASR需设置language_hints包含yue才能识别粤语
  8. 检查点必停:到达CP1/CP2/CP3时必须等待用户确认,不可自动跳过
  9. 日期筛选必须验证:设值后检查数据是否加载,空白时立即使用箭头刷新法修复
  10. 翻页必须完整:任何列表操作(学员列表/通话记录/录音列表)都必须检查分页并获取全部数据,不可只取首页

版本历史

| 日期 | 版本 | 内容 | |------|------|------| | 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 | 新增通用操作原则:日期筛选箭头刷新法(自我修复空白问题)+ 数据全面性翻页检查(学员列表&录音场景均适用) |