前言

之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录

其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现。

本文介绍一个很常用的场景:实时推送信息到企业微信群里。

安装

首先安装wechatpy库

pip install wechatpy

如果运行的时候提示需要安装其他库(比如加解密相关的)那就按照提示安装,这里不啰嗦了哈

创建企业微信应用

首先去企业微信后台创建一个应用,把应用编号(app_id)记录下来

顺便去后台把企业编号(corp_id)和密匙(secret)也记录下来

开始代码了

没啥别的,开始写代码

创建应用对象

直接上代码

from wechatpy.work import WeChatClient
from wechatpy.work.client.api import WeChatAgent client = WeChatClient('corp_id', 'secret') agent: WeChatAgent = client.agent.get('app_id')

这里面要填的几个ID都是上面提到的

有了这个 agent 对象就可以操作这个企业微信应用了~

创建聊天对象

要发信息,首先得有个聊天对象,这不,我们来创建一个

from wechatpy.work.client.api import WeChatAppChat

chat = WeChatAppChat(client=client)

新建群

前面说到要发信息到群里,那还得建一个群

CHAT_ID = 'test'

result = chat.create(chat_id=CHAT_ID, name='群里名称', owner='群主ID',
user_list=['群主ID', '群员ID1', '群员ID2', '群员ID3'])

就是这样,简单易懂,建群的同时在 user_list 参数指定要邀请的群员ID

(这些群主ID、群员ID请自行在企业微信后台查询,就是成员的ID)

封装一下常用操作

发送文本信息

def send_text(content):
print(chat.send_text(CHAT_ID, content))

就是简单的发送文本信息,效果如下:

发送文本卡片

def send_text_card(title, description, url, btn_text):
print(chat.send(CHAT_ID, 'textcard',
title=title,
description=description,
url=url,
btntxt=btn_text))

这里我使用了官方的例子

send_text_card('中秋节礼品领取',
'<div class=\"gray\">2016年9月26日</div> <div class=\"normal\"> 恭喜你抽中iPhone 7一台,领奖码:520258</div><div class=\"highlight\">请于2016年10月10日前联系行 政同事领取</div>',
'https://work.weixin.qq.com/', '谨防上当')

效果如下:

发送图片

def send_image(image_file):
media = WeChatMedia(client)
with open(image_file, 'rb') as f:
result = media.upload('image', f)
print(result)
if 'media_id' in result:
print(chat.send(CHAT_ID, 'image', media_id=result['media_id']))

很简单,参数传入图片路径就行

效果如下

发送Markdown格式内容

这个我测试了发现支持的markdown格式很有限,不要抱太大期望

def send_markdown(md_file):
with open(md_file, 'r', encoding='utf-8') as f:
print(chat.send(CHAT_ID, 'markdown', content=f.read()))

随便找了一段来发,效果如下

可以看到连markdown的表格都不支持……

群聊重命名

没啥好说的

def rename_chat(new_name):
print(chat.update(CHAT_ID, name=new_name))
send_text(f'群聊名称已修改为:{new_name}')

邀请用户

def invite(user_id):
print(chat.update(CHAT_ID, add_user_list=[user_id]))
send_text(f'邀请用户:{user_id}')

OK

OK,写完了,就是这样,很简单

使用到企业微信推送的场景还是比较多的,比如在Sentry监控里加入一个webhook,监控到项目报错就把报错信息推送到群里,方便随时掌握项目报错信息~

我们目前的应用场景还有一个是推送一些报表到群里,可以看到这些表格都是图片格式(没办法,谁叫企业微信不支持完整的markdown格式……)

效果如下

对了,关于用Python生成表格图片的,我下次再写(水)一篇,溜了~

