通过Func实现飞书应用通知消息加急处理

news2025/6/2 6:17:21

前言

在现代企业运作中,及时响应告警信息对保障系统的稳定性和业务的连续性至关重要。随着业务的数字化转型,越来越多的企业依赖于复杂的技术架构,这使得故障和异常事件的及时处理变得愈发重要。传统的告警通知方式往往存在响应不及时、信息传递不准确等问题,导致潜在风险未能及时识别和处理。

为了解决这些问题,我们借助飞书应用的强大功能,开发了一种新的告警消息发送机制。该机制不仅能够将告警信息迅速传递给指定的接收人,还可以根据事件的紧急程度实现加急处理。这一功能的实现,不仅提升了告警处理的效率,还增强了团队协作,确保关键事件能够在第一时间获得关注和解决。

在接下来的文章中,我们将详细介绍如何通过飞书应用实现这一功能,包括技术实现、代码示例以及应用场景分析。希望能够为广大开发者和运维人员提供实用的参考和指导。

前置条件

如需实现飞书应用告警,首先我们需要为观测云通知到用户配置一个飞书应用。该配置是在飞书应用后台完成创建,首先我们需要登录飞书后台并使用飞书账号登录。

创建新应用

  • 进入飞书开发者控制台后,点击左侧菜单中的“应用管理”。
  • 点击右上角的“创建应用”按钮。
  • 在弹出的窗口中,输入应用的名称、图标和描述,然后点击“创建”。

配置应用信息

在应用设置页面,可以编辑应用的基本信息,如名称、描述和图标。之后点击“权限管理”选项卡,选择您的应用所需的权限。例如,发送消息、获取用户信息等。并确保选择的权限符合您的应用需求,并点击“保存”。

配置应用的安全设置

在“安全设置”选项卡中设置应用的密钥和其他安全参数。注意需要记录下应用的 App ID 和 App Secret,后续开发调用时需要用到这两个字段。

提交审核

当您完成所有配置后,点击“提交审核”按钮。按照系统提示填写审核信息,确保信息准确无误。提交后,等待后台管理员的审核。这个审核完成后就可以实现应用上线。点击“上线”按钮,将应用发布到飞书平台。

管理应用权限

如需通过 Func 平台正确发送消息到飞书平台,您需要为这个应用开启"获取用户 user_id"、"通过手机号或邮箱获取用户 ID"、"获取与发送单聊、群组消息"、"以应用的身份发消息"、"发送应用内加急消息"这几个权限。如果没有这些权限,在消息完成发送后 Func 脚本无法基于返回的消息对指定用户进行加急。

Func 脚本开发

发送前准备

在向指定用户发送消息前,需要首先获取飞书应用的相关访问权限,获取租户 token 的接口如下:

AUTH_TOKEN_URL="https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal"

def _get_feishu_tenant_token():
    body = {
        "app_id": "cli_<your-app-id>",
        "app_secret": "<your-app-secret>"
    }

    rsp = _send_post_request(AUTH_TOKEN_URL,json=body,headers=HEADERS)
    print(rsp.text)
    return json.loads(rsp.text).get("tenant_access_token")

接口响应体说明:

名称类型描述
codeint错误码,0 表示成功,非 0 表示失败
msgstring错误描述
tenant_access_tokenstring获取的 Tenant Access Token,有效期为 2 小时
expireintToken 的有效期,单位为秒

这个接口需要使用我们上面申请创建应用时保存的 app_id 和 app_secret 用作请求体。平台会在调用接口后返回对应应用的租户 token,用于发起下面的获取用户信息请求。

获取用户信息请求的接口如下:

GET_USER_FEISHU_OPENID="https://open.feishu.cn/open-apis/contact/v3/users/batch_get_id"

def _get_feishu_user_open_id(t_token):
    headers = HEADERS
    headers['Authorization'] = "Bearer "+t_token

    print(headers)
    body = {
        "user_id_type":"open_id",
        "emails": [
            "your_employee@somesite.com"
        ],
        "include_resigned":False
    }
    rsp = _send_post_request(GET_USER_FEISHU_OPENID,json=body,headers=headers)
    print(rsp.text)

接口响应体说明:

名称类型描述
codeint错误码,非 0 表示失败
msgstring错误描述
data--
user_listuser_contact_info[]手机号或者邮箱对应的用户 ID 信息。
- user_idstring用户 ID,ID 类型与查询参数 user_id_type 的取值保持一致。例如,user_id_type 取值为 open_id,则该参数的用户 ID 值为用户的 open_id。
- mobilestring手机号,通过手机号查询时会返回该值。
- emailstring邮箱,通过邮箱查询时会返回该值。

