news 2026/6/13 21:47:11

影刀RPA实操指南_钉钉与飞书双平台消息推送一套代码适配两个平台的通知方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
影刀RPA实操指南_钉钉与飞书双平台消息推送一套代码适配两个平台的通知方案

影刀RPA实操指南:钉钉与飞书双平台消息推送——一套代码适配两个平台的通知方案

之前写过企业微信的群机器人消息推送。但在实际工作中,很多公司用的是钉钉或飞书。

这篇文章覆盖钉钉和飞书两个平台的消息推送方案,并且告诉你如何写一套"适配层",让同一个流程能无缝切换平台。

三个平台消息推送的对比

特性企业微信钉钉飞书
接入方式Webhook URLWebhook URLWebhook URL
安全验证无(URL即权限)加签(可选)签名校验(可选)
Markdown支持部分支持支持完全支持
@人功能通过手机号/UserID通过手机号通过open_id
富文本卡片不支持支持支持(消息卡片)
文件发送不支持直接发不支持直接发不支持直接发

三个平台的Webhook接入方式基本一致:先在IM里创建一个群机器人,得到一个Webhook URL,然后向这个URL发送HTTP POST请求,消息就出现在群里了。

钉钉群机器人消息推送

获取Webhook地址

  1. 打开钉钉PC端 → 进入目标群聊

  2. 群设置 → 智能群助手 → 添加机器人

  3. 选择"自定义机器人"

  4. 安全设置选择"自定义关键词"(填"RPA通知")

  5. 复制Webhook地址

发送文本消息

importrequestsimportjsondefsend_dingtalk_text(webhook_url,content,at_mobiles=None):""" 发送钉钉文本消息 webhook_url: 钉钉机器人的Webhook地址 content: 消息内容 at_mobiles: 要@的人的手机号列表,如 ['13800138000'] """payload={"msgtype":"text","text":{"content":content}}ifat_mobiles:payload["at"]={"atMobiles":at_mobiles,"isAtAll":False}response=requests.post(webhook_url,json=payload)result=response.json()ifresult.get("errcode")==0:print("✅ 钉钉消息发送成功")else:print(f"❌ 钉钉消息发送失败:{result.get('errmsg')}")returnresult# 使用send_dingtalk_text("https://oapi.dingtalk.com/robot/send?access_token=xxx","【RPA通知】今日竞品价格采集已完成,共采集850条商品数据。",at_mobiles=["13800138000"])

发送Markdown消息

拼多多店群自动化上架方案

钉钉的Markdown消息更丰富:

defsend_dingtalk_markdown(webhook_url,title,text):payload={"msgtype":"markdown","markdown":{"title":title,"text":text}}response=requests.post(webhook_url,json=payload)returnresponse.json()# 发送日报格式markdown_content=""" ## 📊 竞品价格日报 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/afe1af7cdbce45fcb27a8ab0a3ced8c2.png#pic_center) **日期**:2026-06-11 **数据来源**:拼多多、淘宝 | 平台 | 采集商品数 | 均价 | 较昨日变化 | |------|-----------|------|-----------| | 拼多多 | 450 | ¥32.5 | -2.1% | | 淘宝 | 400 | ¥38.2 | +0.8% | > 异常提醒:拼多多"XX商品"降价超过15%,请关注 """send_dingtalk_markdown(webhook_url,"竞品价格日报",markdown_content)

钉钉的安全设置

钉钉机器人有三种安全策略,创建时按需选择:

  • 自定义关键词:消息内容必须包含指定关键词(如"RPA通知")才会发送
  • 加签:需要计算签名,更安全但代码复杂
  • IP白名单:限制只有指定IP的请求才能触发

如果选了"加签"模式,需要额外的签名计算:

importtimeimporthmacimporthashlibimportbase64importurllib.parsedefsign_dingtalk(secret):"""钉钉加签模式下的签名计算"""timestamp=str(round(time.time()*1000))secret_enc=secret.encode('utf-8')string_to_sign=f'{timestamp}\n{secret}'string_to_sign_enc=string_to_sign.encode('utf-8')hmac_code=hmac.new(secret_enc,string_to_sign_enc,digestmod=hashlib.sha256).digest()sign=urllib.parse.quote_plus(base64.b64encode(hmac_code))returntimestamp,sign# 在Webhook URL后拼接参数timestamp,sign=sign_dingtalk("你的加签密钥")signed_url=f"{webhook_url}&timestamp={timestamp}&sign={sign}"

