飞书机器人告警实现

功能实现说明

  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")
相关推荐
ClouGence19 分钟前
CloudDM 新增支持 GaussDB 与 openGauss:国产数据库管理更高效
数据库·sql·ci/cd
sukalot41 分钟前
window显示驱动开发—在混合系统中使用跨适配器资源
数据库·驱动开发·音视频
洛卡卡了44 分钟前
数据库加密方案实践:我们选的不是最完美,但是真的够用了。
数据库·后端·面试
幽络源小助理1 小时前
MySQL实战优化高手教程 – 从架构原理到生产调优
数据库·mysql·架构
正在努力的小河1 小时前
Linux设备树简介
linux·运维·服务器
小张快跑。1 小时前
Tomcat下载、安装及配置详细教程
java·服务器·tomcat
Runing_WoNiu1 小时前
Redis主从架构、哨兵模式及集群比较
数据库·redis·架构
没有不重的名么2 小时前
Tmux Xftp及Xshell的服务器使用方法
服务器·人工智能·深度学习·机器学习·ssh
wdxylb3 小时前
云原生俱乐部-杂谈1
服务器·云原生
考虑考虑3 小时前
postgressql更新时间
数据库·后端·postgresql