企微机器人消息推送(Python实现案例)
·
一、企微推送原理
企微机器人推送,本质就是用一个带唯一密钥的 Webhook 地址,通过 HTTP POST 把 JSON 消息发给企微服务器,由它转发到指定群。
企微给每个群机器人分配一个唯一 Webhook URL(含加密 key)。
你的系统 / 脚本向这个 URL 发HTTP POST+JSON 消息体。
企微服务端校验 key 合法后,把消息转发到对应群聊。
全程是单向推送:你的系统→企微服务器→群成员,无需扫码、无需授权。
一句话:企微机器人推送,本质就是用一个带唯一密钥的Webhook地址,通过HTTP POST把JSON消息发给企微服务器,由它转发到指定群。下面把原理、流程、关键细节讲清楚。
二、完整流程(五步走)
1. 建机器人、拿Webhook(关键一步)
- 企微内部群 → 右上角“…” → 消息推送(旧版叫群机器人)→ 添加/新建。
- 生成唯一URL,格式如下(key是核心密钥,必须保密):
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
2. 构造标准JSON消息体
- 固定
msgtype(text/markdown/image/file等),填对应内容。 - 文本示例:
{ "msgtype": "text", "text": { "content": "CRM系统告警:订单表同步延迟!", "mentioned_list": ["@all"] // 可@成员或所有人 } }
具体可参考官网:https://developer.work.weixin.qq.com/document/path/99110
3. 发HTTP POST请求
- 请求头:
Content-Type: application/json。 - 用Python/Shell/Java/Go等都行,示例(Python):
import requests webhook = "你的Webhook地址" data = {"msgtype": "text", "text": {"content": "测试消息"}} requests.post(webhook, json=data)
4. 企微服务端处理
- 校验key合法性、调用频率(限20条/分钟,超限报45009)。
- 校验通过,推送到目标群;失败返回错误码(如40001=key无效)。
5. 群成员接收
- 手机/电脑企微实时收到消息,支持@提醒、跳转等。
三、Python实现案例
实现效果:每天定时(下午15:00、17:00)工作群中推送明天值班人员,提醒对应人员明天值班,并@所有人
import requests
from datetime import date
from datetime import datetime, timedelta
# 1. 企微Webhook地址
WEBHOOK_URL = "https://qyapi.weixin.qq.com/xxx" # 需写对应的webhook,这里我注释掉
# 2. 值班人员列表 共有6个人
DUTY_PERSONS = [
"乔治", # 0
"勒布朗", # 1
"石佛", # 2
"加内特", # 3
"多比", # 4
"一诺" # 5
]
# 起始日期(从这一天开始算第0天)
START_DATE = datetime(2026, 5, 15)
def send_duty():
# 当前日期时间
current_datetime = datetime.now()
print(current_datetime)
#当前日期格式
#today=str(current_datetime)[0:10]
# 天数差
days_diff = (current_datetime - START_DATE).days
print(days_diff)
# 取余 0~5,并获取值班人员
idx = days_diff % 6
print(idx)
duty_name = DUTY_PERSONS[idx]
# 明天日期
tomorrow_day = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%d")
print(tomorrow_day)
#content = f"明日({tomorrow_str})值班人员:{duty_name}\n@所有人"
# print(content)
msg = {
"msgtype": "text",
"text": {
"content": f"明日({tomorrow_day})值班人员:{duty_name}",
"mentioned_list": ["{duty_name}", "@all"]
}
}
# 日志打印
try:
requests.post(WEBHOOK_URL, json=msg, timeout=10)
print(f"发送成功:{duty_name},索引={idx},天数差={days_diff}")
except Exception as e:
print(f"发送失败:{e}")
if __name__ == "__main__":
send_duty()
四、注意事项
-
安全机制
- Webhook的key泄露=被滥用,必须严格保密,禁止公开到GitHub/博客。
- 可选配置IP白名单,仅允许指定服务器出口IP调用。
-
频率限制
- 每个机器人20条/分钟,超限返回45009错误。
- 批量推送建议加消息队列(如Redis)做削峰排队。
-
消息类型
- 支持:文本、Markdown、图片、文件、图文卡片,满足告警、报表、通知等场景。
-
适用范围
- 仅内部群可用,外部群(含微信联系人)不支持。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)