【工具与中间件】快速构建飞书群聊机器人

文章目录

  • 0. 前言
  • 1. 无痛入门
    • 1.1 飞书创建群聊机器人
    • 1.2 Webhook 请求示例
    • 1.3 设置安全策略
  • 2. 实战
  • 3. 总结
    • 3.1 使用体验
    • 3.2 深入使用建议

先进团队用飞书,先进飞书群聊有......

0. 前言

科技蓬勃发展的今天,我们可以轻松拥有属于自己/团队的机器人。日常工作与生活中,我们可以创建各种各样的机器人来帮助我们传递信息,甚至可以接入大语言模型或者其它 AI 神经网络,来实现各种各样的回复功能,进一步解放生产力。而作为日常工作中经常使用的飞书,更是提供了可以非常快速入门的自定义机器人来帮助我们做日常管理。

幸运的是,小编本人单位最近就全面采用飞书进行行政管理与团队沟通、任务统筹工作。这也让小编本人有机会接触将后端告警信息接入飞书机器人的业务。本文记录本次根据官方文档实现业务接入机器人的简单入门过程。一来对个人而言作为一次笔记记录,方便日后回顾与拓展;二来希望帮助到有需要的读者快速入门接入飞书机器人。

需求描述
创建飞书机器人,并通过 Webhook 的方式请求飞书,将监控信息接入飞书群聊,及时通知开发团队,提高整体效率。

  • 演示创建机器人的过程;
  • 直接通过 Webhook 的方式请求,其本质是一次 Http 请求,一般情况下为POST 请求;
  • 实现过程以 Java 代码示例;

参考教程
飞书官方文档

1. 无痛入门

我们团队首次使用飞书不到半月。短短几天内我的领导就已经将 Jekins 项目构建监控信息接入了飞书,我也收到了研发改善性需求,遂从入门到简单接入业务开始,从个人版到企业飞书,创建了一个业务监控机器人。

本小节介绍飞书群聊创建机器人,先在个人版做演示。

1.1 飞书创建群聊机器人

截图演示:快速创建群聊机器人,此处以个人版的示例群聊为例。

第1步:目标群聊
1

第2步:点击创建机器人
2

第3步:设置信息
3

第4步:注意保管好Webhook地址
4

至此,基本创建完毕,我们先不勾选安全测试,先调用通过,再通过官方建议设置安全策略。

1.2 Webhook 请求示例

Webhook 调用 的本质是 Http 请求。以下以 Java 为例。

创建一个测试类,再发送 Http 请求

测试类

@Test
void firstRobotTest() throws IOException, NoSuchAlgorithmException, InvalidKeyException {String webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/[secert]";// 定义 webhook 的 URL 地址URL url = new URL(webhook);// 创建一个 HTTP POST 请求HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setDoOutput(true);// 设置请求头connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");// 设置请求体// 创建一个 JSON 对象JSONObject jsonObject = new JSONObject();jsonObject.put("msg_type", "text");jsonObject.put("content",  "{ \"text\": \"Hello, I'm a new robot from Sharry! Nice to meet U guys\" }");// 将 JSON 对象转换为字符串String payload = JSON.toJSONString(jsonObject);connection.getOutputStream().write(payload.getBytes());// 获取响应状态码int statusCode = connection.getResponseCode();System.out.println("HTTP status code: " + statusCode);}

说明:这里涉及两个小核心,一个是需要我们保管好的Webhook地址,因此示例代码的实际webhook用[secert]代替,另一个就是如何发送 Http 请求。一般来说,发送 Http 请求是我们程序猿的基本功,但又不巧的是,日常工作中直接手写发送Http请求或许也不是十分频繁,框架帮我们做了嘛。而好消息是,飞书机器人入门真的好简单,当我们忘了这部分知识时,我们甚至可以通过官方文档的说明+度娘或GPT,一样实现请求。再不行,直接抄上文的测试类也是可以的。

测试结果
5

好了,基本测试通过,接下来我们来稍微完善一下。

