当前位置: 首页 > news >正文

影刀RPA 钉钉自动化完全指南:审批流程与数据提取实战

影刀RPA 钉钉自动化完全指南:审批流程与数据提取实战

作者:林焱


写在前面

钉钉是很多中小企业的核心协作工具。影刀有两种方式操控钉钉:一是通过钉钉开放平台API,二是直接操控钉钉桌面客户端界面。这篇文章两种方式都讲,明确告诉你什么时候用哪种。


一、两种方式的区别

方式适用场景优点缺点
API方式发消息、读考勤、拉审批数据稳定、数据完整需要企业管理员开通权限
界面自动化点击审批、回复消息无需API权限界面变动可能失效

原则:能用API就用API,API解决不了的才用界面操控。


店群矩阵自动化突破运营极限!


二、钉钉API方式

获取Access Token

importrequestsimportjsondefget_access_token(app_key,app_secret):url="https://oapi.dingtalk.com/gettoken"params={"appkey":app_key,"appsecret":app_secret}response=requests.get(url,params=params)data=response.json()ifdata.get("errcode")==0:returndata["access_token"]else:raiseException(f"获取token失败:{data}")ACCESS_TOKEN=get_access_token("你的AppKey","你的AppSecret")

发送群消息

defsend_group_message(access_token,chat_id,content):"""向钉钉群发送文本消息"""url=f"https://oapi.dingtalk.com/chat/send?access_token={access_token}"payload={"chatid":chat_id,"msg":{"msgtype":"text","text":{"content":content}}}![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f53dcbcf91794b0b8b8b1de1262c528b.png#pic_center)response=requests.post(url,json=payload)returnresponse.json()# 发送日报result=send_group_message(ACCESS_TOKEN,"chat123456789","今日销售日报\n总金额:98,000元\n订单数:156笔\n退款:3笔")print(result)

发送群机器人消息(更简单,不需要企业APP)

钉钉群机器人Webhook不需要任何权限申请:

defsend_robot_message(webhook_url,title,content):"""通过群机器人Webhook发送消息"""payload={"msgtype":"markdown","markdown":{"title":title,"text":f"##{title}\n\n{content}"}}response=requests.post(webhook_url,json=payload)returnresponse.json()# 日报发送WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=你的token"send_robot_message(WEBHOOK,"📊 每日数据报告","| 指标 | 数值 |\n|------|------|\n| 访客数 | 1,234 |\n| 订单数 | 56 |\n| 转化率 | 4.5% |")

拉取审批记录

defget_approval_instances(access_token,process_code,start_time,end_time):""" 获取指定审批流程的审批记录 process_code: 审批模板ID(在钉钉后台流程模板里找) start_time / end_time: 毫秒时间戳 """url=f"https://oapi.dingtalk.com/topapi/processinstance/listids?access_token={access_token}"payload={"process_code":process_code,"start_time":start_time,"end_time":end_time,"size":20,"cursor":0![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d1670e82996745498752f344f3c35f3e.png#pic_center)}response=requests.post(url,json=payload)returnresponse.json()importtime# 最近7天的审批end_ms=int(time.time()*1000)start_ms=end_ms-7*24*3600*1000result=get_approval_instances(ACCESS_TOKEN,"PROC-xxx",start_ms,end_ms)instance_ids=result.get("result",{}).get("list",[])

获取审批详情并提取字段

defget_approval_detail(access_token,process_instance_id):"""获取单个审批实例的详情"""url=f"https://oapi.dingtalk.com/topapi/processinstance/get?access_token={access_token}"payload={"process_instance_id":process_instance_id}response=requests.post(url,json=payload)returnresponse.json()defextract_form_values(instance_detail):"""从审批详情中提取表单字段值"""form_values={}components=instance_detail.get("result",{}).get("form_component_values",[])forcomponentincomponents:name=component.get("name")value=component.get("value")form_values[name]=valuereturnform_values# 批量提取审批数据rows=[]forinstance_idininstance_ids[:50]:# 每次最多处理50条detail=get_approval_detail(ACCESS_TOKEN,instance_id)values=extract_form_values(detail)# 获取申请人和审批时间process_info=detail.get("result",{})values["申请人"]=process_info.get("originator_name")values["提交时间"]=process_info.get("create_time")values["审批结果"]=process_info.get("status")rows.append(values)# 写入Excelimportopenpyxl wb=openpyxl.Workbook()ws=wb.activeifrows:ws.append(list(rows[0].keys()))forrowinrows:ws.append(list(row.values()))wb.save("审批数据导出.xlsx")print(f"共导出{len(rows)}条审批记录")

三、界面自动化方式(处理API无法覆盖的场景)

当企业没有开通API权限,或需要操作钉钉界面(如手动点击审批按钮),用界面自动化:

场景:批量处理待审批事项

importpyautoguiimporttimedefapprove_pending_items():"""处理钉钉桌面版的待审批列表"""# 点击钉钉"工作"tabwork_tab=pyautogui.locateOnScreen('dingtalk_work_tab.png',confidence=0.85)ifwork_tab:pyautogui.click(work_tab)time.sleep(1)# 点击"待我审批"pending_btn=pyautogui.locateOnScreen('dingtalk_pending_approval.png',confidence=0.85)ifpending_btn:pyautogui.click(pending_btn)time.sleep(1.5)# 逐个处理processed=0max_items=20# 每次最多处理20条whileprocessed<max_items:# 找第一个待审批itemitem=pyautogui.locateOnScreen('dingtalk_approval_item.png',confidence=0.80)ifnotitem:print("没有更多待审批")breakpyautogui.click(item)time.sleep(2)# 截图保存审批内容timestamp=time.strftime("%Y%m%d_%H%M%S")pyautogui.screenshot(f"approval_{timestamp}.png")# 点击"同意"按钮agree_btn=pyautogui.locateOnScreen('dingtalk_agree_btn.png',confidence=0.85)ifagree_btn:pyautogui.click(agree_btn)time.sleep(1)# 确认弹窗confirm=pyautogui.locateOnScreen('dingtalk_confirm.png',confidence=0.85)ifconfirm:pyautogui.click(confirm)time.sleep(1)processed+=1print(f"已处理第{processed}个审批")else:print("未找到同意按钮,跳过")pyautogui.press('escape')time.sleep(0.5)breakprint(f"批量审批完成,处理{processed}条")approve_pending_items()

四、考勤数据自动汇总

temu店群自动化报活动案例

defget_attendance_data(access_token,user_ids,work_date):"""获取指定日期的考勤打卡记录"""url=f"https://oapi.dingtalk.com/attendance/list?access_token={access_token}"payload={"workDateFrom":work_date,"workDateTo":work_date,"userIdList":user_ids[:50],# 每次最多50人"offset":0,"limit":50}response=requests.post(url,json=payload)returnresponse.json()# 获取全部员工列表defget_all_users(access_token,dept_id=1):url=f"https://oapi.dingtalk.com/user/listid?access_token={access_token}&department_id={dept_id}"response=requests.get(url)returnresponse.json().get("userlist",[])users=get_all_users(ACCESS_TOKEN)user_ids=[u["userid"]foruinusers]# 获取今天考勤importdatetime today=datetime.date.today().strftime("%Y-%m-%d")attendance_records=[]foriinrange(0,len(user_ids),50):batch=user_ids[i:i+50]result=get_attendance_data(ACCESS_TOKEN,batch,today)records=result.get("recordresult",[])attendance_records.extend(records)# 汇总到Excelwb=openpyxl.Workbook()ws=wb.active ws.append(["员工ID","姓名","打卡时间","打卡类型","打卡结果"])forrecinattendance_records:ws.append([rec.get("userId"),rec.get("recordId"),rec.get("userCheckTime"),rec.get("checkType"),# OnDuty=上班 OffDuty=下班rec.get("timeResult")# Normal=正常 Late=迟到 Early=早退])wb.save(f"考勤汇总_{today}.xlsx")

五、常见坑

坑1:钉钉API接口变动频繁
钉钉从旧版API迁移到新版(dingtalk.openapi),旧接口陆续停用。建议查官方文档确认当前有效接口,不要直接复制网上的老代码。

坑2:消息频率限制
群机器人每分钟最多20条消息。批量发送要加delay:time.sleep(3)每条消息间隔3秒。

坑3:用户ID vs 手机号
钉钉API大多数接口用userId,但有时需要先用手机号换取userId:

url=f"https://oapi.dingtalk.com/user/get_by_mobile?access_token={token}&mobile=13800138000"

坑4:界面自动化的图片素材需要提前截好
界面操控的图片定位素材(dingtalk_agree_btn.png等)需要在目标机器上截取,分辨率要匹配,否则confidence再高也找不到。


总结

钉钉自动化的核心经验:API能搞的用API,不要费力去界面操控。API拿审批数据、考勤记录、员工信息都很稳定。界面操控只用于"点击审批同意"这类没有API支持的操作。

署名:林焱

http://www.jsqmd.com/news/1265588/

相关文章:

  • 深入解析MibSPI的TG7CTRL与DMAxCTRL寄存器:硬件自动化SPI通信设计
  • RAG-SQL Router:基于LLM的企业智能问答系统路由设计
  • Qt事件系统深度解析:从信号槽到事件处理的进阶指南
  • RIP综合实验
  • DotNetBrowser容器化实战:Docker部署与优化指南
  • Unlock Music音乐解锁终极指南:5分钟让加密音频自由播放
  • 2026年7月服务好的汽车贴膜店铺推荐,车载香薰/汽车贴膜/汽车改装/汽车用品/汽车中控钢化膜,汽车贴膜店铺有哪些 - 品牌推荐师
  • 基于YOLO与ByteTrack的羽毛球技战术实时分析系统
  • 华为MetaBook GT 14安装Windows 10全攻略
  • 影刀RPA 随机延时与人机模拟策略:不被反爬识别的核心技巧
  • TVA技术架构与智能工厂的五大核心突破点
  • C++开发环境搭建与工作流详解:从编译器选择到VSCode配置
  • 从单音轨到戏剧级对话:AI配音多角色协同的5阶段演进路径,含角色语境记忆模块设计文档(内部泄露版)
  • Suno V5.5音频引擎:AI音乐生成的突破与实战应用
  • 涂胶显影机(Track)中级工程师 · 十维专业能力简历
  • 现代C++项目模板:从CMake配置到CI/CD的工程化实践
  • JUnit 5参数化测试:@ValueSource、@MethodSource与@CsvSource深度选型指南
  • 运维技术栈Linux+docker+Kubernetes+Jenkins/GitLab CI 知识点详细列表
  • Windows文件管理新选择:NanaZip如何让压缩变得更简单高效
  • 内网映射技术详解:原理、应用与实现方案
  • 机器学习核心算法实战指南:从回归到神经网络七大技术详解
  • AI智能医疗资源调度系统:优化医院资源配置的关键技术
  • C++指针与内存操作:从语法基础到游戏安全研究的实战解析
  • K8s网络连接拒绝监控与排查实战指南
  • Linux大页内存技术详解与性能优化实践
  • Qwen3-Max在电气图纸识别中的技术优势与应用
  • 软物理信息神经网络在二维对流传热问题中的应用与优化
  • AI驱动Google Workspace命令行工具开发实战
  • EDMA中断控制寄存器解析:IESR、IPR、ICR原理与实战
  • 多模态协同增强技术:DHMD框架解析与实践