Python接入企业微信 - 推送信息到内部群里的更多相关文章

  1. 接入WxPusher微信推送服务出现错误:Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

    背景 使用WxPusher微信推送服务 ,可以及时的将服务的一些运行异常信息,发送到自己的微信上,方便了解服务的运行状态(PS:这个服务是免费的). 你可以在这里看到WxPusher微信推送服务的接入 ...

  2. Docker系列——Grafana+Prometheus+Node-exporter微信推送(三)

    在之前博文中,已经成功的实现了邮件推送.目前主流的办公终端,就是企业微信.钉钉.飞书.今天来分享下微信推送,我们具体来看. 企业微信 在配置企业微信推送时,需要有微信企业,具体如何注册.使用,另外百度 ...

  3. asp.net 实现微信公众平台的主动推送信息

    通过学习借鉴朋友的实现方法进行整理(微信公众帐号主动发送消息给用户,asp.net版本). /// <summary> /// MD5 32位加密 /// </summary> ...

  4. day93之微信推送

    python之微信推送详解 用什么推送   -邮件   -微信推送   -短信推送微信推送   -公众号(不能主动给用户发消息)    -认证的公众号:需要营业执照,需要交钱,可以发多篇文章    - ...

  5. 让微信推送Jenkins构建消息

    Jenkins作为开发必备之神器,各家大小公司都在使用.Jenkins自身内置了基于邮件推送构建结果的功能.但是随着移动互联网的发展,邮件这玩意已经越来越少使用了,是否有一种办法能把jenkins构建 ...

  6. 免注册公众号的三种微信推送消息服务的C#代码实现

    有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如 ...

  7. 使用WxPusher给自己的个人微信发送提醒消息(WxPusher微信推送服务)

    1.背景 我们很多时候,我们在服务器上运行软件,发生一些业务异常,需要给我们发送一个及时的提醒,或者是使用一些耗时软件,比如抢车票,抢课,刷优惠券当任务运行成功以后,也需要及时的发送消息给自己 ,告诉 ...

  8. CQUT校园通知网消息爬虫+Server酱微信推送

    上了大三之后发现很多学校的通知都不会发送到班群里面,导致自己会错过很多重要信息,故想写一个爬虫来获取从当前时间之后的新的通知标题,并推送到微信上. PS:推送到微信上这个想法来源是,很多时候都需要将消 ...

  9. 使用Python发送企业微信消息

    准备工作: 到企业微信官网,注册一个企业:登录企业微信后台,创建一个“自建”应用, 获取企业ID.agentid.secret这3个必要的参数:在企业微信的通讯录中,创建多个测试账号:在手机端安装“企 ...

随机推荐

  1. 《Shader入门精要》中MVP变换的Projection矩阵与《GAMES101图形学入门》中的区别

    game101的透视投影的投影矩阵是这样的 正交投影是这样的 而shader入门精要的透视投影矩阵是这样子 正交投影矩阵是这样子 game101的透视投影是这样得到的 而正交投影的时候并没有假设中心点 ...

  2. 前端性能优化 —— 使用 BMP 图片代替 canvas.toDataURL

    前端开发中有时需要将 canvas 的内容导出成图片文件,例如供 CSS 使用,通常会使用 canvas.toDataURL,兼容性好并且简单. 不过 canvas.toDataURL 显然是非常低效 ...

  3. emu8086 调用LED面板的方法

    一.实验要求 1.熟悉并掌握 EMU8086 汇编语言调试环境: 2.学习 8086 的指令系统,输入简单的指令,观察各寄存器.内存相关单元以及处理器标志位的变化(所有数据传送类指令,可参考教材用例) ...

  4. Material Design with the Android Design Support Library

    Material Design with the Android Design Support Library 原文http://www.sitepoint.com/material-design-a ...

  5. 什么是MVC模式?   

    MVC (Model View Controller) 是一个设计模式,使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务.M是指数据模型,V是指用户界面,C则是控制器. ...

  6. Docker配置PostgreSQL数据本地持久化

    卷的原理图: 主机中的本地目录作为Docker容器内的持久存储卷装载,以便在主机和Docker容器之间共享数据.如果主机希望访问或定期备份在Docker容器内运行的DB服务器写入文件夹的数据或数据库, ...

  7. 重载(Overload)和重写(Override)的区别。重载的 方法能否根据返回类型进行区分?

    方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性.重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同.参数个数不同或者二者都不同)则视 ...

  8. 什么是 OAuth?

    OAuth 代表开放授权协议.这允许通过在 HTTP 服务上启用客户端应用程序(例 如第三方提供商 Facebook,GitHub 等)来访问资源所有者的资源.因此,您可 以在不使用其凭据的情况下与另 ...

  9. sp-MVC-ideabaok

    直接通过初始化器创建 或者通过创建maven工程在自己添加需要的东西 配置 dispatcher-servlet.xml 包括扫描加载包: <context:component-scan bas ...

  10. java-file类 hei

    File类 /* java.io.File类 文件和目录轮径的抽象形式 java把电脑种的文件和文件夹,封装为一个file类,我们可以使用file类对文件和文件夹进行曹祖 使用File类的方法 创建一 ...