Python脚本企业微信应用消息如何发

wen 实用脚本 1

本文目录导读:

Python脚本企业微信应用消息如何发

  1. 目录导读
  2. 为什么选择企业微信应用消息推送?
  3. 前置准备:创建企业微信应用与获取凭证
  4. 核心原理:企业微信API请求流程解析
  5. Python脚本实现:从获取Token到发送消息
  6. 消息类型详解:文本、Markdown、图文卡片等
  7. 常见问题与排错指南
  8. SEO优化建议:企业微信消息推送长尾词部署
  9. 问答环节

Python脚本实现自动化通知的最佳实践

目录导读

  1. 为什么选择企业微信应用消息推送?
  2. 前置准备:创建企业微信应用与获取凭证
  3. 核心原理:企业微信API请求流程解析
  4. Python脚本实现:从获取Token到发送消息
  5. 消息类型详解:文本、Markdown、图文卡片等
  6. 常见问题与排错指南
  7. SEO优化建议:企业微信消息推送长尾词部署
  8. 问答环节

为什么选择企业微信应用消息推送?

企业微信已覆盖超过90%的国内企业用户,其应用消息推送功能允许开发者通过API向指定成员、部门或标签发送通知,相比邮件、短信,企业微信消息具有触达率高、可交互(支持点击跳转)、零成本的优势。Python脚本因其简洁的语法和丰富的第三方库支持,成为实现企业微信自动化的首选语言。

适用场景

  • DevOps监控告警(如服务器宕机通知)
  • 业务订单状态变更提醒
  • 日报/周报自动推送
  • 系统日志异常实时推送

前置准备:创建企业微信应用与获取凭证

你需要先在企业微信管理后台完成以下操作:

  1. 创建自建应用
    登录管理后台 → 应用管理 → 自建 → 创建应用,填写名称、Logo,创建后获得AgentId(应用ID)和Secret(应用密钥,需妥善保管)。

  2. 配置可见范围
    设置应用可推送消息的成员/部门/标签,若推送失败,80%的可能是可见范围未包含目标用户。

  3. 获取企业ID
    在“我的企业” → “企业信息”中复制CorpId(企业唯一标识)。

注意:Webhook(群机器人)与企业应用消息不同,前者无需凭证但受限较多,后者需API调用且支持个性化推送。


核心原理:企业微信API请求流程解析

企业微信应用消息发送依赖OAuth2.0的access_token(临时凭证,有效期7200秒),核心流程如下:

  1. 构造GET请求获取Token:
    https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
    返回JSON包含access_token

  2. 使用Token发送消息:
    POST https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN
    请求体包含消息内容、接收人、消息类型等。

关键参数解释

  • touser:用户ID(非姓名,需在通讯录获取),支持多用户用分隔。
  • toparty:部门ID,如推送整个部门则用此参数。
  • msgtype:消息类型(text、markdown、news等)。

Python脚本实现:从获取Token到发送消息

以下是一个完整、可直接运行的Python脚本,已整合错误处理:

import requests
import json
import time
class WeComPusher:
    def __init__(self, corpid, corpsecret, agentid):
        self.corpid = corpid
        self.corpsecret = corpsecret
        self.agentid = agentid
        self.token = None
        self.token_expire = 0
    def get_token(self):
        """获取并缓存access_token(带过期检查)"""
        if self.token and time.time() < self.token_expire:
            return self.token
        url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={self.corpid}&corpsecret={self.corpsecret}"
        resp = requests.get(url)
        if resp.status_code != 200 or resp.json().get('errcode') != 0:
            raise Exception(f"Token获取失败: {resp.text}")
        data = resp.json()
        self.token = data['access_token']
        self.token_expire = time.time() + data['expires_in'] - 60  # 提前1分钟刷新
        return self.token
    def send_text(self, content, touser="@all"):
        """发送文本消息,@all表示全员"""
        token = self.get_token()
        url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}"
        payload = {
            "touser": touser,
            "msgtype": "text",
            "agentid": self.agentid,
            "text": {"content": content},
            "safe": 0  # 明文传输
        }
        resp = requests.post(url, json=payload)
        return resp.json()
# 使用示例
if __name__ == "__main__":
    pusher = WeComPusher(
        corpid="your_corpid",
        corpsecret="your_secret",
        agentid=1000002
    )
    result = pusher.send_text("Python脚本测试:服务器CPU负载超过90%!")
    print(result)

