怎么用 Python 脚本实现企业微信机器人定时发送日报消息

文章导读
使用 Python 的 requests 库调用企业微信机器人 Webhook 接口,配合操作系统的定时任务(如 Linux cron 或 Windows 任务计划程序)可实现定时发送。适用场景为内部运维通知或日报推送,主要风险边界在于 Webhook 地址泄露可能导致垃圾消息注入。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

使用 Python 的 requests 库调用企业微信机器人 Webhook 接口,配合操作系统的定时任务(如 Linux cron 或 Windows 任务计划程序)可实现定时发送。适用场景为内部运维通知或日报推送,主要风险边界在于 Webhook 地址泄露可能导致垃圾消息注入。

先说结论:Python 脚本结合系统级定时任务是企业微信日报自动化的标准实现方案,无需额外部署复杂服务。

  • 适合:已有 Python 运行环境的服务器或办公电脑,需要定期推送固定格式文本。
  • 先看:企业微信群机器人 Webhook 地址获取权限及网络连通性。
  • 建议:将 Webhook 密钥存入环境变量或配置文件,避免硬编码在代码中。

命令速用版

以下脚本通过 requests 库发送 Markdown 格式消息,保存为 send_report.py 后可由定时任务调用。

import requests
import json
import os

webhook_url = os.getenv("WECOM_WEBHOOK")
headers = {"Content-Type": "application/json"}
data = {
    "msgtype": "markdown",
    "markdown": {
        "content": "## 日报通知\n> 日期:2023-10-27\n> 内容:系统运行正常"
    }
}

response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
print(response.json())

Linux 系统可使用 crontab 设置每日 18:00 执行:

怎么用 Python 脚本实现企业微信机器人定时发送日报消息
0 18 * * * /usr/bin/python3 /path/to/send_report.py

为什么会这样

企业微信机器人基于 HTTP Webhook 机制,任何能发起 HTTP POST 请求的程序均可触发消息推送。系统定时任务负责在指定时间点唤醒 Python 脚本,脚本负责构建 payload 并请求接口。这种解耦设计让发送逻辑与调度逻辑分离,便于独立排查问题。

分步处理

  1. 获取 Webhook 地址:在企业微信群聊设置中添加机器人,复制 Webhook 地址。该地址包含 key 参数,等同于密码。
  2. 编写发送脚本:使用 Python requests 库构造 POST 请求。消息类型推荐 markdown,支持简单排版。代码中不要直接写入 Webhook 地址,建议通过环境变量读取。
  3. 配置定时任务:Linux 使用 crontab -e 编辑任务,Windows 使用任务计划程序创建基本任务。确保执行权限和 Python 路径正确。
  4. 设置网络策略:如果服务器有防火墙,需放行 outbound HTTPS 流量。企业微信 API 域名通常为 qyapi.weixin.qq.com。

怎么验证是否生效

查看企业微信目标群聊是否在预定时间收到消息卡片。检查脚本运行日志,确认 HTTP 状态码为 200 且返回 JSON 中 errmsg 为 ok。Linux 系统可查看 cron 日志 /var/log/cron 或 syslog 确认任务是否触发。

怎么用 Python 脚本实现企业微信机器人定时发送日报消息

常见坑

  • 时区不一致:服务器系统时间可能与当地时间不同,导致发送时间偏差。需在 cron 设置前确认 date 命令输出。
  • 环境变量缺失:定时任务环境往往不加载用户 profile,导致读取不到 Webhook 环境变量。建议在脚本内写死测试或用绝对路径加载配置。
  • 消息频率限制:企业微信机器人有频率限制,短时间内高频调用会被拦截。日报类任务通常不会触发,但调试时需注意。
  • 网络超时:脚本未设置 timeout 参数可能导致网络波动时进程挂起。建议在 requests.post 中设置 timeout=5。

常见问题

发送失败如何排查?

首先检查脚本本地运行是否成功,再确认定时任务是否触发。查看返回 JSON 中的 errcode,非 0 值表示接口报错,常见原因是 Webhook 地址无效或内容格式错误。

支持发送图片或文件吗?

群机器人 Webhook 主要支持文本和 Markdown 类型。图片和文件上传需要调用企业微信正式应用的 API,需要更复杂的鉴权流程,不适合简单机器人场景。

如何在多台服务器复用脚本?

将脚本放入版本控制系统,通过配置文件区分不同服务器的 Webhook 地址。确保每台服务器的定时任务独立配置,避免重复发送。

参考来源

  • 企业微信官方文档,群机器人 API 说明,work.weixin.qq.com
  • Python requests 库官方文档,HTTP 请求方法说明,requests.readthedocs.io