前言:目前很多公司用的是企业微信或者钉钉,对于服务的可用性都会有一个告警通知,方面我们及时了解信息,这里我做了一个简单的封装,方便大家使用!

#!/usr/bin/env python
# _*_ coding: utf-8 _*_
# @project : dadi-api-platform
# @File    : send_notify.py
# @Date    : 2021/2/23 11:28 上午
# @Author  : 李文良
import requests
import time
import hmac
import hashlib
import base64
import urllib.parsedef send_wxwork_notify_markdown(content, api_key, headers=None):if headers is None:headers = {'Content-Type': 'application/json'}hook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={}".format(api_key)data = {"msgtype": "markdown","markdown": {"content": "{}".format(content)}}notify_res = requests.post(url=hook_url, json=data, headers=headers)return notify_resdef send_wxwork_notify_text(content, mentioned_mobile_list, api_key, headers=None):if headers is None:headers = {'Content-Type': 'application/json'}if not mentioned_mobile_list or not isinstance(mentioned_mobile_list, list):raise TypeError("输入的手机号应该是一个列表!")hook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={}".format(api_key)data = {"msgtype": "text","text": {"content": "{}".format(content),"mentioned_mobile_list": mentioned_mobile_list}}notify_res = requests.post(url=hook_url, json=data, headers=headers)return notify_resdef send_ding_talk_notify_markdown(content_title, content_text, access_token, at_mobiles=[], secret=None, headers=None):if headers is None:headers = {'Content-Type': 'application/json'}hook_url = "https://oapi.dingtalk.com/robot/send?access_token={}".format(access_token)if secret:timestamp, sign = generate_timestamp_and_sign(secret)hook_url = "https://oapi.dingtalk.com/robot/send?access_token={}&timestamp={}&sign={}".format(access_token,timestamp, sign)data = {"msgtype": "markdown",}if at_mobiles and "@all" in at_mobiles:data['markdown'] = {"title": "{} @all".format(content_title),"text": "{} @all".format(content_text)}data['at'] = {"atMobiles": at_mobiles,"isAtAll": True}elif at_mobiles and "@all" not in at_mobiles:if len(at_mobiles) > 1:at_mobiles_str = "@".join(at_mobiles)at_mobiles_str = "@{}".format(at_mobiles_str)else:at_mobiles_str = "@{}".format(at_mobiles[0])data['markdown'] = {"title": "{} {}".format(content_title, at_mobiles_str),"text": "{} {}".format(content_text, at_mobiles_str)}data['at'] = {"atMobiles": at_mobiles,"isAtAll": False}notify_res = requests.post(url=hook_url, json=data, headers=headers)return notify_resdef generate_timestamp_and_sign(secret):timestamp = str(round(time.time() * 1000))secret_enc = secret.encode('utf-8')string_to_sign = '{}\n{}'.format(timestamp, secret)string_to_sign_enc = string_to_sign.encode('utf-8')hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))return timestamp, signif __name__ == "__main__":now_time = time.strftime("%Y-%m-%d %H:%M:%S")H5_URL = ['https://staging.airdoc.com/user/report/xYwZ08fWMzCixeOG3%2BMNRlzgaetiA30LtGBqj%2BjK8qD0OUiVdfBLKilRThZnP8gd','https://staging.airdoc.com/user/report/%2F52BwBuKeO3SAWrk1459MYSQQ4t5FRUMSEI9vpfoQAaESxwr9I%2Fnp199qfY5LHKe','https://staging.airdoc.com/user/report/SJEEz9rBe33UAl7iTo3DZA6Y2wvrYR2PBSk1BTPAjKVrmZQjgmWty5W7ZMuxpyzN']PDF_URL = ['https://staging.airdoc.com/user/report/xYwZ08fWMzCixeOG3%2BMNRlzgaetiA30LtGBqj%2BjK8qD0OUiVdfBLKilRThZnP8gd','https://staging.airdoc.com/user/report/%2F52BwBuKeO3SAWrk1459MYSQQ4t5FRUMSEI9vpfoQAaESxwr9I%2Fnp199qfY5LHKe','https://staging.airdoc.com/user/report/SJEEz9rBe33UAl7iTo3DZA6Y2wvrYR2PBSk1BTPAjKVrmZQjgmWty5W7ZMuxpyzN']notify_title = '接口测试通知'content = "**{}**\n\n" \"测试用例1信息如下:\n\nH5_URL: **{}**\n\nPDF_URL: **{}**\n\n" \"测试用例2信息如下:\n\nH5_URL: **{}**\n\nPDF_URL: **{}** \n\n" \"测试用例3信息如下:\n\nH5_URL: **{}**\n\nPDF_URL: **{}** \n\n" \"报告生成时间: **{}** \n\n".format(notify_title, H5_URL[0], PDF_URL[0], H5_URL[1], PDF_URL[1], H5_URL[2],PDF_URL[2], now_time)notify_res = send_ding_talk_notify_markdown(notify_title, content,"246ca8e0c8fd55d8949dd484eb4aae1d6675565e45e321f51744ce2973fe7d5c8f6",[1577925XXXX],"SEC00db279767bb3929bfa7dd86c139370ce65651a1cc189303c966524b553fcef1cc51")print(notify_res.text)pass

