• Python接入企业微信 推送信息到内部群里


    前言

    之前一篇文章提到了使用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生成表格图片的,我下次再写(水)一篇,溜了~

  • 相关阅读:
    XML
    DAO
    JDBC
    事物、视图、索引、备份和恢复
    用户
    高级查询2
    高级查询1
    数据库设计
    初识MySQL
    古代和现在的区别Hashtable和HashMap
  • 原文地址:https://www.cnblogs.com/deali/p/16114749.html
Copyright © 2020-2023  润新知