1.3 设置安全策略

我们回到机器人调用界面,发现安全策略提醒。此处我们选取签名认证的方式来示例。
6

通过官方文档快速实现前面认证
根据官方文档的描述,我们可以写一个同款生成Sign信息方法,也可以直接复用官方文档的示例,以下是复制官方文档的生成Sign方法:

private static String GenSign(String secret, int timestamp) throws NoSuchAlgorithmException, InvalidKeyException {//把timestamp+"\n"+密钥当做签名字符串String stringToSign = timestamp + "\n" + secret;//使用HmacSHA256算法计算签名Mac mac = Mac.getInstance("HmacSHA256");mac.init(new SecretKeySpec(stringToSign.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));byte[] signData = mac.doFinal(new byte[]{});return new String(Base64.encodeBase64(signData));}

组装请求体

@Test
void firstRobotTest() throws IOException, NoSuchAlgorithmException, InvalidKeyException {String webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/[secert]";// 定义 webhook 的 URL 地址URL url = new URL(webhook);// 创建一个 HTTP POST 请求HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("POST");connection.setDoOutput(true);// 设置请求头connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");// 设置请求体// 创建一个 JSON 对象JSONObject jsonObject = new JSONObject();jsonObject.put("msg_type", "text");jsonObject.put("content",  "{ \"text\": \"Hello, I'm a new robot from Sharry! With sign this time\" }");// 签名信息int timestamp = (int) (System.currentTimeMillis() / 1000);String sign = GenSign(SECRET, timestamp);jsonObject.put("timestamp", timestamp);jsonObject.put("sign", sign);// 将 JSON 对象转换为字符串String payload = JSON.toJSONString(jsonObject);connection.getOutputStream().write(payload.getBytes());// 获取响应状态码int statusCode = connection.getResponseCode();System.out.println("HTTP status code: " + statusCode);}

注意,根据官方文档的说明,还要带上时间戳,具体详见上述方法。

测试结果
7

恭喜,已完成入门!接下来是实战了!

2. 实战

本文截取部分已脱敏的个人工作实战代码来示例,演示将 Sping filter chains 的一个监控信息先组装一下通知信息Json,再通过 Webhook 的调用方式及时通知到飞书群。

有了上述基础,直接上代码示例,应该很好理解。注意,文中涉及的 Filter 与 Druid 等 的其它配置,请读者参考其它文档。

Spring Filter 调用Webhook 实现监控信息发到飞书群

@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// Filter逻辑处理方法HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;long startTime = System.nanoTime();filterChain.doFilter(servletRequest, servletResponse);long endTime = System.nanoTime();long executeTime = endTime - startTime;if (executeTime >= THRESHOLD_NANO) {// 获取请求路径String url = httpServletRequest.getRequestURI();String tips = "详细信息请查阅Druid监控及日志";// 定义 webhook 的 URL 地址URL targetUrl = new URL(webhook);// 创建一个 HTTP POST 请求HttpURLConnection connection = (HttpURLConnection) targetUrl.openConnection();connection.setRequestMethod("POST");connection.setDoOutput(true);// 设置请求头connection.setRequestProperty("Content-Type", "application/json; charset=utf-8");// 设置请求体// 创建一个 JSON 对象HashMap<String,String> contentMap = new HashMap<>(2);String message = "慢SQL或业务整体缓慢 警告: 执行时间" + executeTime / 1000 / 1000 + " ms, 接口路径" + url + "\n" +tips;contentMap.put("text", message);JSONObject jsonObject = new JSONObject();jsonObject.put("msg_type", "text");jsonObject.put("content",  contentMap);// 签名信息int timestamp = (int) (System.currentTimeMillis() / 1000);String sign = null;try {sign = GenSign(SECRET, timestamp);} catch (NoSuchAlgorithmException | InvalidKeyException e) {throw new RuntimeException(e);}jsonObject.put("timestamp", timestamp);jsonObject.put("sign", sign);// 将 JSON 对象转换为字符串String payload = JSON.toJSONString(jsonObject);connection.getOutputStream().write(payload.getBytes());}

复用我们入门的时候的代码即可,非常好用!

实际效果部分截图
8

3. 总结

3.1 使用体验

本次飞书创建机器人,快速入门调用接口非常方便,飞书文档简单易读,调用起来方便快捷,且兼容性强。不像WeChat机器人,需要另辟蹊径。通过快速构建简单易用的机器人并快速接入我们所需业务,一方面在开发者眼中,可以快速实现基础业务,方便进一步优化以及开发;另一方面在用户体验中,短时间就能实现飞书机器人并及时收到通知,多是一件美事。但对于深度使用飞书的用户与开发者来说,只入门基础调用可能还不够,但快速入门至少是能最快迈出第一步。

但是要注意,由于简单易用的特性,任何人都能快速入门并快速调用你的机器人,飞书群聊机器人的Webhook地址务必要保护好!重要的事情说三遍:务必保护好机器人Webhook地址!务必保护好机器人Webhook地址!务必保护好机器人Webhook地址!

3.2 深入使用建议

飞书机器人可以实现的功能还有很多很多,本文只是将飞书官方文档筛选一遍,只取最快速入门的一部分,结合个人实践代码入门一遍。对于飞书机器人的深度使用,如消息卡片、接入其它第三方工具、机器人交互等,还请继续阅读官方文档。飞书的官方文档简单易懂且详尽,调用方便快捷,相信你可以通过飞书官方文档,构建出更好用,更有价值的机器人!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是TDR(威胁检测与响应)

网络安全是被动和主动方法的混合体。过去&#xff0c;企业往往局限于被动的方法&#xff0c;随着合规性和安全策略越来越受到重视&#xff0c;主动方法也越来越受到关注。与其他行业相比&#xff0c;网络安全是高度动态的&#xff0c;网络安全团队采用任何可以帮助他们优化的新…

第74讲:MySQL数据库InnoDB存储引擎事务:Redo Log与Undo Logo的核心概念

文章目录 1.InnoDB引擎中的逻辑存储结构2.事务的基本概念3.Redo log的核心概念3.1.什么是Redo log3.2.如果没有redo log面临的问题3.3.使用redo log之后是怎样的流程 4.Undo log的核心概念 1.InnoDB引擎中的逻辑存储结构 InnoDB存储引擎的逻辑结构分为以下几层&#xff1a; Ta…

【计算机网络笔记】物理层——信道与信道容量

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

04_W5500_TCP_Server

上一节我们完成了TCP_Client实验&#xff0c;这节使用W5500作为服务端与TCP客户端进行通信。 目录 1.W5500服务端要做的&#xff1a; 2.代码分析&#xff1a; 3.测试&#xff1a; 1.W5500服务端要做的&#xff1a; 服务端只需要打开socket&#xff0c;然后监听端口即可。 2…

Leetcode 92 反转链表II

反转链表II 题解1 一遍遍历&#xff08;穿针引线&#xff09; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 提示&#xff1a; 链表中节点数目…

解决 vite 中 import.meta.globEager is not function 的问题

本人正在重构两年前搭建到一半的博客网站&#xff0c;相关依赖都很陈旧&#xff0c;用到了 npm-check-updates 检测项目可升级依赖&#xff1a; 升级完成后解决完依赖发现控制台报错 import.meta.globEager is not function解决方案&#xff1a; vite版本降至4.3.0 亲测有效&…

3.4 路由器的DHCP配置

实验3.4 路由器的DHCP配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施&#xff08;一&#xff09;配置基于接口地址池的DHCP1.交换机的基本配置2.路由器的基本配置3.开启路由器的DHCP服务器功能4.配置路由器接口的DHCP功能5.设置计算机使用DHCP方式获取IP地…

P5 Linux 标准C库函数

目录 前言 01 标准输入、标准输出和标准错误 02 打开文件 fopen() 03 新建文件的权限 04 fclose()关闭文件 05 读文件和写文件 06 库函数 fseek 定位 6.1 lseek的使用 07 ftell()函数 前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_Chen…

【Vue】使用cmd命令创建vue项目

上一篇&#xff1a; node的安装与配置 https://blog.csdn.net/m0_67930426/article/details/134562278?spm1001.2014.3001.5502 目录 一.创建空文件夹专门存放vue项目 二. 查看node , npm 和vue脚手架的版本 三.安装vue脚手架 四.创建vue项目 五.运行项目 一.创建空文件…

Qt将打印信息输出到文件

将打印信息&#xff08;qDebug、qInfo、qWarning、qCritial等&#xff09;输出到指定文件来以实现简单的日志功能。 #include "mainwindow.h" #include <QApplication> #include <QLoggingCategory> #include <QMutex> #include <QDateTime>…

树_二叉搜索树的众树

//给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 // // 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 // // 假定 BST 满足如…

面试题:公司规定所有接口都用 post 请求,这是为什么?

文章目录 前言get 与 post 的区别所有接口都用 post 请求&#xff1f;网友程墨 Morgan网友苏莉安网友大宽宽 前言 最近在逛知乎的时候发现一个有趣的问题&#xff1a;公司规定所有接口都用 post 请求&#xff0c;这是为什么&#xff1f; 看到这个问题的时候其实我也挺有感触的…

Java数据结构之《最短路径》(难度系数100)

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度偏难(偏难理解)的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题…

西工大计算机学院计算机系统基础实验一(环境配置)

首先&#xff0c;不要焦虑&#xff0c;稳住心态慢慢来&#xff0c;一点一点做&#xff0c;跟着作者把基础打好&#xff0c;比什么都重要。作者曾经经历过这份痛苦&#xff0c;知道它有多么不好受。当初的作者高中之前甚至都没有自己的一台笔记本&#xff0c;上了大学以后学C语言…

qt 5.15.2 主窗体事件及绘制功能

qt 5.15.2 主窗体事件及绘制功能 显示主窗体效果图如下所示&#xff1a; main.cpp #include "mainwindow.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);MainWindow w;w.setFixedWidth(600);w.setFixedHeight(6…

java:slf4j、log4j、log4j2、logback日志框架的区别与示例

文章目录 背景SLF4J - 简单日志门面:Log4j - 强大而古老的日志框架:Log4j2 - Log4j的升级版:Logback - Log4j的继任者:比较Springboot集成slf4j、log4j2参考 背景 在Java开发中&#xff0c;日志记录是一个不可或缺的组成部分。为了满足不同的需求&#xff0c;Java社区涌现出多…

xilinx系列FPGA基于VIVADO的pin delay列表生成说明

目录 1 概述2 示例平台3 操作说明4 注意事项 xilinx系列FPGA基于VIVADO的pin delay列表生成说明 1 概述 本文用于讲诉xilinx系列FPGA基于VIVADO的pin delay列表生成说明&#xff0c;以及一些注意事项&#xff0c;为FPGA设计人员探明道路。 Pin delay 即FPGA内部die到pin的延时…

Unirest-Java:Java发起GET、POST、PUT、DELETE、文件上传,文件下载工具类介绍

一、简介 Unirest-Java是一个轻量级的HTTP客户端库&#xff0c;用于在Java应用程序中发送HTTP请求。 它提供了简单易用的API&#xff0c;可以方便地处理GET、POST、PUT、DELETE等HTTP方法。 Unirest-Java支持异步和同步请求&#xff0c;可以轻松地与JSON、XML等数据格式进行…

Linix服务器添加dns解析

Linix开通互联网域名地址出现&#xff0c;如下错误&#xff1a; 需要访问的服务器上添加dns解析 vim /etc/sysconfig/network-scripts/ifcfg-ens192 添加如下配置&#xff1a; DNS1202.96.134.13 重启网卡&#xff1a; systemctl restart network 注意如果是docker服务部署…

软著项目推荐 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…