影刀RPA 教育培训自动化:学员数据管理与课程提醒

影刀RPA 教育培训自动化:学员数据管理与课程提醒

作者:林焱


什么情况用

培训机构、在线教育、企业内训都有一个共同的痛点——学员数据散落在多个系统里:报名表在问卷星、付费记录在微信支付后台、学习进度在网校平台、作业在小鹅通。

每个月初,教务老师要手动把这些数据汇总起来:谁报名了但没付费、谁课程快到期了、谁作业没交、该给谁发上课提醒。这些事情用RPA自动化,能把教务从Excel苦海中解放出来。

核心场景:培训机构/企业培训的学员数据整合、进度追踪、自动提醒。


拼多多店群自动化报活动上架!

怎么做

第一步:学员数据整合平台

importpandasaspdfromdatetimeimportdatetime,timedeltaclassStudentDataManager:"""学员数据中心——多源数据整合"""def__init__(self):self.students=pd.DataFrame()defload_from_multiple_sources(self):"""从多个数据源加载并合并学员数据"""# 数据源1:报名表导出(CSV)signup=pd.read_csv("报名表.csv")signup["数据来源"]="报名表"# 数据源2:付费记录payment=pd.read_excel("付费记录.xlsx")payment["数据来源"]="付费记录"payment["已付费"]=True# 数据源3:网校平台学习进度progress=pd.read_excel("学习进度.xlsx")progress["数据来源"]="学习进度"# 按姓名+手机号合并(多源数据字段名可能不同,先统一)signup=signup.rename(columns={"您的姓名":"姓名","手机号码":"手机号","报名课程":"课程名称"})payment=payment.rename(columns={"付款人":"姓名","联系电话":"手机号"})# 核心合并:以报名表为主表,左连接付费和学习进度self.students=signup.merge(payment[["手机号","已付费","付费金额","付费时间"]],on="手机号",how="left").merge(progress[["手机号","学习进度%","最后学习时间","作业提交状态"]],on="手机号",how="left")# 填充默认值self.students["已付费"]=self.students["已付费"].fillna(False)self.students["学习进度%"]=self.students["学习进度%"].fillna(0)self.students["作业提交状态"]=self.students["作业提交状态"].fillna("未提交")returnself.studentsdefget_anomaly_students(self):"""找出需要跟进的异常学员"""anomalies=[]# 1. 报了名但没付费的(超过3天)cutoff=datetime.now()-timedelta(days=3)unpaid=self.students[(~self.students["已付费"])&(pd.to_datetime(self.students["报名时间"])<cutoff)]for_,sinunpaid.iterrows():anomalies.append({"类型":"未付费","姓名":s["姓名"],"手机号":s["手机号"],"课程":s["课程名称"],"报名时间":str(s["报名时间"]),"建议动作":"电话/微信提醒付费"})# 2. 付费了但长期没学习的(超过7天没登录)inactive=self.students[(self.students["已付费"])&(pd.to_datetime(self.students["最后学习时间"])<datetime.now()-timedelta(days=7))]for_,sininactive.iterrows():anomalies.append({"类型":"未学习","姓名":s["姓名"],"手机号":s["手机号"],"课程":s["课程名称"],"最后学习":str(s["最后学习时间"]),"建议动作":"发送学习提醒"})# 3. 课程快到期但进度落后的(进度<50%且距到期<7天)expiring=self.students[(self.students["学习进度%"]<50)&(pd.to_datetime(self.students["课程到期日"])<datetime.now()+timedelta(days=7))]for_,sinexpiring.iterrows():anomalies.append({"类型":"即将到期","姓名":s["姓名"],"进度":f"{s['学习进度%']}%","到期日":str(s["课程到期日"]),"建议动作":"督促完成学习"})returnanomalies

第二步:自动课程提醒

classCourseReminder:"""课程提醒自动发送"""def__init__(self):self.templates={"上课提醒":"""【{机构名}】{姓名}同学,您好! 您的《{课程名称}》课程将于{上课时间}开始, 请提前准备好学习资料,准时参加。 上课链接:{链接} 如有疑问请联系教务老师。""","付费提醒":"""【{机构名}】{姓名}同学,您好! 您报名的《{课程名称}》课程尚未完成付费。 请在{截止日期}前完成支付,以免影响学习。 支付方式:{支付方式} 感谢您的配合!""","学习督促":"""【{机构名}】{姓名}同学,您好! 您已{天数}天未登录学习了哦。 您的《{课程名称}》课程进度为{进度}%, 距课程到期还有{剩余天数}天,请合理安排学习时间!""","作业提醒":"""【{机构名}】{姓名}同学,您好! 您的《{课程名称}》作业尚未提交。 作业截止日期:{截止日期} 请尽快完成并提交,加油!""",}defsend_reminder(self,student,template_name,**kwargs):"""发送提醒消息"""template=self.templates.get(template_name)ifnottemplate:print(f"未找到模板:{template_name}")return# 填充模板defaults={"机构名":"XX教育","姓名":student.get("姓名","同学"),"课程名称":student.get("课程名称",""),"上课时间":kwargs.get("上课时间",""),"链接":kwargs.get("链接",""),"截止日期":kwargs.get("截止日期",""),"支付方式":kwargs.get("支付方式",""),"天数":kwargs.get("天数",7),"进度":kwargs.get("进度","0%"),"剩余天数":kwargs.get("剩余天数",""),}defaults.update(kwargs)message=template.format(**defaults)# 实际发送——微信/短信/企微phone=student.get("手机号","")self._send_sms(phone,message)returnmessagedef_send_sms(self,phone,message):"""通过短信平台发送(示例用阿里云短信)"""# 阿里云短信SDK调用(需要提前配置签名和模板)print(f"模拟发送短信到{phone}{message[:50]}...")defbatch_remind(self,students,template_name,**kwargs):"""批量发送提醒"""success=0for_,studentinstudents.iterrows():try:self.send_reminder(student.to_dict(),template_name,**kwargs)success+=1exceptExceptionase:print(f"发送失败:{student['姓名']}-{e}")print(f"发送完成:{success}/{len(students)}")

