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

文章目录

  • 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.mzph.cn/news/201346.shtml

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

相关文章

Ubuntu18.04 本地安装CVAT标注工具

写在前面&#xff1a; 1、如果直接clone最新版本的cvat&#xff0c;python版本最好安装3.8的&#xff0c;因为其中部分代码的语法只有高版本的python才可以支持。 2、安装完成以后本地登陆可能出现"cannot connect to cvat server"的错误&#xff0c;可以从Cannot …

制作麒麟oem镜像之通过识别终端品牌与BIOS安装不同内容

原文链接&#xff1a;麒麟oem镜像之识别终端品牌与BIOS安装不同内容 **hello&#xff0c;大家好啊&#xff01;**在个性化和定制化日益成为趋势的今天&#xff0c;操作系统的定制化安装也变得越来越重要。特别是对于企业用户来说&#xff0c;能够根据不同的硬件配置和需求&…

项目实战之RabbitMQ重试机制进行消息补偿通知

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 文章目录 &#x1f31f;架构图&#x…

Python Tkinter库入门与基础

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Tkinter是Python标准库中内置的图形用户界面&#xff08;GUI&#xff09;工具包&#xff0c;提供了创建窗口、按钮、文本框等GUI元素的功能。本文将介绍Tkinter的基础知识&#xff0c;帮助大家快速入门。 安装与…

低成本物联网安全芯片ACL16_S 系列,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核&#xff0c;片内集成多种安全密码模块&#xff0c;包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法&#xff0c;支持真随机数发…

岳阳楼3D模型纹理贴图

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 岳阳楼&#xff0c;位于湖南省岳阳市岳阳楼区洞庭北路&#xff0c;地…

Vcenter 6.7 VCSA证书过期问题处理

1. 故障现象 2022年10月25日&#xff0c;登陆VC报错。 按照报错信息&#xff0c;结合官方文档&#xff0c;判断为STS证书过期导致。 vCenter Server Appliance (VCSA) 6.5.x, 6.7.x or vCenter Server 7.0.x 在/var/log/vmware/vpxd-svcs/vpxd-svcs.log看到类似报错: ERRO…

为什么程序员会讨厌PHP编程语言?

闲来无事&#xff0c;逛了某乎看见一篇关于PHP编程的学习指南&#xff0c;深受启发。我们都知道PHP是一种流行的爬虫语言&#xff0c;尤其在Web开发方面。太有很多有点&#xff0c;例如简单易学、支持的成许多等。但是PHP也会存在一些缺点&#xff0c;如代码可读性差&#xff0…

Windows下Linkis1.5DSS1.1.2本地调试

1 Linkis: 参考&#xff1a; 单机部署 | Apache Linkis技术分享 | 在本地开发调试Linkis的源码 (qq.com)DataSphere Studio1.0本地调试开发指南 - 掘金 (juejin.cn) 1.1 后端编译 参考【后端编译 | Apache Linkis】】 修改linkis模块下pom.xml,将mysql.connetor.scope修改…

go-fastfds部署心得

我是windows系统安装 Docker Desktop部署 docker run --name go-fastdfs&#xff08;任意的一个名称&#xff09; --privilegedtrue -t -p 3666:8080 -v /data/fasttdfs_data:/data -e GO_FASTDFS_DIR/data sjqzhang/go-fastdfs:lastest docker run&#xff1a;该命令用于运…

Matlab 加权均值质心计算(WMN)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很简单,即将之前的均值中心,引入相关的权重函数(通常与距离有关),以此为每个点进行赋权,最后即可得到一个加权均值中心: 二、实现代码 %% ********<

【五分钟】学会利用cv2.resize()函数实现图像缩放

引言 在numpy知识库&#xff1a;深入理解numpy.resize函数和数组的resize方法中&#xff0c;小编较为详细地探讨了numpy的resize函数背后的机理。从结果来看&#xff0c;numpy.resize函数并不适合对图像进行缩放操作。而opencv中的resize函数虽然和numpy的resize函数同名&…

【MATLAB源码-第95期】基于matlab的协作通信中(AF模式)中继选择算法对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 最大最小中继选择 (Max-Min Relay Selection)&#xff1a;这种算法选择能够提供最大最小信号强度的中继。它首先计算所有可用中继的信号强度&#xff0c;然后选择那些在最差信道条件下仍能保持最高信号强度的中继。其目的…

BACnet I/O模块在水利环境监测全自动控制系统中的应用:稳定、高效、实时

前言 “绿水青山就是金山银山”&#xff0c;水利环境一直是国际生态部门关注的重点。随着经济的发展、针对水利环境的监管也日趋严格&#xff0c;尤其是重点河、湖水系、水源地、城市内河等成为重点监管对象&#xff0c;监管力度也愈来愈严格&#xff0c;监测布点密度不断加大。…

IntelliJ IDEA 智能(AI)编码工具插件

文章目录 通义灵码-阿里CodeGeeX-清华大学智谱AIBitoAmazon CodeWhisperer-亚马逊GitHub Copilot - 买不起CodeiumAIXcoder 仅仅自动生成单元测试功能 TestMe插件&#xff08;免费&#xff09;仅仅是模板填充&#xff0c;不智能。 Squaretest插件&#xff08;收费&#xff09;…

微信小程序之猜数字和猜拳小游戏

目录 效果图 app.json 一、首页&#xff08;index3&#xff09;的代码 wxml代码 wxss代码 二、猜数字页面&#xff08;index&#xff09;代码 wxml代码 wxss代码 js代码 三.游戏规则页面&#xff08;logs&#xff09;代码 wxml代码 wxss代码 四.猜拳页面&#xff…

ElasticSearch篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、了解ElasticSearch 深翻页的问题及解决吗?二、熟悉ElasticSearch 性能优化三、ElasticSearch 查询优化手段有哪些?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这…

编程过程中出现bug如何应对?

编程过程中出现bug如何应对&#xff1f; 1.找错误原因 如果完全不知道出错的原因&#xff0c;或者说存在着很多错误的有原因&#xff0c;----》控制变量法 例如&#xff0c;昨天我在使用torchrun 多卡并行一个程序的时候&#xff0c;出现了大量的bug, 于是我将报错信息放在网…

visual Studio MFC 平台实现拉普拉斯和拉普拉斯与直方图均衡化与中值滤波相结合实现比较

拉普拉斯变换的原理与应用 本文使用visual Studio MFC 平台实现图像增强中的拉普拉斯变换&#xff0c;同时拉普拉斯一般不会单独使用&#xff0c;与其他平滑操作相结合&#xff0c;本文使用了拉普拉斯与直方图均衡化以及与中值滤波相结合&#xff0c;也对三种方式进行了对比 关…

如何提高Pycharm的使用体验?

汉化 文件---设置---插件---chinese---安装---重启ide 代码补全 tabnine 文件---设置---插件---tabnine---安装---重启ide 重启ide后生效&#xff0c;补全效果如下 自定义背景 文件---设置---外观---背景图像---选择图片---调整透明度保存即可 设置头部声明 英文版…