课程顾问任务调度与转化率分析看板
一、问题背景
技术背景说明
课程顾问是私域转化的核心执行者。一个中型教育机构通常有10-50名顾问,每人同时跟进200-500名潜在学员。管理者面临:
任务分配不公:新线索分配依赖人工,老顾问挑单、新顾问没单
跟进过程黑盒:无法实时了解每个顾问的跟进状态和效果
转化归因模糊:成交用户到底归功于首次响应、试听跟进还是最后促单,难以量化
企微官方限制
官方API提供聊天记录获取接口,但存在限制:
仅保存最近3天数据
不支持实时推送
无法直接关联到CRM中的线索状态
为什么需要技术手段
需要构建独立的顾问任务系统,通过API拉取企微聊天数据,结合CRM线索状态,通过自动化脚本实现:
智能分配:新线索按规则自动分配(轮询/按能力/按区域)
任务生成:根据用户行为自动生成待办任务(如“今日需跟进3次咨询未购用户”)
绩效看板:实时统计每个顾问的跟进量、响应速度、转化率
二、技术方案
架构设计企微聊天记录API→ETL脚本→CRM数据库→低代码应用→顾问端App→管理者看板
技术选型
低代码平台:微搭/宜搭/明道云(快速搭建前端)
数据库:MySQL/PostgreSQL
ETL脚本:Python + Airflow(定时任务)
API集成:企微官方API + 企销宝iPad协议API
方案对比
方案 | 开发周期 | 灵活性 | 维护成本 | 适用场景 |
纯Excel管理 | 即时 | 极低 | 高 | 小型机构,<5顾问 |
定制开发CRM | 3-6月 | 高 | 中高 | 大型机构,有开发团队 |
低代码+API | 2-4周 | 中高 | 低 | 中小机构,快速上线 |
三、实现步骤
步骤1:数据模型设计
sql
-- 顾问表 CREATE TABLE sales_advisers ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), wecom_userid VARCHAR(100), -- 企微用户ID department VARCHAR(50), -- 所属部门/校区 max_capacity INT DEFAULT 500, -- 最大跟进容量 current_count INT DEFAULT 0, -- 当前跟进数 status TINYINT DEFAULT 1 -- 1在职 0离职 ); -- 线索表 CREATE TABLE leads ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), phone VARCHAR(20), wecom_wxid VARCHAR(100), -- 客户企微ID source_channel VARCHAR(50), -- 来源渠道 course_interest VARCHAR(100), status VARCHAR(20), -- 待分配/跟进中/已转化/已流失 adviser_id INT, -- 负责顾问ID assigned_at DATETIME, -- 分配时间 last_contact DATETIME, -- 最后联系时间 contact_count INT DEFAULT 0, -- 联系次数 created_at DATETIME ); -- 跟进记录表 CREATE TABLE follow_ups ( id INT PRIMARY KEY AUTO_INCREMENT, lead_id INT, adviser_id INT, type VARCHAR(20), -- 微信/电话/企微 content TEXT, -- 跟进内容 next_plan DATETIME, -- 下次跟进时间 created_at DATETIME );步骤2:自动化分配脚本
python
# auto_assign.py - 新线索自动分配 import pymysql import requests from datetime import datetime def get_available_adviser(): """获取当前可分配顾问(轮询策略)""" conn = pymysql.connect(host='localhost', user='root', password='xxx', db='crm') cursor = conn.cursor() # 查询当前负载最低的顾问 sql = """ SELECT id, name, current_count, max_capacity FROM sales_advisers WHERE status = 1 AND current_count < max_capacity ORDER BY current_count ASC, last_assign_time ASC LIMIT 1 """ cursor.execute(sql) result = cursor.fetchone() cursor.close() conn.close() if result: return {'id': result[0], 'name': result[1]} return None def assign_lead(lead_id, adviser_id): """分配线索""" conn = pymysql.connect(host='localhost', user='root', password='xxx', db='crm') cursor = conn.cursor() # 更新线索表 sql = """ UPDATE leads SET adviser_id = %s, assigned_at = %s, status = '跟进中' WHERE id = %s """ cursor.execute(sql, (adviser_id, datetime.now(), lead_id)) # 更新顾问当前计数 sql = "UPDATE sales_advisers SET current_count = current_count + 1 WHERE id = %s" cursor.execute(sql, (adviser_id,)) conn.commit() cursor.close() conn.close() # 发送企微通知给顾问 send_wecom_notify(adviser_id, lead_id) def assign_pending_leads(): """定时任务:分配待分配线索""" conn = pymysql.connect(host='localhost', user='root', password='xxx', db='crm') cursor = conn.cursor() # 查询待分配线索 cursor.execute("SELECT id FROM leads WHERE status = '待分配' ORDER BY created_at ASC") pending = cursor.fetchall() for (lead_id,) in pending: adviser = get_available_adviser() if not adviser: print("暂无可用顾问") break assign_lead(lead_id, adviser['id']) print(f"线索{lead_id}分配给顾问{adviser['name']}") cursor.close() conn.close() # 使用Airflow调度,每5分钟执行一次步骤3:低代码顾问端搭建
参考微搭低代码平台实现公海线索领取功能:
javascript
// 微搭低代码 - 领取按钮逻辑 export default async function({event, data}) { try { // 1. 获取当前登录顾问信息 const userId = $w.auth.currentUser.userId; const adviserInfo = await $w.cloud.callDataSource({ dataSourceName: 'getAdviserInfoByUserId', params: { userId } }); // 2. 更新线索归属 const updateResult = await $w.cloud.callDataSource({ dataSourceName: 'Leads', methodName: 'wedaUpdate', params: { id: event.context.docId, adviser_id: adviserInfo.data.id, status: '跟进中', assigned_at: new Date() } }); // 3. 刷新表格 $w.refreshDataTable(); $w.utils.showToast({ title: '领取成功', icon: 'success' }); } catch (error) { $w.utils.showToast({ title: '领取失败', icon: 'error' }); } }步骤4:转化率分析看板SQL
sql
-- 顾问绩效看板(每日刷新) SELECT a.name AS 顾问姓名, COUNT(DISTINCT l.id) AS 负责线索数, COUNT(DISTINCT CASE WHEN l.status = '已转化' THEN l.id END) AS 转化数, ROUND(COUNT(DISTINCT CASE WHEN l.status = '已转化' THEN l.id END) / COUNT(DISTINCT l.id) * 100, 2) AS 转化率, ROUND(AVG(TIMESTAMPDIFF(MINUTE, l.assigned_at, l.last_contact)), 2) AS 平均首次响应(分钟), ROUND(AVG(l.contact_count), 2) AS 平均跟进次数, COUNT(f.id) AS 总跟进次数, DATEDIFF(NOW(), MIN(l.assigned_at)) AS 负责天数 FROM sales_advisers a LEFT JOIN leads l ON a.id = l.adviser_id AND l.assigned_at > DATE_SUB(NOW(), INTERVAL 30 DAY) LEFT JOIN follow_ups f ON l.id = f.lead_id AND f.created_at > DATE_SUB(NOW(), INTERVAL 30 DAY) WHERE a.status = 1 GROUP BY a.id, a.name ORDER BY 转化率 DESC;四、最佳实践
任务调度优化
容量算法:顾问的max_capacity应根据其历史转化效率动态调整(转化率高可增加容量)
智能分配:除轮询外,可按用户属性匹配(如擅长考研数学的顾问优先分配考研数学线索)
数据准确性保障
自动同步:每小时通过企微API拉取聊天记录,更新线索的last_contact和contact_count
去重机制:同一手机号多次留资时,合并为同一线索,避免重复分配
踩坑经验
离职转交:顾问离职时需自动将其线索转交给其他顾问,并触发转交通知
保护期机制:已分配的线索设置保护期(如3天),保护期内其他顾问不可抢单,保护期结束后未跟进则自动释放回公海
五、工具推荐
企销宝在本方案中承担数据采集和触达执行:
聊天记录同步:通过iPad协议实时获取顾问与客户的聊天内容,无需依赖企微官方API的3天限制
多账号管理:支持同时管理数十个顾问账号,统一监控每个顾问的响应速度和工作量
自动化任务:可通过API触发顾问执行任务(如发送SOP话术),并与低代码系统的待办事项联动