第三步:学习数据看板

defgenerate_study_dashboard(students_df,output_path):"""生成学习数据看板(Excel)"""# 统计数据total=len(students_df)paid=students_df["已付费"].sum()completed=(students_df["学习进度%"]>=100).sum()in_progress=((students_df["学习进度%"]>0)&(students_df["学习进度%"]<100)).sum()not_started=(students_df["学习进度%"]==0).sum()summary={"总报名人数":total,"已付费人数":int(paid),"付费率":f"{paid/total*100:.1f}%","已完成人数":int(completed),"学习中人数":int(in_progress),"未开始人数":int(not_started),"平均进度":f"{students_df['学习进度%'].mean():.1f}%","作业提交率":f"{(students_df['作业提交状态']=='已提交').mean()*100:.1f}%","统计时间":datetime.now().strftime("%Y-%m-%d %H:%M")}withpd.ExcelWriter(output_path)aswriter:pd.DataFrame([summary]).to_excel(writer,sheet_name="概览",index=False)students_df.to_excel(writer,sheet_name="学员明细",index=False)# 按课程统计course_stats=students_df.groupby("课程名称").agg({"姓名":"count","已付费":"sum","学习进度%":"mean"}).rename(columns={"姓名":"人数","已付费":"付费人数","学习进度%":"平均进度"})course_stats.to_excel(writer,sheet_name="按课程统计")print(f"学习看板已生成:{output_path}")returnsummary

第四步:在影刀中的集成

# ===== 影刀Python节点:每日教务自动化 =====# 初始化manager=StudentDataManager()reminder=CourseReminder()# 1. 加载数据students=manager.load_from_multiple_sources()print(f"共加载{len(students)}条学员数据")# 2. 生成学习看板summary=generate_study_dashboard(students,f"学习看板_{datetime.now().strftime('%Y%m%d')}.xlsx")# 3. 异常学员处理anomalies=manager.get_anomaly_students()print(f"发现{len(anomalies)}个待跟进学员:")forainanomalies:print(f" [{a['类型']}]{a['姓名']}-{a['建议动作']}")# 4. 自动发送提醒(需要先确认接收人列表)# reminder.batch_remind(unpaid_students, "付费提醒", 截止日期="3天内")# 5. 输出结果给后续节点output={"total_students":len(students),"anomaly_count":len(anomalies),"summary":summary}print(output)

有什么坑

坑1:学员身份唯一标识的问题

不同系统的学员标识不一样——报名表用微信昵称、付费记录用手机号、学习平台用ID。按姓名匹配可能重名,按手机号匹配可能换了号。

解决方法:选择最稳定的字段做主键(手机号 > 身份证号 > 姓名+生日),匹配不上的记录单独标记「待人工确认」。

坑2:短信模板要审核

TEMU店群矩阵自动化运营核价报活动

你写好了提醒话术,但短信平台要求模板报备审核。临时改一条话术可能要等1-2个工作日。

解决方法:提前在短信平台报备3-5个通用模板(上课提醒、付费提醒、节日问候等),具体内容通过模板变量填充。

坑3:学习进度数据有延迟

网校平台的「学习进度」可能不是实时更新的——学员看完了视频,但进度要等几小时才同步。

解决方法:RPA定时采集不要求实时性,设定合理的采集频率(每天1次足够),避免基于不准确的实时数据做决策。

坑4:消息发送频率限制

短信平台有频率限制(同一号码1分钟最多1条、1天最多10条)。如果一口气给所有学员发提醒,可能后面的人收不到。

解决方法:批量发送时加间隔(每次间隔3-5秒),高频场景走企业微信(免费且限制宽松)。


总结:教育培训的RPA自动化价值在于「让教务从Excel里抬起头来」。关键链路:多源数据整合→异常学员识别→自动提醒→学习看板。学员数据的唯一标识(手机号)是打通各系统的关键。