封装Python脚本:使用企业微信机器人发送消息至企业微信

这篇具有很好参考价值的文章主要介绍了封装Python脚本:使用企业微信机器人发送消息至企业微信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方文档地址:https://developer.work.weixin.qq.com/document/path/91770#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E7%BE%A4%E6%9C%BA%E5%99%A8%E4%BA%BA

一、获取自定义机器人webhook

可以通过如下步骤设置企业微信机器人:文章来源地址https://www.toymoban.com/news/detail-700577.html

  1. 首先建立或者进入某个群聊
  2. 进入群聊设置页面, 点击“群机器人>添加”可添加一个机器人成功
  3. 添加成功后,复制并保留其webhook地址。

二、python封装脚本

# -*- coding: utf-8 -*-
# @Time    : 2023/5/11 15:01
# @Author  : chenyinhua
# @File    : webchat_handle.py
# @Software: PyCharm
# @Desc: 企业微信机器人
import os

from requests import request
from loguru import logger
import base64
import hashlib
import re


class WechatBot:
    """
    企业微信机器人
    当前自定义机器人支持文本(text)、markdown(markdown)、图片(image)、图文(news), 文件(file)五种消息类型。
    机器人的text/markdown类型消息支持在content中使用<@userid>扩展语法来@群成员
    """

    def __init__(self, webhook_url):
        """
        :param webhook_url: 机器人的WebHook_url
        """
        self.webhook_url = webhook_url
        self.headers = {
            "Content-Type": "application/json",
            "Charset": "UTF-8"
        }

    def send_text(self, content, mentioned_list=[], mentioned_mobile_list=[]):
        """
        发送文本消息
        :param content: 文本内容,最长不超过2048个字节,必须是utf8编码
        :param mentioned_list: userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list
        :param mentioned_mobile_list: 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人
        """
        payload = {
            "msgtype": "text",
            "text": {
                "content": content,
                "mentioned_list": mentioned_list,
                "mentioned_mobile_list": mentioned_mobile_list
            }
        }
        response = request(url=self.webhook_url, method="POST", json=payload, headers=self.headers)
        if response.json().get("errcode") == 0:
            logger.debug(f"通过企业微信发送文本消息成功:{response.json()}")
            return True
        else:
            logger.error(f"通过企业微信发送文本消息失败:{response.text}")
            return False

    def send_markdown(self, content):
        """
        发送markdown消息
        目前支持的markdown语法是如下的子集:
            1. 标题 (支持1至6级标题,注意#与文字中间要有空格)
            2. 加粗
            3. 链接
            4. 行内代码段(暂不支持跨行)
            5. 引用
            6. 字体颜色(只支持3种内置颜色), 绿色(color="info"),灰色(color="comment"),橙红色(color="warning")
        :param content: markdown内容,最长不超过4096个字节,必须是utf8编码
        """
        payload = {
            "msgtype": "markdown",
            "markdown": {
                "content": content
            }
        }
        response = request(url=self.webhook_url, method="POST", json=payload, headers=self.headers)
        if response.json().get("errcode") == 0:
            logger.debug(f"通过企业微信发送md消息成功:{response.json()}")
            return True
        else:
            logger.error(f"通过企业微信发送md消息失败:{response.text}")
            return False

    def send_picture(self, image_path):
        """
        发送图片消息
        :param image_path: 图片的绝对路径
        """
        with open(image_path, "rb") as f:
            image_data = f.read()
        payload = {
            "msgtype": "image",
            "image": {
                "base64": base64.b64encode(image_data).decode("utf-8"),  # # 将图片数据转换成Base64编码格式
                "md5": hashlib.md5(image_data).hexdigest()  # # 计算图片的MD5值
            }
        }
        response = request(url=self.webhook_url, method="POST", json=payload, headers=self.headers)
        if response.json().get("errcode") == 0:
            logger.debug(f"通过企业微信发送图片消息成功:{response.json()}")
            return True
        else:
            logger.error(f"通过企业微信发送图片失败:{response.text}")
            return False

    def send_text_picture(self, articles: list):
        """
        发送图文消息
        :param articles: 图文消息,一个图文消息支持1到8条图文, 包括如下字段
            1. title: 标题,不超过128个字节,超过会自动截断
            2. description: 非必填,描述,不超过512个字节,超过会自动截断
            3. url: 点击后跳转的链接。
            4. picurl: 非必填,图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150。
        """
        payload = {
            "msgtype": "news",
            "news": {
                "articles": [
                ]
            }
        }
        for article in articles:
            payload["news"]["articles"].append(
                {
                    "title": article.get("title"),
                    "description": article.get("description", ""),
                    "url": article.get("url"),
                    "picurl": article.get("picurl", "")
                }
            )
        response = request(url=self.webhook_url, method="POST", json=payload, headers=self.headers)
        if response.json().get("errcode") == 0:
            logger.debug(f"通过企业微信发送图文消息成功:{response.json()}")
            return True
        else:
            logger.error(f"通过企业微信发送图文失败:{response.text}")
            return False

    def upload_file(self, file_path):
        """
        上传文件到企业微信服务器(要求文件大小在5B~20M之间)
        注意:素材上传得到media_id,该media_id仅三天内有效;media_id只能是对应上传文件的机器人可以使用
        :param file_path: 文件绝对路径
        """
        token_regex = r"key=([\w-]+)"
        match = re.search(token_regex, self.webhook_url)
        token = match.group(1)
        url = f"https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={token}&type=file"
        headers = {
            "Content-Type": "multipart/form-data;"
        }
        with open(file_path, "rb") as f:
            files = {"media": (os.path.basename(file_path), f.read())}
        response = request(url=url, method="POST", files=files, headers=headers)
        if response.json().get("errcode") == 0:
            media_id = response.json().get("media_id")
            logger.debug(f"上传文件成功,media_id= {media_id}")
            return media_id
        else:
            logger.error(f"上传文件失败:{response.text}")
            return False

    def send_file(self, media_id):
        """
        发送文件
        :param media_id: 文件id,通过下文的文件上传接口获取
        """
        payload = {
            "msgtype": "file",
            "file": {
                "media_id": media_id,
            }
        }
        response = request(url=self.webhook_url, method="POST", json=payload, headers=self.headers)
        if response.json().get("errcode") == 0:
            logger.debug(f"通过企业微信发送文件消息成功:{response.json()}")
            return True
        else:
            logger.error(f"通过企业微信发送文件消息失败:{response.text}")
            return False