优化建议

  • 将凭证存储在环境变量os.getenv('WECOM_CORPID')中避免硬编码。
  • 添加重试机制,应对网络抖动导致的Token获取失败。

消息类型详解:文本、Markdown、图文卡片等

企业微信支持多种消息格式,以下用Python构造请求体:

文本消息(type: text)

{"text": {"content": "普通文本,支持换行\n第二行"}}

Markdown消息(type: markdown) 引用、超链接等,非常适合日报:

{"markdown": {"content": "**重要告警**\n> CPU使用率: `95%`\n[查看详情](https://monitor.example.com)"}}

图文消息(type: news,即文章卡片)

支持最多8篇图文,适合推送长文:

{"news": {"articles": [{: "Python脚本企业微信应用消息指南",
    "description": "详细教程从零开始",
    "url": "https://wecom-tutorial.example.com",
    "picurl": "https://img.example.com/logo.png"
}]}}

文件/图片消息(需先上传临时素材)

通过media/upload接口上传后获取media_id再发送。


常见问题与排错指南

问题现象 可能原因 解决方案
errcode: 40001 Secret错误或AppSecret被重置 重新复制Secret,注意大小写
errcode: 40003 用户ID不存在或未在可见范围 检查touser是否使用正确的UserId(非个微号)
errcode: 41001 Token缺失或过期 重新调用get_token()
errcode: 41011 企业未授权API调用 检查AgentId是否对应自建应用
errcode: 48002 应用无权限发送该类型消息 确认消息类型是否被后台允许
接口无响应 企业微信API域名解析失败 检查服务器是否可以访问qyapi.weixin.qq.com

调试技巧

  • 使用curl测试API(替换Token值):
    curl -X POST -H 'Content-Type: application/json' -d '{"touser":"@all","msgtype":"text","agentid":1000002,"text":{"content":"test"}}' 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=TOKEN'
  • 查看企业微信管理后台的“应用分析”日志,可看到消息发送记录。

SEO优化建议:企业微信消息推送长尾词部署

本文围绕核心关键词Python脚本企业微信应用消息,部署以下长尾词以提高搜索引擎排名:

  • Python企业微信机器人(技术架构描述)
  • 企业微信消息推送API(接口类型)
  • 企业微信自动化通知Python(场景化搜索)
  • 企业微信应用消息发送失败原因(问题排错词)
  • 企业微信markdown消息格式(特色功能词)

内链策略:在文章中“常见问题”部分添加锚文本链接至API文档(若需提及域名,可写为api.企业微信.官方域名),但本文未使用具体域名。


问答环节

Q1: Python脚本如何批量发送不同内容给不同用户?

A: 可以循环调用touser参数,每次设置不同的用户ID,对于高性能需求,可使用asyncio异步并发发送代码,但注意企业微信API有频率限制(每分钟约300次),过高会触发45009错误,建议发送前用time.sleep()控制间隔。

Q2: 支持@某人或@all吗?

A: 支持,在企业微信应用消息中,touser="@all"表示全员,若要@特定用户,需在文本内容中使用<@用户ID>(注意不是姓名),例如"content": "<@ZhangSan> 请查看告警",此功能需企业微信客户端版本支持。

Q3: 如何避免Token频繁刷新导致性能问题?

A: 在脚本中实现Token缓存机制(如本文Python类的token_expire),将Token存储到内存或Redis中,仅在接近过期时刷新,对于长时间运行的守护进程,建议设置单独线程每1.5小时预刷新一次。

Q4: 可以作为微信群机器人的替代吗?

A: 二者差异显著:群机器人通过Webhook发送(无身份验证,仅限文本/Markdown),应用消息支持更丰富的格式(图文、文件、互动卡片)、可指定接收人、可控制发送频率,对于企业内部系统通知,应用消息更可靠,若需要多群转发,可考虑编写脚本遍历多个应用的agentid。


掌握Python脚本调用企业微信应用消息API,是构建企业自动化运维体系的基础能力,从获取凭证到发送复杂格式消息,本文提供了完整的技术栈与踩坑指南,实际部署时,请务必注意Secret安全,并定期审查应用日志。

(本文由行业实践与公开API文档综合整理,旨在提供符合SEO优化要求的深度技术内容。)

抱歉,评论功能暂时关闭!