获取到用户信息后,我们将比对观测云告警消息中收到的用户列表,在上述用户元数据中获取对应的 open_id,发起本次消息加急通知。

消息发送接口

完成用户信息的发送前准备后,调用飞书的发送消息接口,首先生成本次需要发送的告警消息。

SEND_MESSAGE_TO_USER="https://open.feishu.cn/open-apis/im/v1/messages"

def send_feishu_messages(open_id,t_token,alart_message):
    url = SEND_MESSAGE_TO_USER

    headers = HEADERS
    headers['Authorization'] = "Bearer "+t_token

    # 设置查询参数
    params = {
        'receive_id_type': 'open_id',
    }

    # 设置请求体
    body = {
        'receive_id': open_id,
        'msg_type': 'text',
        'content':alart_message
    }

    # 发起 POST 请求
    response = requests.post(
        url,
        headers=headers,
        params=params,
        json=body  # 使用 json 参数来发送请求体
    )

    # 检查响应状态码
    if response.status_code == 0:
        # 请求成功,处理响应
        print(data)
        return response.get("data").get("message_id")
    else:
        # 请求失败,输出错误信息
        print(f'Error: {response.status_code}, {response.text}')
        return None

接口参数如下:

名称类型必填描述
receive_idstring消息接收者的 ID,ID 类型与查询参数 receive_id_type 的取值一致。注意事项:给用户发送消息时,用户需要在机器人的可用范围内。例如,你需要给企业全员发送消息,则需要将应用的可用范围设置为全体员工。给群组发送消息时,机器人需要在该群组中,且在群组内拥有发言权限。如果消息接收者为用户,推荐使用用户的 open_id。示例值:"ou_7d8a6e6df7621556ce0d21922b676706ccs"
msg_typestring消息类型。可选值有:
-text:文本
-post:富文本
-image:图片
-file:文件
-audio:语音
-media:视频
-sticker:表情包
-interactive:卡片
-share_chat:分享群名片
-share_user:分享个人名片
-system:系统消息
contentstring消息内容,JSON 结构序列化后的字符串。该参数的取值与 msg_type 对应,例如 msg_type 取值为 text,则该参数需要传入文本类型的内容。
注意:
1、JSON 字符串需进行转义。例如,换行符 \n 转义后为 \n。文本消息请求体最大不能超过 150 KB。
2、卡片消息、富文本消息请求体最大不能超过 30 KB。如果使用卡片模板(template_id)发送消息,实际大小也包含模板对应的卡片数据大小。
3、如果消息中包含样式标签,会使实际消息体长度大于您输入的请求体长度。图片需要先上传图片,然后使用图片的 Key 发消息。音频、视频、文件需要先上传文件,然后使用文件的 Key 发消息。

需要注意的是,如您希望重新组织飞书消息通知的卡片格式,例如输出为富文本方式,则需要首先将观测云告警消息清洗为富文本格式,再传递给对应的参数。

应用内消息加急接口

消息发送成功并获取到消息回执的id后,就可以进一步启用应用内消息加急了。这里需要调用的接口和调用方式示例如下。该接口的调用,需要将刚刚获取的消息 id 作为路径参数的一部分,添加到 url 中。这和之前的接口增加为请求参数的方式不一样,使用的时候请注意。

SEND_MESSAGE_URGENT_TIP="https://open.feishu.cn/open-apis/im/v1/messages/{}/urgent_app"

def send_alart_message(message_id,t_token,u_id_list):
    url = SEND_MESSAGE_URGENT_TIP.format(message_id)

    headers = HEADERS
    headers['Authorization'] = "Bearer "+t_token

    # 设置查询参数
    params = {
        'user_id_type': 'open_id',
    }

    # 设置请求体
    body = {
        'user_id_list': u_id_list,
    }
    
    # 发起 POST 请求
    response = requests.post(
        url,
        headers=headers,
        params=params,
        json=body  # 使用 json 参数来发送请求体
    )

    # 检查响应状态码
    if response.status_code == 0:
        # 请求成功,处理响应
        print(data)
        return response.get("data").get("message_id")
    else:
        # 请求失败,输出错误信息
        print(f'Error: {response.status_code}, {response.text}')
        return None

接口发布

在 Func 平台中,点击「管理」-「同步 API」,将上述开发的飞书消息加急接口发布为 webhook,该接口最终提供给工作空间进行调用,将收到的告警信息转换为飞书加急消息。

工作空间配置

