一、企微推送原理

企微机器人推送,本质就是用一个带唯一密钥的 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()

四、注意事项

  1. 安全机制

    • Webhook的key泄露=被滥用,必须严格保密,禁止公开到GitHub/博客。
    • 可选配置IP白名单,仅允许指定服务器出口IP调用。
  2. 频率限制

    • 每个机器人20条/分钟,超限返回45009错误。
    • 批量推送建议加消息队列(如Redis)做削峰排队。
  3. 消息类型

    • 支持:文本、Markdown、图片、文件、图文卡片,满足告警、报表、通知等场景。
  4. 适用范围

    • 内部群可用,外部群(含微信联系人)不支持。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