飞书群机器人消息推送

获取Webhook地址

  1. 打开飞书PC端 → 进入目标群聊
  2. 群设置 → 群机器人 → 添加机器人
  3. 选择"自定义机器人"
  4. 飞书的Webhook地址自带安全校验Token,复制即可

发送文本消息

defsend_feishu_text(webhook_url,content):"""发送飞书文本消息"""payload={"msg_type":"text","content":{"text":content}}response=requests.post(webhook_url,json=payload)result=response.json()ifresult.get("code")==0:print("✅ 飞书消息发送成功")else:print(f"❌ 飞书消息发送失败:{result.get('msg')}")returnresult# 使用send_feishu_text("https://open.feishu.cn/open-apis/bot/v2/hook/xxx","【RPA通知】流程运行完毕")

发送富文本消息(飞书的超能力)

飞书支持"消息卡片",比纯文本好看很多:

defsend_feishu_card(webhook_url,title,content_items):""" 发送飞书卡片消息 content_items: [{"tag": "text", "text": "内容"}, ...] """payload={"msg_type":"interactive","card":{"header":{"title":{"tag":"plain_text","content":title},"template":"blue"# 蓝色标题栏},"elements":[{"tag":"div","text":{"tag":"lark_md","content":"\n".join(content_items)}},{"tag":"hr"# 分割线},{"tag":"note","elements":[{"tag":"plain_text","content":f"发送时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"}]}]}}response=requests.post(webhook_url,json=payload)returnresponse.json()# 发一张漂亮的日报卡片send_feishu_card(feishu_webhook,"📊 今日数据汇总",["**采集平台**:拼多多、淘宝、1688","**采集商品数**:1,250","**均价**:¥35.80","","⚠️ **异常提醒**:3个商品降价超过15%",])

封装一个统一的消息推送层

如果你的团队不同组用不同的IM,写一个统一接口:

classMessagePusher:"""统一的消息推送器,适配企业微信/钉钉/飞书"""def__init__(self,platform,webhook_url):self.platform=platform self.webhook_url=webhook_urldefsend_text(self,content):ifself.platform=='wecom':returnself._send_wecom_text(content)elifself.platform=='dingtalk':returnself._send_dingtalk_text(content)elifself.platform=='feishu':returnself._send_feishu_text(content)else:print(f"❌ 不支持的平台:{self.platform}")defsend_report(self,title,items):"""发送格式化报告"""ifself.platform=='dingtalk':md=f"##{title}\n\n"+"\n".join(f"-{item}"foriteminitems)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f148a376875b4353a4d1765dbd41ce0a.png#pic_center)returnself._send_dingtalk_markdown(title,md)elifself.platform=='feishu':returnself._send_feishu_card(title,items)else:text=f"{title}\n"+"\n".join(f"•{item}"foriteminitems)returnself.send_text(text)# ... 各平台的私有方法# 使用时只需要改一行配置pusher=MessagePusher('feishu','https://open.feishu.cn/open-apis/bot/v2/hook/xxx')pusher.send_report("竞品价格日报",["拼多多:450条,均价¥32.5","淘宝:400条,均价¥38.2","异常商品:3个",])

消息推送的最佳实践

1. 不要刷屏

每小时最多推一条。如果采集频率高,把结果汇总后定时推送,而不是采集一条发一条。

2. 区分严重级别

🔴 错误:流程运行失败 → 立即推送 + @人 🟡 警告:某步骤异常但流程继续 → 汇总到日报 🟢 信息:流程正常运行 → 可选推送 [video(video-KV65Kuc4-1781341567728)(type-csdn)(url-https://live.csdn.net/v/embed/524993)(image-https://v-blog.csdnimg.cn/asset/a547123d88ad712dccba346c9217e237/cover/Cover0.jpg)(title-TEMU店群如何管理运营?)]

3. 消息要有"可操作性"

坏消息:"采集失败了"

好消息:"拼多多价格采集失败(超时)。点击这里查看日志:[链接]。请检查代理IP是否正常。"

好的消息告诉接收人:发生了什么、为什么、现在要做什么。

4. 限制Webhook请求频率

三个平台都有频率限制(通常每分钟20条左右)。如果你的流程可能高频发送,加上缓冲:

importtimefromcollectionsimportdequeclassRateLimiter:def__init__(self,max_per_minute=15):self.requests=deque()self.max_per_minute=max_per_minutedefwait_if_needed(self):now=time.time()# 清理1分钟前的记录whileself.requestsandself.requests[0]<now-60:self.requests.popleft()iflen(self.requests)>=self.max_per_minute:wait_time=60-(now-self.requests[0])print(f"⏳ 频率限制,等待{wait_time:.1f}秒...")time.sleep(wait_time)self.requests.append(time.time())

写在最后

IM消息推送是RPA自动化的"最后一公里"——流程跑完了,如果没人知道结果,等于没跑。

最省事的方案是:选公司主用的IM平台,打通Webhook,然后在所有流程的结束时统一调一次"发送通知"。后续如果换平台,只需要改MessagePusher的配置,不需要动任何流程代码。


内容标签:影刀RPA · 钉钉 · 飞书 · 消息推送 · Webhook · 群机器人 · 通知自动化

作者:林焱

系列说明:本文是「影刀RPA新手到高手」系列教程之一,面向需要多IM平台消息推送的开发者。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 21:44:54

用户交互体验优化:缩放、拖拽、日志、错误提示

功能做完了&#xff0c;但好不好用是另一回事。滚轮缩放、鼠标拖拽、操作日志、状态提示——这些小细节决定软件的专业度。一、鼠标滚轮缩放1.1 缩放实现pythondef wheelEvent(self, event):"""处理鼠标滚轮事件实现缩放"""if self.original_pix…

作者头像 李华
网站建设 2026/6/13 21:33:57

Java中的字符串【AI全栈开发】

基本概念 Java 中的字符串由 java.lang.String 类表示&#xff0c;是不可变&#xff08;immutable&#xff09;对象 —— 一旦创建&#xff0c;其内容不可修改。每次对字符串的"修改"操作&#xff08;如拼接、截取&#xff09;都会产生新的 String 对象。 不可变性的…

作者头像 李华
网站建设 2026/6/13 21:32:51

CANN数学算子库ops-math底层优化原理深度剖析:昇腾NPU上GELU激活函数三种实现方式的性能与精度权衡工程实践

前言 深度学习模型中的数学算子虽然单次计算量不大&#xff0c;但调用频次极高&#xff0c;其累积性能对整体推理吞吐有显著影响。昇腾CANN软件栈中的ops-math仓库承载着数学类基础算子的实现与优化&#xff0c;包括类型转换、维度变换、三角函数、指数对数、统计函数等核心计算…

作者头像 李华
网站建设 2026/6/13 21:25:13

深入解析NXP ISF框架:嵌入式传感器数据采集与主机通信实战

1. 项目概述&#xff1a;从零构建嵌入式传感系统的通信骨架在嵌入式开发领域&#xff0c;尤其是涉及多传感器融合的物联网节点或工业边缘设备&#xff0c;我们常常面临一个经典难题&#xff1a;如何高效、可靠地管理来自多个物理接口&#xff08;如I2C、SPI&#xff09;的传感器…

作者头像 李华
网站建设 2026/6/13 21:25:12

深入解析NXP Kinetis KE1xZ低功耗模式:从电源域到WFI指令实战

1. 项目概述&#xff1a;为什么我们需要深入理解MCU的低功耗模式&#xff1f;在电池供电的嵌入式世界里&#xff0c;功耗就是生命线。无论是常年部署在野外的环境监测节点&#xff0c;还是需要佩戴数周的健康手环&#xff0c;亦或是智能门锁里那颗小小的纽扣电池&#xff0c;它…

作者头像 李华
网站建设 2026/6/13 21:23:19

i.MX23 LCDIF引脚配置与寄存器详解:从原理到实战避坑指南

1. 项目概述在嵌入式显示系统开发中&#xff0c;LCD接口&#xff08;LCDIF&#xff09;是连接处理器与显示屏的桥梁&#xff0c;其配置的准确性与稳定性直接决定了最终的显示效果。i.MX23作为一款经典的嵌入式应用处理器&#xff0c;其LCDIF模块功能强大且灵活&#xff0c;支持…

作者头像 李华