飞书机器人告警实现

功能实现说明

  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")
相关推荐
香蕉大香蕉(06敬畏市场)3 分钟前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
LaughingZhu19 分钟前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
未来之窗软件服务31 分钟前
Linux 运维日志删除的多种方式—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
standxy37 分钟前
即时库存同步实战:从旺店通拉取库存详情落库 MySQL 的完整策略
数据库·集成·电商
麦壳饼37 分钟前
SonnetDB:工业 IoT 中的 PID 历史分析与 PLC 协作
数据库·sonnetdb
吹什么轩42 分钟前
MySQL 事务管理:从 ACID 到 MVCC,一篇讲透
数据库·mysql
小雉系统43 分钟前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
熊猫钓鱼>_>1 小时前
鸿蒙 PC 三方库适配复盘:libfvad 1.0 —— 把 WebRTC VAD 做成能装进采集链路的静态库
服务器·开发语言·华为·harmonyos·openharmony·适配·鸿蒙pc
时间售卖铺1 小时前
Oracle DQL精髓:从基础到高级实战
运维·数据库·云原生·oracle
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十七):vmalloc — 内核要“虚拟连续“就够:物理页逐个凑,页表来连
linux·运维·服务器