登录工作空间,在「告警」-「通知对象管理」中增加创建一个通知通道,将上面发布的 Webhook 地址填写到工作空间中形成一个新的通知通道。在该通道的成员中,填写当前消息加急需要通知的人员,需要注意的是这里的人员信息应至少包含飞书邮箱或手机等联系方式中的一个,否则 Func 接口将无法匹配需要加急的人员。

完成配置后就可以在告警监控器的配置中使用该通道,对相应的告警信息进行加急发送了。发送效果如下:

需要注意的是,应用机器人仅能对自身发布的消息进行加急,因此请务必使用webhook类通知对象,通过Func发布的飞书消息加急接口进行告警消息的发送和加急操作。

总结

通过观测云 DataFlux Func 可观测开发平台,我们可以灵活的将观测云包括告警在内的各种功能,同外部第三方系统进行对接,实现观测云功能的扩展。

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

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

相关文章

【目标检测】【AAAI-2022】Anchor DETR

Anchor DETR&#xff1a; Query Design for Transformer-Based Object Detection 锚点DETR&#xff1a;基于Transformer的目标检测查询设计 论文链接 代码链接 摘要 在本文中&#xff0c;我们提出了一种基于Transformer的目标检测新型查询设计。此前的Transformer检测器中&am…

智慧工厂整体解决方案

该方案围绕智能工厂建设,阐述其基于工业 4.0 和数字化转型需求,通过物联网、大数据、人工智能等技术实现生产自动化、数据化管理及联网协同的特点。建设步骤包括评估现状、设定目标、制定方案、测试调整、实施计划及持续改进,需整合 MES、ERP 等软件系统与传感器、机器人等硬…

秋招Day12 - 计算机网络 - TCP

详细说一下TCP的三次握手机制 TCP的三次握手机制是为了在两个主机之间建立可靠的连接&#xff0c;这个机制确保两端的通信是同步的&#xff0c;并且在开始传输数据前&#xff0c;双方都做好了要通信的准备。 说说SYN的概念&#xff1f; SYN 是 TCP 协议中用来建立连接的一个标…

vueflow

自定义节点&#xff0c;自定义线&#xff0c;具体细节还未完善&#xff0c;实现效果&#xff1a; 1.安装vueflow 2.目录如下 3. index.vue <script setup> import { ref } from vue import { VueFlow, useVueFlow } from vue-flow/core import { Background } from vue-…

LearnOpenGL-笔记-其十一

Normal Mapping 又到了介绍法线贴图的地方&#xff0c;我感觉我已经写了很多遍了... 法线贴图用最简单的话来介绍的话&#xff0c;就是通过修改贴图对应物体表面的法线来修改光照效果&#xff0c;从而在不修改物体实际几何形状的前提下实现不同于物体几何形状的视觉效果。 因…

openppp2 -- 1.0.0.25225 优化多线接入运营商路由调配

本文涉及到的内容&#xff0c;涉及到上个发行版本相关内容&#xff0c;人们在阅读本文之前&#xff0c;建议应当详细阅读上个版本之中的VBGP技术相关的介绍。 openppp2 -- 1.0.0.25196 版本新增的VBGP技术-CSDN博客 我们知道在现代大型的 Internet 网络服务商&#xff0c;很多…

详细到用手撕transformer下半部分

之前我们讨论了如何实现 Transformer 的核心多头注意力机制&#xff0c;那么这期我们来完整地实现整个 Transformer 的编码器和解码器。 Transformer 架构最初由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出&#xff0c;专为序列到序列&#xff08;seq2s…

【Sqoop基础】Sqoop生态集成:与HDFS、Hive、HBase等组件的协同关系深度解析

目录 1 Sqoop概述与大数据生态定位 2 Sqoop与HDFS的深度集成 2.1 技术实现原理 2.2 详细工作流程 2.3 性能优化实践 3 Sqoop与Hive的高效协同 3.1 集成架构设计 3.2 数据类型映射处理 3.3 案例演示 4 Sqoop与HBase的实时集成 4.1 数据模型转换挑战 4.2 详细集成流程…

MySQL + CloudCanal + Iceberg + StarRocks 构建全栈数据服务

简述 在业务数据快速膨胀的今天&#xff0c;企业对 低成本存储 与 实时查询分析能力 的需求愈发迫切。 本文将带你实战构建一条 MySQL 到 Iceberg 的数据链路&#xff0c;借助 CloudCanal 快速完成数据迁移与同步&#xff0c;并使用 StarRocks 完成数据查询等操作&#xff0c…

