飞书机器人告警实现

功能实现说明

  1. 准备好config.json文件,用于存放配置文件信息

  2. 准备好config.py用于读取配置文件信息

  3. feishu.py用于实现获取临时token以及推送消息至指定机器人并推到指定飞书用户

config.json

复制代码
{
    "auth":{
        "app_id": "cli_xxxxxc",
        "app_secret": "xxxxxxx"
    },
    "user_ids":{
        "replace_your_feishu_user_name":"replace_your_feishu_user_name's_user_id"
    }
}

config.py

复制代码
"""
This module provides a Config class for managing configuration settings for the Feishu API integration.

It reads configuration data from a JSON file and provides methods to access various settings.
"""

import json

class Config:
    """
    A class to manage configuration settings for the Feishu API integration.

    This class reads configuration data from a JSON file and provides methods
    to access app credentials and user IDs.
    """

    def __init__(self, config_file='config.json'):
        """
        Initialize the Config instance.

        Args:
            config_file (str): Path to the configuration JSON file. Defaults to 'config.json'.

        Raises:
            FileNotFoundError: If the specified config file is not found.
            json.JSONDecodeError: If the config file is not valid JSON.
            KeyError: If expected keys are missing in the config file.
        """
        with open(config_file, 'r') as f:
            config = json.load(f)
        
        # Extract configuration values
        self.app_id = config['auth']['app_id']
        self.app_secret = config['auth']['app_secret']
        self.user_ids = config['user_ids']

    def get_app_id(self):
        """
        Get the Feishu app ID.

        Returns:
            str: The app ID.
        """
        return self.app_id

    def get_app_secret(self):
        """
        Get the Feishu app secret.

        Returns:
            str: The app secret.
        """
        return self.app_secret

    def get_user_id(self, name):
        """
        Get a user ID by name.

        Args:
            name (str): The name of the user.

        Returns:
            str: The user ID if found, None otherwise.
        """
        return self.user_ids.get(name)

if __name__=='__main__':
    # Example usage of the Config class
    config = Config()
    print(config.get_app_id())
    print(config.get_app_secret())
    print(config.get_user_id('test'))

feishu.py

飞书机器人消息推送功能实现

复制代码
import urllib3
import json
import ssl
import warnings
from config import Config

# Suppress only the single InsecureRequestWarning from urllib3 needed.
warnings.filterwarnings('ignore', category=urllib3.exceptions.InsecureRequestWarning)

class Feishu:
    """
    A class to interact with the Feishu API.

    This class provides methods to authenticate and communicate with the Feishu API,
    including obtaining a tenant access token for further API operations.
    """

    def __init__(self):
        """
        Initialize the Feishu instance.

        Sets up the configuration, base URL, and creates a custom SSL context
        to allow unverified HTTPS connections (for development purposes only).
        """
        self.config = Config()
        self.base_url = "https://open.feishu.cn/open-apis"
        self.tenant_access_token = None
        
        # Create a custom SSL context
        ssl_context = ssl.create_default_context()
        ssl_context.check_hostname = False
        ssl_context.verify_mode = ssl.CERT_NONE
        
        # Use the custom SSL context in PoolManager
        self.http = urllib3.PoolManager(
            ssl_context=ssl_context
        )

    def get_tenant_access_token(self):
        """
        Obtain a tenant access token from the Feishu API.

        This method sends a POST request to the Feishu API to get a tenant access token.
        It uses the app_id and app_secret from the config to authenticate the request.

        Returns:
            str: The tenant access token if successful, None otherwise.

        Raises:
            Exception: If an error occurs during the API request.
        """
        url = f"{self.base_url}/auth/v3/tenant_access_token/internal"
        headers = {
            "Content-Type": "application/json"
        }
        data = {
            "app_id": self.config.get_app_id(),
            "app_secret": self.config.get_app_secret()
        }
        try:
            response = self.http.request("POST", url, headers=headers, body=json.dumps(data))
            response_data = json.loads(response.data.decode('utf-8'))
            
            if response.status == 200:
                self.tenant_access_token = response_data.get("tenant_access_token")
                if self.tenant_access_token:
                    return self.tenant_access_token
                else:
                    print("Error: tenant_access_token not found in the response")
            else:
                print(f"Error: HTTP {response.status}")
            
            print("Response data:", response_data)
        except Exception as e:
            print(f"An error occurred: {str(e)}")
        
        return None

if __name__ == "__main__":
    feishu = Feishu()
    token = feishu.get_tenant_access_token()
    if token:
        print(f"Successfully obtained tenant access token: {token}")
    else:
        print("Failed to obtain tenant access token")
相关推荐
李兆龙的博客4 小时前
问津集 #26:Lakebase——Postgres 的版本化页面存储、数据库分支与计算弹性
数据库
_upupup5 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
倔强的石头_6 小时前
聊聊金仓KFS:一款把数据同步软件做扎实的产品
数据库
闲云野鹤在人间6 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
禾小西7 小时前
Redis:从两大维度和三大主线建立知识体系
数据库·redis·缓存
禾小西7 小时前
Redis 数据结构:快速的 Redis 有哪些慢操作?
数据结构·数据库·redis
数据库小学妹8 小时前
数据共享交换平台选型:交换方式对比与避坑指南
数据库·信创·数据同步·数据交换平台·政务数据共享·数据共享交换平台·数据库底座
Android系统攻城狮9 小时前
Linux Gstreamer深度解析之gst_audio_sink_get_type调用流程与实战(六十五)
linux·运维·服务器·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
loong_XL9 小时前
决策模型做内容安全检测:从踩坑到上线
数据库·安全·jev·决策模型
这个DBA有点耶9 小时前
数据库双轨并行实战:全量并行策略、增量延迟控制、双向回切与一致性校验
数据库·架构·dba