影刀RPA新手教程:钉钉机器人消息推送完全指南——内部群通知、Webhook配置与消息格式

📅 2026/7/3 9:13:22
影刀RPA新手教程:钉钉机器人消息推送完全指南——内部群通知、Webhook配置与消息格式
影刀RPA新手教程钉钉机器人消息推送完全指南——内部群通知、Webhook配置与消息格式作者林焱 | 真实案例驱动每篇覆盖12大核心模块禁止空话。案例背景钉钉群里每天8次的自动播报我们公司的销售数据以前是运营同学每天手动在钉钉群里发四次播报。早上到岗、午饭后、晚饭前、下班前各发一次。这个人休年假播报就断了。老板问起来运营说我忘了。用影刀RPA 钉钉机器人现在每天自动播报8次一次不落。一、安装与准备工作钉钉机器人的配置在企业钉钉电脑端完成。打开钉钉群 → 群设置 → 智能群助手 → 添加机器人 → 自定义。钉钉和飞书不一样添加机器人时要选安全设置自定义关键词推荐加签更安全IP地址段最安全但固定IP才能用我选的是自定义关键词简单够用。设置一个或多个关键词消息里必须包含其中至少一个否则钉钉会拒绝。比如关键词设成销售播报发消息时content里必须包含销售播报四个字。我当时踩过这个坑关键词设成了销售消息里写的是今日销量为120000没包含完整关键词销售全部被钉钉拦截了。关键词是包含关系不是等于但必须是连续的子串。二、元素定位获取钉钉Webhook地址钉钉机器人的Webhook URL在添加完成后显示只显示一次。没保存的话要去群里的机器人列表找到对应机器人重新查看详情。URL格式https://oapi.dingtalk.com/robot/send?access_tokenxxxxxx如果开了加签安全设置每次发消息还要计算签名。签名计算用Python实现在影刀执行Python代码指令里调用importtimeimporthmacimporthashlibimportbase64importurllib.parsedefcalc_sign(secret):timestampstr(round(time.time()*1000))secret_encsecret.encode(utf-8)string_to_signf{timestamp}\n{secret}string_to_sign_encstring_to_sign.encode(utf-8)hmac_codehmac.new(secret_enc,string_to_sign_enc,digestmodhashlib.sha256).digest()signurllib.parse.quote_plus(base64.b64encode(hmac_code))returntimestamp,sign把timestamp和sign作为URL参数拼到Webhook地址后面https://oapi.dingtalk.com/robot/send?access_tokenxxxxtimestampxxxsignxxx我当时没做签名计算每次发消息都要去钉钉后台重新拿Webhook地址极其麻烦。三、变量与数据类型钉钉消息格式详解钉钉支持的消息格式文本、Markdown、链接、ActionCard、FeedCard。最常用的是文本和Markdown。文本消息格式{msgtype:text,text:{content:销售播报\n今日销售额120000},at:{isAtAll:false,atMobiles:[13800138000]}}功能用at字段控制isAtAll: true 所有人atMobiles: 数组填手机号特定人对方钉钉绑定了这个手机号才行Markdown消息格式{msgtype:markdown,markdown:{title:销售播报,text:## 今日销售数据\n 销售额**120000**\n 完成率120%}}钉钉的Markdown和标准Markdown有差异支持的语法有限标题## 标题加粗**文本**引用 文本链接[文字](url)图片![](url)—— 但图片URL必须是公网可访问的在影刀里组装消息体用配置参数指令注意所有字符串值里如果包含双引号要转义。拼多多店群自动化报活动上架四、流程控制按时间段发送不同内容每天8次播报每次的内容格式不一样。早上第一次播报要包含昨日汇总和今日实时数据。中午播报只发当前实时数据。用影刀的获取当前时间指令拿到当前小时再用如果…否则判断获取当前小时 → 存到变量 hour 如果 hour 9 播报类型 早间完整版 包含昨日数据 true 否则如果 hour 12 播报类型 午间简报 包含昨日数据 false 否则如果 hour 18 播报类型 晚间汇总 包含昨日数据 true 包含预测 true 否则 播报类型 实时播报 包含昨日数据 false 结束如果循环用在多群推送。公司有多个销售群每个群都要发播报。把Webhook地址存到影刀的列表变量里用遍历循环逐个发送。钉钉Webhook的限频比飞书严格每个机器人每分钟最多20条每天最多1000条。我当时没注意这个限制有200个销售群要发一次性循环发送直接被限频了。正确做法每次发送后加1-2秒等待或者把群分组错开时间发送。五、网页自动化从CRM抓取销售数据播报的数据来自CRM系统用影刀的启动新浏览器指令打开CRM页面。元素定位四合一优先XPath//div[idsales-dashboard]//span[classamount]XPath找不到用CSSdiv#sales-dashboard span.amount动态内容用等待指令CRM页面用了异步加载数据不是立刻出现的。用影刀的等待元素出现指令设置超时时间10秒元素出现了再抓数据。我当时踩过这个坑页面还没加载完就去抓数据抓到的是占位符或者空字符串播报内容全是今日销售额0。后来在所有数据抓取前都加了等待元素出现还加了二次确认抓到的值和上次比变化超过50%要弹窗确认防止抓到错误数据。六、数据处理把数字变成人话从CRM抓到的销售额是一个数字比如120000直接发到群里不够直观。处理成更友好的格式如果 销售额 10000 显示值 销售额 / 10000 显示值 round(显示值, 1) 显示文本 显示值 万 否则 显示文本 销售额 元 结束如果完成率要计算环比环比 (今日销售额 - 昨日同期销售额) / 昨日同期销售额 * 100用影刀的数学表达式指令做计算注意除以0的情况要处理如果 昨日同期销售额 0 环比文本 昨日无数据 否则 环比 (今日销售额 - 昨日同期销售额) / 昨日同期销售额 * 100 环比文本 环比 round(环比, 1) % 结束如果数据里有可能有异常值比如销售额是负数退款导致要特殊处理如果 销售额 0 销售额文本 退款 abs(销售额) 元 颜色标记 红色 结束如果七、鼠标键盘图像销售趋势图截图发送纯数字播报有点枯燥加上趋势图截图会直观很多。用影刀的截取网页元素截图指令把CRM里的销售趋势图截下来。钉钉发送图片的方式和飞书不一样钉钉的群机器人Webhook不支持直接发图片这是钉钉的一个限制。解决方案有两个方案一把截图上传到图床比如阿里云OSS拿到公网URL用Markdown消息的![](url)语法显示图片。方案二用钉钉的自定义机器人升级成企业内部应用通过应用API发送图片消息。我用的是方案一简单直接。用Python把截图上传到OSSimportoss2defupload_image(local_path,object_name):authoss2.Auth(access_key_id,access_key_secret)bucketoss2.Bucket(auth,https://oss-cn-hangzhou.aliyuncs.com,bucket-name)bucket.put_object_from_file(object_name,local_path)urlfhttps://bucket-name.oss-cn-hangzhou.aliyuncs.com/{object_name}returnurl八、进阶技能ActionCard实现可操作消息钉钉独有的ActionCard消息可以在消息里加按钮点击后触发一个HTTP请求。ActionCard格式{msgtype:actionCard,actionCard:{title:销售播报,text:![趋势图](https://xxx.com/chart.png),btnOrientation:0,btns:[{title:查看详情,actionURL:https://crm.example.com/detail},{title:我要跟进,actionURL:https://crm.example.com/follow}]}}btnOrientation0 按钮竖直排列1 按钮横向排列。点击按钮后钉钉会打开actionURL指定的页面。如果要实现点击按钮后触发一个API而不是打开页面要用钉钉的互动卡片功能这个需要企业钉钉且开通了互动卡片权限。我当时评估过对于销售播报场景ActionCard的按钮跳转页面已经够用了。九、平台实战在影刀配置分时段调度8次播报用影刀的定时任务来触发。打开影刀控制台 → 任务中心 → 新建任务。一个任务可以配置多个触发时间用Cron表达式0 9,11,13,15,17,18,19,20 * * *意思是每天9、11、13、15、17、18、19、20点各触发一次。但这样配置每次触发的都是同一个流程要在流程里判断当前时间发送对应格式的内容。更好的做法建8个任务每个任务对应一个时间段每个任务传不同的参数。这样每个时间段的播报逻辑可以独立调整互不影响。我当时把所有逻辑写在一个流程里用一大堆if判断来区分时段后来改一个时段的格式不小心影响了其他时段。十、系统联动播报失败自动切换通知渠道钉钉消息有可能发送失败限频、网络问题、Webhook失效。设计降级方案钉钉为主企业微信为辅。在影刀流程里钉钉发送后检查返回码HTTP请求 POST 钉钉Webhook 如果 返回码 ! 200 记录日志 钉钉发送失败 返回消息 调用企业微信发送从参数里读企业微信Webhook 否则 记录日志 钉报发送成功 结束如果钉钉Webhook失效的情况要在流程里检测错误码{errcode:0,errmsg:ok}errcode不是0就是失败。常见错误码310000消息内容与关键词不匹配310001签名不正确开了加签的情况下429发送消息太频繁404Webhook地址无效十一、工程化规范多群管理的配置化公司有200个销售群不能把200个Webhook地址硬编码在流程里。正确做法把Webhook地址存到配置文件或影刀的数据表里流程运行时动态读取。配置文件格式CSVgroup_name,webhook_url,enabled 华东销售群,https://oapi.dingtalk.com/robot/send?access_tokenxxx,true 华南销售群,https://oapi.dingtalk.com/robot/send?access_tokenyyy,true在影刀里用读取CSV指令把配置加载到列表变量里。发送时遍历列表只发给enabledtrue的群。TEMU店群矩阵自动化运营核价报活动新增群、停用群只需要改CSV文件不用改流程。我当时硬编码了20个群的Webhook地址在流程里后来新增群只能改流程重新发版极其麻烦。从那以后所有对外配置全部外置流程只负责逻辑。十二、速查表与常见报错报错1310000 keyword not in content原因消息内容不包含机器人设置的关键词。解决在消息content里加上关键词或者去钉钉后台修改关键词设置。报错2429 too many requests原因超过发送频率限制。解决每次发送后加等待时间或者申请提高限额需要联系钉钉客服。报错3errcode 404 webhook not found原因Webhook地址无效或者机器人被删除了。解决去钉钉群里重新添加机器人更新Webhook地址。报错4图片在消息里显示不出来原因图片URL不是公网可访问的或者URL超时失效。解决用阿里云OSS或类似公网图床存储图片注意设置合理的过期时间。钉钉消息格式速查格式msgtype特点文本text支持人Markdownmarkdown支持基础格式链接link带标题和缩略图| ActionCard | actionCard | 带按钮 || FeedCard | feedCard | 多图文 |完整案例代码参考签名计算必须在每次请求前计算Python实现importtime,hmac,hashlib,base64,urllib.parsedefdingtalk_sign(secret):timestampstr(round(time.time()*1000))sign_strf{timestamp}\n{secret}signbase64.b64encode(hmac.new(secret.encode(utf-8),sign_str.encode(utf-8),hashlib.sha256).digest()).decode(utf-8)returntimestamp,urllib.parse.quote_plus(sign)# 发送文本消息defsend_text(webhook,content,at_allFalse):importrequests data{msgtype:text,text:{content:content},at:{isAtAll:at_all}}resprequests.post(webhook,jsondata,timeout10)returnresp.json()XPath元素定位参考CRM销售数据# 今日销售额 //div[contains(class,today-sales)]//span[classnum]/text() # 完成率进度条 //div[classprogress-bar]/style # 表格中的销售额列 //table[idsales-table]//tr/td[position()3]/text()CSS选择器/* 销售数据卡片 */.card.sales .value/* 完成率 */.progress-bar .percent/* 排名列表 */ul.rank-list li span.value我当时踩过这个坑三个最深刻的教训教训一关键词设得太严格。早期关键词设的是【销售播报】每次消息必须包含这个前缀。后来运营说这个前缀太长不好看要改成销售播报我没改流程里的消息内容导致所有消息被拦截。现在关键词设得尽量短且通用比如销售消息里很容易包含。教训二没处理钉钉限频。钉钉Webhook每分钟最多20条我有200个群循环发送不等待直接被限频。现在所有群发消息都加随机等待时间1-3秒还在流程里加了失败重试逻辑。教训三Webhook地址存在记事本里。电脑重装系统记事本没了200个群的Webhook地址全丢了。重新加200个机器人花了整整一下午。现在所有配置都存到影刀的数据表里云端存储换电脑也不怕。延伸钉钉机器人的完整配置脚本和200群批量管理工具我整理到了 home.linyan.cloud。包括Webhook地址的加密存储方案防止泄露后被他人滥用。#影刀RPA #RPA教程 #钉钉机器人 #消息推送 #销售播报 #自动化 #林焱作者林焱