Python脚本实现向飞书发送卡片消息

news2024/11/15 8:00:41

目录

  • 1 先创建一个卡片消息
  • 2 Python脚本
    • 2.1 告警测试
    • 2.2 告警恢复
  • 总结

1 先创建一个卡片消息

飞书卡片搭建工具
在这里插入图片描述

根据自己的需要创建一个消息卡片:
在这里插入图片描述

可以在 卡片源代码 中看到这个卡片的代码信息
在这里插入图片描述

2 Python脚本

2.1 告警测试

test.py 文件

"""
飞书群机器人发送通知
"""
import time
import urllib3
import datetime
import json
import logging
import requests
from flask import Flask,jsonify,request

# 获取当前时间
# current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

# 配置日志记录器
logging.basicConfig(level=logging.INFO)
Logger = logging.getLogger(__name__)

urllib3.disable_warnings()
webhook_url="https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx"

class FlybookRobotAlert():
    def __init__(self):
        self.webhook = webhook_url
        self.headers = {"Content-Type": "application/json; charset=UTF-8"}

    def post_to_robot(self, post_data):
        '''
        给飞书机器人发送请求
        :param data:
        :return:
        '''
        try:
            resp = requests.request(method="POST", url=self.webhook, data=post_data, headers=self.headers).json()
            if resp.get("StatusCode") == 0 and resp.get("msg") == "success":
                Logger.info(f"飞书通知发送成功,msg={resp}")
            else:
                Logger.warning(f"飞书通知发送失败,{resp}")
        except Exception as e:
            Logger.warning("飞书通知发送异常")
            Logger.warning(e)
            pass

    def send_message(self, msg, color):

        # 飞书通知标题
        robot_headers = "LibreNMS告警"
       # msg:告警信息
       # color:来定义卡片的颜色

        execute_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

  
        # 定义卡片
        card = json.dumps({
            "config": {
                "wide_screen_mode": True
            },
            "i18n_elements": {
                                "zh_cn": [
                                        {
                                                "tag": "hr"
                                        },
                                        {
                                                "tag": "column_set",
                                                "flex_mode": "none",
                                                "horizontal_spacing": "default",
                                                "background_style": "default",
                                                "columns": [
                                                        {
                                                                "tag": "column",
                                                                "elements": [
                                                                        {
                                                                                "tag": "div",
                                                                                "text": {
                                                                                        "tag": "plain_text",
                                                                                        "content": msg,
                                                                                        "text_size": "normal",
                                                                                        "text_align": "left",
                                                                                        "text_color": "default"
                                                                                }
                                                                        }
                                                                ],
                                                                "width": "weighted",
                                                                "weight": 1
                                                        }
                                                ]
                                        }
                                ]
                        },
                        "i18n_header": {
                                "zh_cn": {
                                        "title": {
                                                "tag": "plain_text",
                                                "content": robot_headers
                                        },
                                        "subtitle": {
                                                "tag": "plain_text",
                                                "content": "时间:%s"%execute_time
                                        },
                                        "template": color
                                }
                        }
        })

        msg_body = json.dumps({"msg_type": "interactive", "card": card})
        self.post_to_robot(msg_body)
        # {'StatusCode': 0, 'StatusMessage': 'success', 'code': 0, 'data': {}, 'msg': 'success'}
        return





def main():
    msg="失败!!!"
    color = "red"
    if "恢复" in msg:
        color="green"

    web = FlybookRobotAlert()
    web.send_message(msg,color)
    
# 程序入口
if __name__ == "__main__":
        main()

运行:

# 在执行第一次的时候可能会报错没有模块,根据提示安装即可 
# 安装命令: pip install 模块名
python3 test.py 
INFO:__main__:飞书通知发送成功,msg={'StatusCode': 0, 'StatusMessage': 'success', 'code': 0, 'data': {}, 'msg': 'success'}

在这里插入图片描述

2.2 告警恢复

test.py 文件

"""
飞书群机器人发送通知
"""
import time
import urllib3
import datetime
import json
import logging
import requests
from flask import Flask,jsonify,request

# 获取当前时间
# current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

# 配置日志记录器
logging.basicConfig(level=logging.INFO)
Logger = logging.getLogger(__name__)

urllib3.disable_warnings()
webhook_url="https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx"