if __name__ == '__main__':
    webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=***********"
    bot = WechatBot(webhook_url)
    bot.send_text(content="hello1", mentioned_list=["@all"])
    bot.send_text(content="hello2", mentioned_list=["@all"], mentioned_mobile_list=["18774970063"])
    md = "实时新增用户反馈<font color=\"warning\">132例</font>,请相关同事注意。\n>类型:<font color=\"comment\">用户反馈</font>>普通用户反馈:<font color=\"comment\">117例</font>>VIP用户反馈:<font color=\"comment\">15例</font>"
    bot.send_markdown(content=md)
    bot.send_picture(image_path=r"xxxxxx.png")
    articles = [
        {
            "title": "中秋节礼品领取",
            "description": "今年中秋节公司有豪礼相送",
            "url": "www.qq.com",
            "picurl": "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"
        }
    ]
    bot.send_text_picture(articles=articles)
    filepath = r"xxxxxxx\apiautotest-report-2023-05-11 14_57_18.html"
    bot.send_file(media_id=bot.upload_file(filepath))

到了这里,关于封装Python脚本:使用企业微信机器人发送消息至企业微信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#使用企业微信群机器人推送生产数据

        在日常的工作生产中,经常会有将将生产数据或者一些信息主动推送给相关的管理人员,我们公司在开发WMS系统时,为了仓库的储存安全,需要在危废品库存达到一定的储量时,自动通知仓管员去处理危废品,所以就需要程序自动的通过企业微信告知仓管员,这个时候就

    2024年02月10日
    浏览(38)
  • 【Python微信机器人】第六七篇: 封装32位和64位Python hook框架实战打印微信日志

    目前的系列目录(后面会根据实际情况变动): 在windows11上编译python 将python注入到其他进程并运行 注入Python并使用ctypes主动调用进程内的函数和读取内存结构体 调用汇编引擎实战发送文本和图片消息(支持32位和64位微信) 允许Python加载运行py脚本且支持热加载 利用汇编和反汇编

    2024年02月04日
    浏览(31)
  • 零代码,使用 Dify 和 Laf 两分钟接入企业微信 AI 机器人

    原文链接:https://docs.dify.ai/v/zh-hans/use-cases/integrate-with-wecom-using-dify Dify 允许创建 AI 应用,并提供二次开发的能力。这里我将演示创建一个法律问答助手的 AI 应用,称作“知法”。在本篇教程中,我将指导你为“知法”接入企业微信。 企业微信的管理员权限 一个 Dify 的帐号

    2024年02月11日
    浏览(32)
  • 企业微信创建群机器人步骤

    1.选择群,右键点击“管理聊天信息“   2.添加机器人的信息    3.创建好的机器人都有一个唯一的Webhook地址,点击Webhook地址就可以看到文档说明,自动推送消息需要自行开发。     开发者中心地址:https://developer.work.weixin.qq.com/

    2024年02月13日
    浏览(32)
  • 企业微信群:机器人实现定时提醒功能

    如果每天都需要,或者经常需要提醒企业微信群里面的人做某一件事情的话,靠人力去实现比较费力,而且偶尔忘记。 正好,企业微信群有一个机器人,正可以实现这一功能。 1、首先,在企业微信群,添加一个机器人。 2、根据企业微信机器人的配置说明,编写程序。这里

    2024年02月16日
    浏览(89)
  • Zabbix配置企业微信报警机器人

    微信告警机器人是一种可以将Zabbix告警通知发送到微信群或个人微信号的工具。 1、申请企业微信 自己到企业微信官网申请一个账号 2、配置微信企业号 1、创建机器人 在电脑企业微信群创建机器人 在企业微信上创建一个群聊,并添加需要接收告警通知的成员。 在群管理创建

    2024年02月06日
    浏览(24)
  • 基于ChatGPT的企业微信机器人

    登录OpenAI的账号后,再点击右上角的“Personal”图标,然后点击“view API keys”进入API页面。 点击“create new secret key”按钮。 生成秘钥之后,把秘钥复制下来。 根目录下的config-template.json文件是配置文件的模板,复制该模板,修改复制的文件名为:config.json 打开刚才复制的c

    2024年02月13日
    浏览(30)
  • 使用Python做一个微信机器人

    实现代码和pip安装: https://blog.csdn.net/Qwertyuiop2016/article/details/135076957 简介 该程序将微信的内部功能提取出来,然后在程序里加载Python,接着将这些功能导出成库函数,就可以在Python里使用这些函数 程序启动的时候会执行py_code目录下的main.py,类似于你在命令行使用 python main

    2024年02月07日
    浏览(26)
  • SQL企业微信群机器人消息推送

     --参考资料地址         --微软官方地址: https://learn.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/ole-automation-stored-procedures-transact-sql?view=sql-server-ver16         --腾讯官方地址:https://developer.work.weixin.qq.com/         --使用教程:         --1.开启数据库的功能, \\\"只

    2024年02月08日
    浏览(26)
  • PowerShell 实现企业微信机器人推送消息

    在ARMS告警管理中创建企业微信机器人后,您可以在通知策略中指定对应的企业微信群用于接收告警。当通知策略的匹配规则被触发时,系统会自动向您指定的企业微信群发送告警通知。企业微信群收到通知后,您可以在企业微信群中对告警进行管理。 通过接口实现在群里发

    2024年02月06日
    浏览(91)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包