企业微信消息推送和钉钉消息推送python代码封装相关推荐

  1. 基于Java实现企业微信群聊机器人-文件上传+消息推送(保证可用)

    基于Java实现企业微信群聊机器人-文件上传+消息推送 1.pom.xml(注意版本尽量保持一致) 2.文件工具类 3.企业微信请求类 4.企业微信响应类 5.发送方法 6.企业微信机器人创建和配置 ...

  2. 【.net】通过企业微信web api给指定用户发送消息

    前言 在很多业务场景中经常会遇到与微博微信进行通信的需求,今天就和大家一起研究一下如果通过企业微信web api给指定用户发送消息 一.创建应用 1.打开企业微信并登录 https://work.we ...

  3. SAP ABAP 添加企业微信群机器人并调用 API 发送消息

    SAP ABAP 添加企业微信群机器人并调用 API 发送消息 引言: 这篇文章以我在个人开源项目"任务管理服务(ZTASK)"中的应用为例,通过讲述使用企业微信机器人实现任务的通 ...

  4. 送小公主——哆啦A梦(Python代码实现)

    目录 1 送她的多啦A梦 2 白驹过隙  3 Python代码实现 1 送她的多啦A梦 一个哆啦A梦让她开心开心好久好久.我也很开心,昨天送了一个实体模型,今天用Python代码再弄一个送给她. 哆啦 ...

  5. Android 实现企业微信自动打卡任务同时支持钉钉急速打卡模式

    前言 之前公司一直是弹性工作制 以工作任务为目标 自由上下班 日子过的不亦乐乎 自从人事来了以后 就颁布了第一条法令 看到这个无疑的痛苦的 对于一个几年没有打卡散人来说!!! 同时公司的财务小姐姐和其 ...

  6. 企业微信的IM架构设计揭秘:消息模型、万人群、已读回执、消息撤回等

    本文作者潘唐磊,腾讯WXG(微信事业群)开发工程师,毕业于中山大学.内容有修订. 1.内容概述 本文总结了企业微信的IM消息系统架构设计,阐述了企业业务给IM架构设计带来的技术难点和挑战,以及技术方案 ...

  7. php企业微信发送微信群组消息,企业微信可以给群成员单独群发消息吗?怎么给企业微信群里所有成员群发消息?...

    使用 企业微信可以给某个群的用户群发消息吗 开展活动时,我们会准备活动群,方便用户交流沟通.但是在群聊中发通知时,有很多客户并不能看到,这时我们可以将活动群中的客户筛选出来,给这些用户群发消息,确保通 ...

  8. 【企业微信实现免密登录以及发送消息(企业内部应用)】

    创建应用: 首先是注册企业微信,没有企业信息个人也能注册,个人注册企业微信后无法认证,如果有开发第三方应用的需求就必须进行企业认证,如果只是开发企业内部应用,则无需注册也OK. 这里需要注意一下可见范 ...

  9. 使用企业微信的API给指定用户发送消息

    上个月比较忙,等不忙了继续写点基础教程(五一还在高铁上写项目在).因为公司的原因,自己学习了点JavaWeb的知识,重新写了一个简单的后台管理,用于记录用户注册信息的.其中有这样的一个要求,就是在用户 ...

最新文章

  1. Windows Server 2008英文正式版安装体验
  2. scratch小游戏脚本大全_酷酷带你一起做小游戏--跳一跳
  3. java生成验证码实例_Java生成验证码功能实例代码
  4. 109. Leetcode 309. 最佳买卖股票时机含冷冻期 (动态规划-股票交易)
  5. android banner阴影,仿照锤子科技官网的banner 3d效果
  6. ifm virtual check part3
  7. 【剑指offer15.二进制中1的个数】——位操作(左移右移等)
  8. 前端 JS/TS 调用 ASP.NET Core gRPC-Web
  9. mac 下安装pip
  10. vue 跨域问题 - 总结篇
  11. 系统梳理 Tensorflow、PyTorch 等深度学习框架,洞悉 AI 系统底层原理和算法
  12. 按键精灵 识别html,按键精灵中分析网页元素特征字符串
  13. Java 爬虫系列丨(一)爬虫介绍
  14. Java基础SE.03.Java面向对象
  15. matlab编写优化目标函数,基于MATLAB的二级齿轮减速器的优化设计
  16. Qt自带mingw使用
  17. python实现黄金分割法确定极小点
  18. [最新] Android 代码规范大全(Android开发速看)
  19. python处理grd格式文件_python json pickle 模块
  20. 猎头猎取人才会注重人才的哪些点?

热门文章

  1. 门控循环单元-GRU单元(Gated Recurrent Unit)
  2. win7开启uasp协议_UASP与USB模式切换工具
  3. 关于Arduino Mega2560的最基本介绍
  4. 利用华硕e6308_P8P67_PRO主板开发双目立体视觉问题小结
  5. 编码规范:依据和实施办法
  6. CSS怎么控制行高?
  7. 网吧智慧消防监控平台
  8. 广数980tc3尾座锁定代码_数控车床的编程方法
  9. AE简单粒子特效动画制作
  10. 谷歌分析配置行为事件