class FlybookRobotAlert():
    def __init__(self):
        self.webhook = webhook_url
        self.headers = {"Content-Type": "application/json; charset=UTF-8"}

    def post_to_robot(self, post_data):
        '''
        给飞书机器人发送请求
        :param data:
        :return:
        '''
        try:
            resp = requests.request(method="POST", url=self.webhook, data=post_data, headers=self.headers).json()
            if resp.get("StatusCode") == 0 and resp.get("msg") == "success":
                Logger.info(f"飞书通知发送成功,msg={resp}")
            else:
                Logger.warning(f"飞书通知发送失败,{resp}")
        except Exception as e:
            Logger.warning("飞书通知发送异常")
            Logger.warning(e)
            pass

    def send_message(self, msg, color):

        # 飞书通知标题
        robot_headers = "LibreNMS告警"
       # msg:告警信息
       # color:来定义卡片的颜色

        execute_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

  

        card = json.dumps({
            "config": {
                "wide_screen_mode": True
            },
            "i18n_elements": {
                                "zh_cn": [
                                        {
                                                "tag": "hr"
                                        },
                                        {
                                                "tag": "column_set",
                                                "flex_mode": "none",
                                                "horizontal_spacing": "default",
                                                "background_style": "default",
                                                "columns": [
                                                        {
                                                                "tag": "column",
                                                                "elements": [
                                                                        {
                                                                                "tag": "div",
                                                                                "text": {
                                                                                        "tag": "plain_text",
                                                                                        "content": msg,
                                                                                        "text_size": "normal",
                                                                                        "text_align": "left",
                                                                                        "text_color": "default"
                                                                                }
                                                                        }
                                                                ],
                                                                "width": "weighted",
                                                                "weight": 1
                                                        }
                                                ]
                                        }
                                ]
                        },
                        "i18n_header": {
                                "zh_cn": {
                                        "title": {
                                                "tag": "plain_text",
                                                "content": robot_headers
                                        },
                                        "subtitle": {
                                                "tag": "plain_text",
                                                "content": "时间:%s"%execute_time
                                        },
                                        "template": color
                                }
                        }
        })

        msg_body = json.dumps({"msg_type": "interactive", "card": card})
        self.post_to_robot(msg_body)
        # {'StatusCode': 0, 'StatusMessage': 'success', 'code': 0, 'data': {}, 'msg': 'success'}
        return





def main():
    msg="失败!!! 恢复了 !!"
    color = "red"
    if "恢复" in msg:
        color="green"

    web = FlybookRobotAlert()
    web.send_message(msg,color)
    
# 程序入口
if __name__ == "__main__":
        main()

运行后的:

# 在执行第一次的时候可能会报错没有模块,根据提示安装即可 
# 安装命令: pip install 模块名
python3 test.py 
INFO:__main__:飞书通知发送成功,msg={'StatusCode': 0, 'StatusMessage': 'success', 'code': 0, 'data': {}, 'msg': 'success'}

在这里插入图片描述

总结

使用python脚本发送卡片信息主要有两步:

  • 在飞书上创建一个机器人,获取webhook
  • 创建一个消息卡片,可以查到该卡片的代码
  • 写python脚本
    • 在执行python脚本时注意,最好可以在虚拟环境中执行
    • 第一次执行上述脚本时会报错:部分模块没有安装,根据提示安装完成即可
    • 安装模块命令: pip install XXXX

可以改进:现在支持通过卡片id来调用模板,不需要在代码中定义,还需要再研究,有想法的欢迎一起讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MacOS安装Docker Desktop

目录 安装Docker Desktop 1.下载 2.安装 3.验证 安装Docker Desktop 1.下载 访问Docker官方网站下载页面:https://www.docker.com/products/docker-desktop 选择自己所需的版本下载即可 2.安装 3.验证 1.查询版本号 docker --version 2.也可以运行一个简单的…

【vue、Electron】搭建一个Electron vue项目过程、将前端页面打包成exe 桌面应用

文章目录 前言使用 electron-vue 创建项目1. 安装 vue-cli(如果未安装)2. 使用 electron-vue 模板创建项目3. 安装和配置 electron-builder4. 运行Electron项目5. 打包应用 可能遇到的问题解决Electron vue首次启动巨慢无法加载执行npm run electron:bui…

从地图信息实时检测路口的各向通行状况、红绿灯及溢出情况

高德地图、百度地图都能获得实时的道路信息。 C# 编写的路况信息爬虫可获得准实时(1分钟间隔)的路口的各向通行状况、红绿灯及溢出情况。 优势: 投入少,效果好,无需安装设备; 缺陷: 时间间隔…

数据集不够用?3DGS助力生成带标注的全新扩展数据!

作者主页:https://louiszengcn.github.io/ 论文标题: Realistic Surgical Image Dataset Generation Based On 3D Gaussian Splatting 导读: 近年来,随着AI技术的飞速发展,数据量的增加为数据驱动的神经网络提供了更强…

汽车免拆诊断案例 | 2012 款大众速腾车发动机偶尔抖动

故障现象 一辆2012款大众速腾车,搭载CST发动机和干式双离合变速器,累计行驶里程约为17万km。车主反映,发动机偶尔抖动。 故障诊断 接车后试车,确认发动机怠速偶尔抖动,且在D挡起步时抖动明显。用故障检测仪检测&…

专题◉万字长文!盘点过去一年最出圈的Prompt项目教程,有3份在悄悄更新

1. OpenAI 官方出品 | 提示工程最权威的教程 (最新版) 2023年6月,OpenAI 发布了一篇〖*GPT Best Practice (GPT 最佳实践)* 〗教程,详细介绍 ChatGPT Prompt 交互策略&技巧,并且给出了示例说明。 一年时间过去了,OpenAI 不…

Unity射击游戏开发教程:(33)控制飞机左右移动

