暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用飞书开放平台机器人推送文件到群组

原创 L. 2024-04-12
3784

1、背景

用户需求每个月提供其数据库AWR报告一份,考虑到后面自动化运维也有发文件到飞书群组的需求,索性接着机会实践一下

注意:笔者并非专职开发,代码搬运工一枚,借助GPT缝缝补补,不过还好最后实现这个功能。

2、设计思路

首先定时生成AWR报告,鉴于生产环境避免创建脚本,所以需要在运维环境远程连接该数据库并生成对应AWR报告,使用shell脚本即可。
而后就是关于飞书如何确认群聊,发送该文件。

3、功能实现

3.1 自动生成AWR报告

shell脚本如下
image.png

3.2 飞书转发文件

这里因为之前实现过使用webhook转发告警到飞书机器人,所以了解一点飞书开放平台。
关于文件发送,飞书自定义机器人实现不了。查阅飞书开放平台文档,服务端API分类处查询
上传文件 - 服务端 API - 开发文档 - 飞书开放平台 (feishu.cn)
image.png
image.png
可以看到支持的文件类型如上,我们要上传的文件未html文件不在支持类型中,但是没关系,可以用stream类型试试看。

OK,现在重新梳理下思路:
首先AWR的html文件我们已经有简单脚本生成了,接下来通过飞书的API将文件上传至飞书开放平台,后面可以配置机器人转发到群里面。

接下来就是功能的实现:

3.2.1 飞书开放平台申请线上应用及权限

飞书开放平台 (feishu.cn)

image.png
申请权限
image.png
必备权限:

  • 上传文件
  • 读取群信息
  • 获取群组信息
  • 获取与上传图片或文件资源
  • 获取与发送单聊、群组消息

注意这里在选择批量开通后,需要将应用发布出去才能到审核流程,当然如果你的账号权限够高可以忽略本操作。

在新建的应用中添加应用能力,新增机器人能力
image.png

image.png

3.2.2 凭证与基础信息获取

APP ID及APP SECRET后面会使用到
image.png

3.2.3 代码设计

这里参考这位大佬的博客
python调用飞书机器人发送文件-CSDN博客
功能1:获取token,这个token通过上面APPID和Secret获取,后面在上传文件及获取群信息都需要使用到
image.png

功能2:文件上传,将文件上传至飞书开放平台
image.png

这个方法返回的media_id就是后面发送文件功能的file_key,总体来说就是我们将文件发送到飞书开放平台,飞书平台会给我们返回一个file_key通过这个进一步将文件发送出去
这里文件名配置的比较暴力,直接将文件绝对路径放上去了,因为需求的报告周期为一个月,那么每次生成同名报告就行了,加上获取AWR的脚本第一步是删除这个文件,保证了文件都是最新的。
值得注意的就是file_type,这里需要选择stream的方式。

功能3:获取群chatid,这个功能就是为了后面在推送文件时,确定推送到哪个群
这里要注意下,我们首先需要在对应的群里添加我们的应用,同时记录群聊的名称
image.png
image.png
这个方法会返回,这个应用所在的所有群聊信息,get_by_name是为了后面通过群聊名称获取指定群chatid

功能4:发送文件
这里主要是使用了file_key和token,file_key确认文件,token做安全验证
image.png

至此功能齐全。主函数如下
image.png

4、功能测试

image.png

OK,配置定时任务,完成需求

5、注意事项

  • 权限一定要申请全,不然会出现各种各样的问题
  • 获取群chatid部分,要提前将应用放到群里
  • python3.6 安装requests_toolbelt这个包会报错,更换一下安装源比如豆瓣或某个大学的源
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论