截屏精灵:轻松截屏,高效编辑

在移动互联网时代&#xff0c;截图已经成为我们日常使用手机时的一项基本操作。无论是记录重要信息、分享有趣内容&#xff0c;还是进行学习和工作&#xff0c;一款好用的截图工具都能极大地提升我们的效率。截屏精灵就是这样一款功能强大、操作简单的截图工具&#xff0c;它不…

【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议

目录 1. 基本概念1.1 基本概念1.2 web应用程序1.3 静态web1.4 动态web 2. web服务器3. tomcat详解3.1 安装3.2 启动3.3 配置3.3.1 配置启动的端口号3.3.2 配置主机的名称3.3.3 其他常用配置项日志配置数据源配置安全配置 3.4 发布一个网站 4. Http协议4.1 什么是http4.2 http的…

云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)

云计算Linux Rocky day02&#xff08;安装Linux系统、设备表示方式、Linux基本操作&#xff09; 目录 云计算Linux Rocky day02&#xff08;安装Linux系统、设备表示方式、Linux基本操作&#xff09;1、虚拟机VMware安装Rocky2、Linux命令行3、Linux Rocky修改字体大小和背景颜…

在 ODROID-H3+ 上安装 Win11 系统

在 ODROID-H3 上安装 Windows 11 系统。 以下是完整的步骤&#xff0c;包括 BIOS 设置、U 盘制作、安装和驱动处理&#xff0c;全程不保留之前的系统数据。 ✅ 准备工作 1. 准备一个 ≥8GB 的 USB 启动盘 用另一台电脑制作 Windows 11 安装盘。 &#x1f449; 推荐工具&…

使用el-input数字校验,输入汉字之后校验取消不掉

先说说复现方式 本来input是只能输入数字的&#xff0c;然后你不小心输入了汉字&#xff0c;触发校验了&#xff0c;然后这时候&#xff0c;你发现校验取消不掉了 就这样了 咋办啊&#xff0c;你一看校验没错啊&#xff0c;各种number啥的也写了,发现没问题啊 <el-inputv…

Docker容器启动失败的常见原因分析

我们在开发部署的时候&#xff0c;用 Docker 打包环境&#xff0c;理论上是“我装好了你就能跑”。但理想很丰满&#xff0c;现实往往一 docker run 下去就翻车了。 今天来盘点一下我实际工作中经常遇到的 Docker 容器启动失败的常见原因&#xff0c;顺便给点 debug 的小技巧&a…

立志成为一名优秀测试开发工程师(第七天)——unittest框架的学习

目录 unittest框架的学习 一、测试类的编写 创建相关测试类cal.py、CountTest.py 二、常见断言方法 使用unittest单元测试框架编写测试用例CountTest.py 注意&#xff1a;执行的时候光标一定要放在括号后面&#xff0c;鼠标右键运行 三、对测试环境的初始化和清除模块…

论坛系统(4)

用户详情 获取用户信息 实现逻辑 ⽤⼾提交请求&#xff0c;服务器根据是否传⼊Id参数决定返回哪个⽤⼾的详情 1. 不传⽤⼾Id&#xff0c;返回当前登录⽤⼾的详情(从session获取) 2. 传⼊⽤⼾Id&#xff0c;返回指定Id的⽤⼾详情(根据用户id去查) 俩种方式获得用户信息 参…

力扣面试150题--二叉树的层平均值

Day 54 题目描述 思路 初次做法&#xff08;笨&#xff09;&#xff1a;使用两个队列&#xff0c;一个队列存放树的节点&#xff0c;一个队列存放对应节点的高度&#xff0c;使用x存放上一个节点&#xff0c;highb存放上一个节点的高度&#xff0c;sum存放当前层的节点值之和…

【Doris入门】Doris初识:分布式分析型数据库的核心价值与架构解析

目录 1 Doris简介与核心价值 2 Doris架构深度解析 2.1 Frontend&#xff08;FE&#xff09;架构 2.2 Backend&#xff08;BE&#xff09;架构 3 Doris核心概念详解 3.1 数据分布模型 3.2 Tablet与Replica 3.3 数据模型 4 Doris关键技术解析 4.1 存储引擎 4.2 查询执…

数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP

数据结构与算法学习笔记----动态规划区间DP author: 明月清了个风 first publish time: 2025.5.26 ps⭐️区间DP的特征在于子结构一般是一个子区间上的问题&#xff0c;涉及到的问题也非常多&#xff0c;如环形区间&#xff0c;记录方案数&#xff0c;高精度&#xff0c;二维…