在本文中,我将介绍如何在玩家朝该方向移动时添加向左和向右转动的动画。 我们已经将左转和右转动画导入到我们的项目中。在我使用的动画中,它们只有两帧,因为我们希望飞机倾斜得很快,这样玩家在按下相应按钮时就能直接感觉到转弯。 </

为什么帕金森病患者在紧张或焦虑状态下震颤会加重?

为什么帕金森病患者在紧张或焦虑状态下震颤会加重&#xff1f; 帕金森病患者在紧张或焦虑状态下震颤加重的原因可能与多个因素有关。首先&#xff0c;帕金森病与大脑中多巴胺水平的降低有关&#xff0c;这种神经递质的失衡会影响运动控制。当患者感到紧张时&#xff0c;大脑皮…

嵌入式软件开发之状态机与事件驱动分析

状态机是一种程序架构,事件驱动也是一种程序架构,在某些开发场景里面,两者是可以一同合并使用的。 事件驱动的概念 生活中有很多事件驱动的例子,上自习瞒着老师偷睡觉就是很生动的一个。 我们都是从高中时代走过来的,高中的学生苦啊,觉得睡觉是世界上最奢侈的东西, 有时…

运维监控工具 PIGOSS BSM :PostgreSQL数据库监控指标

在PostgreSQL数据库中&#xff0c;为了确保其稳定运行和性能优化&#xff0c;我们需要监控一系列关键的指标。以下是一些主要的PostgreSQL监控指标介绍&#xff1a; 连接数&#xff08;Connections&#xff09;&#xff1a; 定义&#xff1a;连接数是指当前正在与数据库建立连…

数据库管理-第236期 数据库一体机的价值(20240829)

数据库管理236期 2024-08-29 数据库管理-第236期 数据库一体机的价值&#xff08;20240829&#xff09;1 误区2 硬件3 操作系统4 数据库总结 数据库管理-第236期 数据库一体机的价值&#xff08;20240829&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff…

深入探索【Hadoop】生态系统:Hive、Pig、HBase及更多关键组件(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Hadoop简介 2、Hadoop生态系统的构成概览 3、…

native 添加堆栈

第一种方法 montecarloh53b getVehicleModel:default error: frameworks/native/services/surfaceflinger/Android.bp:248:1: module "surfaceflinger" variant "android_arm64_armv8-a": depends on //system/unwinding/libbacktrace:libbacktrace which …

YarnClient发送和接收请求源码解析

YarnClient发送和接收请求流程 Yarn是通过RPC协议通信的&#xff0c;协议类型可以通过查看RpcKind类得知&#xff0c;总共有三种类型&#xff1a; RPC_BUILTIN ((short) 1), // Used for built in calls by tests RPC_WRITABLE ((short) 2), // Use WritableRp…

CentOS 7安装和配置 NFS

前言 NFS 是 Network File System 的缩写&#xff0c;即网络文件系统。功能是让客户端通过网络访问不同主机上磁盘里的数据&#xff0c;主要用在类 Unix 系统上实现文件共享的一种方法。本例演示 CentOS 7 下安装和配置 NFS 的基本步骤。 环境说明 CentOS 7&#xff08;Mini…

Agent Q介绍:具有规划和自愈能力的下一代人工智能代理的研究突破

近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;的功能已经改变了自然语言处理和理解&#xff0c;取得了令人瞩目的里程碑式成就。尽管取得了这些进步&#xff0c;大型语言模型在交互环境中仍面临巨大挑战&#xff0c;尤其是在需要多步骤推理的任务中&#xff0c;如…

变电站智能巡检机器人:构建智能化电力运维新模式

随着现代电力系统规模的不断扩大&#xff0c;变电站作为电力输送和分配的关键节点&#xff0c;面临着越来越高的运维要求。传统的人工巡检方式存在效率低、劳动强度大、安全隐患多等问题&#xff0c;无法满足日益复杂的电力系统需求。在此背景下&#xff0c;变电站智能巡检机器…

偷偷用了这10款AI写作神器,再也没加过班!

前言 [ 自2022年Chat-GPT在全球掀起AI革命浪潮&#xff0c;AI开始在内容的生产方式进行颠覆性改变。 其中&#xff0c;AI写作工具的崛起&#xff0c;为内容创作者打开了一个全新创作世界&#xff0c;无论用户在办公写作、自媒体写作还是兴趣写作&#xff0c;在效率方面都得到…

【数据结构】优先级队列 — 堆

文章目录 前言1. 优先级队列1.1 概念1.2 特性 2. 堆2.1 概念2.2 存储方式 3. 堆的模拟实现3.1 堆的创建3.2 堆的插入3.3 堆的删除 4. PriorityQueue4.1 注意事项4.2 构造器介绍4.3 常用方法介绍 5. 经典题型6. 结语 前言 我们之前学习过队列&#xff0c;它是遵循先进先出原则的…

云上Oracle 数据库本地备份部署测试

1.说明 由于运行在云上的Oracle数据库暂无本地备份&#xff0c;为了保障租户业务系统的可持续性以及数据安全&#xff0c;特此进行数据库备份本地部署并进行测试。 2.备份策略 &#xff08;1&#xff09;数据库数据量 SQL> select sum(bytes)/1024/1024/1024 from dba_segme…