影刀RPA 会议自动预约:日历管理与会前提醒
影刀RPA 会议自动预约日历管理与会前提醒作者林焱 | 适用人群影刀RPA新手 | 难度★★☆☆☆一、什么情况用这个一周要参加十几场会每次都要手动在日历上预约、设置提醒、提前发会议资料给参会人。漏掉一场重要的会后果可能是一天的节奏全乱。用影刀RPA从Excel/邮件/聊天记录中读取会议安排 → 自动创建日历事件 → 会前30分钟推送提醒 发送会议资料。你再也不用担心忘记开会了。实际场景周会批量预约、客户拜访日程管理、项目里程碑提醒、培训课程安排。这篇文章能解决的问题从Excel批量创建日历事件会前自动发送提醒企微/钉钉/邮件冲突检测——避免同一时间约两场会生成会议纪要模板二、怎么做2.1 影刀主流程店群矩阵自动化突破运营极限┌──────────────────────────────────────────────┐ │ ① 【读取Excel】 │ │ 读取会议排期表时间/主题/参会人/资料路径│ │ ↓ │ │ ② 【遍历列表】 │ │ 逐场处理会议 │ │ ↓ │ │ ③ 【执行Python代码】 │ │ 生成ICS日历文件可导入Outlook/Google │ │ ↓ │ │ ④ 【条件判断】 │ │ 判断是否有会议资料 → 有则发送给参会人 │ │ ↓ │ │ ⑤ 【发送企业微信消息】 │ │ 发送会前提醒 │ └──────────────────────────────────────────────┘2.2 Excel排期表格式在影刀中先用【读取Excel】读取会议安排的Excel日期时间时长(分钟)主题参会人地点资料路径提醒方式2024-07-0209:0060晨会张三,李四3楼会议室AD:\资料\晨会.pptx企微2024-07-0214:0030客户拜访-王总张三客户公司D:\资料\方案.pdf邮件2.3 生成ICS日历文件步骤③Python生成标准日历文件fromdatetimeimportdatetime,timedeltadefcreate_ics_event(title,start_time,duration_minutes,location,description):生成单个会议的ICS格式# 格式化时间为ICS标准格式dt_startstart_time.strftime(%Y%m%dT%H%M%S)dt_end(start_timetimedelta(minutesduration_minutes)).strftime(%Y%m%dT%H%M%S)dt_stampdatetime.now().strftime(%Y%m%dT%H%M%S)# 生成唯一IDuidf{start_time.strftime(%Y%m%d%H%M)}-{hash(title)0xFFFFFFFF:08x}eventfBEGIN:VEVENT DTSTART:{dt_start}DTEND:{dt_end}DTSTAMP:{dt_stamp}UID:{uid}SUMMARY:{title}LOCATION:{location}DESCRIPTION:{description}BEGIN:VALARM TRIGGER:-PT30M ACTION:DISPLAY DESCRIPTION:会议提醒{title}将在30分钟后开始 END:VALARM END:VEVENTreturneventdefcreate_ics_file(meetings,filenamemeetings.ics):生成完整的ICS文件ics_headerBEGIN:VCALENDAR VERSION:2.0 PRODID:-//YingdaoRPA//Meeting Schedule//CN CALSCALE:GREGORIAN METHOD:PUBLISH ics_footerEND:VCALENDARevents[]forminmeetings:eventcreate_ics_event(titlem[title],start_timem[start_time],duration_minutesm[duration],locationm[location],descriptionm.get(description,),)events.append(event)full_icsics_header\n.join(events)\nics_footerreturnfull_ics# 使用示例 # 从影刀Excel读取的数据构造会议列表meetings[{title:晨会,start_time:datetime(2024,7,2,9,0),duration:60,location:3楼会议室A,description:讨论本周工作计划,},{title:客户拜访-王总,start_time:datetime(2024,7,2,14,0),duration:30,location:客户公司,description:演示产品新功能,},]ics_contentcreate_ics_file(meetings)# 保存到文件双击即可导入日历filepathfD:\\会议\\周历_{datetime.now().strftime(%Y%m%d)}.icswithopen(filepath,w,encodingutf-8)asf:f.write(ics_content)print(fICS文件已生成{filepath})print(双击该文件即可导入Outlook/Google日历)实用技巧ICS文件生成后双击就能导入Outlook、macOS日历、Google日历等主流日历应用。也可以作为邮件附件发送给参会人让他们一键添加到自己的日历。2.4 冲突检测在创建会议前检查是否和已有会议冲突defcheck_conflict(new_meeting,existing_meetings):检查新会议是否与已有会议冲突new_startnew_meeting[start_time]new_endnew_starttimedelta(minutesnew_meeting[duration])conflicts[]forexistinginexisting_meetings:exist_startexisting[start_time]exist_endexist_starttimedelta(minutesexisting[duration])# 判断时间重叠ifnew_startexist_endandnew_endexist_start:conflicts.append(existing)returnconflicts# 在影刀流程中调用conflictscheck_conflict(new_meeting,today_meetings)ifconflicts:print(f⚠️ 时间冲突以下会议与「{new_meeting[title]}」冲突)forcinconflicts:print(f -{c[title]}({c[start_time].strftime(%H:%M)}))conflict_flagTrueelse:conflict_flagFalse2.5 会前提醒 资料发送在影刀中设置定时任务每天定时检查未来30分钟内的会议【定时触发器】→ 每天早上8:00-18:00每5分钟执行一次 【读取Excel】→ 读取会议排期表 【遍历列表】→ 检查每条会议 【条件判断】 条件会议开始时间 距离现在 小于等于30分钟 且 大于0分钟 → 是 【发送企业微信消息】 接收人{参会人列表} 内容  会议提醒 主题{会议主题} 时间{会议时间} 地点{会议地点} 【条件判断】 条件资料路径不为空 → 是【发送邮件】→ 附件{资料路径}2.6 生成会议纪要模板会前自动在飞书/钉钉/企业微信中创建一个会议纪要模板defgenerate_meeting_minutes_template(title,attendees,date):生成会议纪要Markdown模板templatef# 会议纪要 **会议主题**{title}**日期时间**{date}**参会人员**{, .join(attendees)}--- ## 一、会议议程 1. 2. 3. ## 二、讨论要点 | 议题 | 讨论结果 | 负责人 | 截止时间 | |------|---------|--------|---------| | | | | | ## 三、待办事项 - [ ] 事项1负责人截止 - [ ] 事项2负责人截止 - [ ] 事项3负责人截止 ## 四、下次会议 - 时间 - 议题 returntemplate三、有什么坑坑1时区问题ICS文件的默认时区可能和你期望的不一致。temu店群自动化报活动案例# 如果Outlook显示的时间不对在ICS头部加时区VTIMEZONEBEGIN:VTIMEZONE TZID:Asia/Shanghai BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:0800 TZOFFSETTO:0800 TZNAME:CST END:STANDARD END:VTIMEZONE坑2参会人列表的格式解析Excel中参会人可能是「张三, 李四, 王五」这种格式需要拆分为列表。attendees_str张三, 李四, 王五attendees_list[name.strip()fornameinattendees_str.split(,)]# 别用split()因为中文逗号和英文逗号可能混用importre attendees_list[name.strip()fornameinre.split(r[,、],attendees_str)]坑3ICS文件的编码Windows下生成的ICS文件如果包含中文需要用UTF-8编码保存。Outlook通常能正确处理UTF-8的ICS但老版本可能有问题。# 写入时明确指定UTF-8withopen(filepath,w,encodingutf-8-sig)asf:# utf-8-sig 带BOMf.write(ics_content)坑4提醒时间不是精确的30分钟影刀的定时任务是按固定频率执行的如每5分钟所以「会前30分钟提醒」实际可能在25-30分钟之间触发。这是正常的不影响使用。如果要求非常精确误差小于1分钟可以给每个会议单独设置一个一次性定时任务但会增加复杂度。坑5ICS文件双击导入后不更新ICS文件导入是一次性的如果会议改期了需要重新生成并导入。更好的做法是订阅日历URLCalDAV协议但那需要服务器支持不适合影刀场景。折中方案每天生成一次全量ICS文件覆盖旧的导入时选择「替换」而非「追加」。总结影刀做会议管理核心是「Excel排期 → ICS文件 → 定时提醒」三步。ICS文件是标准格式所有日历应用都支持。冲突检测避免尴尬会前提醒避免遗忘。关键是时区和编码要处理好。