手把手自己制作一个飞书机器人

Github项目地址

飞书机器人

前言

如果你想添加新的对话逻辑,你只需要在ChatApi.py中添加新的if条件判断语句即可。如果你能开发出新功能,请在仓库中提出Pull requests合并请求,我将感激不尽!

更新与修复

2023年9月1日更新

更新了对话机器人返回帮助界面功能,用户发送“帮助”,返回机器人使用说明

image-20230901161429940

2023年8月30日更新

更新了对话机器人返回微博热搜榜功能,用户发送“热搜”,返回即时热搜榜

在这里插入图片描述

2023年8月28日更新

1.将原先的TestApi.py整合进ChatApi.py中,省去了繁琐的目录与代码文件

2.更新了请求地址配置方法,只需要一个文件ChatApi.py即可

飞书机器人介绍

机器人概述 - 开发指南 - 开发文档 - 飞书开放平台 (feishu.cn)

飞书机器人分为两种,一种是自定义机器人,一种是应用机器人

自定义机器人

只能在群聊中使用,只能完成比较固定的消息推送。

webhook获取方法:

1.进入目标群组,在群组右上角点击更多按钮,并点击 设置

img

2.在右侧 设置 界面,点击 群机器人

img

3.在 群机器人 界面点击 添加机器人

4.在 添加机器人 对话框,找到 自定义机器人,并 添加

img

5.设置自定义机器人的名称与描述,并点击 添加

img

6.获取自定义机器人的 webhook 地址,并点击 完成

img

应用机器人

功能很多,开发性高,灵活性强。需要有企业账户,支持对话互动等多种功能。

app_idapp_secret获取方法

1.用企业账户,在开发者后台中,创建企业自建应用

image-20230731184331697

2.找到app_id与qpp_secret

image-20230731184507412

3.添加应用能力,选择机器人

image-20230731184549009

4.添加以下权限

im:message,im:message.group_at_msg,im:message.group_at_msg:readonly,im:message.group_msg,im:message.p2p_msg,im:message.p2p_msg:readonly,im:message:readonly,im:chat:readonly,im:chat,im:message:send_as_bot

image-20230731184637236

开启事件订阅

若要使机器人有互动对话功能,需要填写请求配置地址,并添加接收消息v2.0消息已读v2.0事件

image-20230802165643614

请求地址配置方法

1.使用反向代理工具ngrok完成内网穿透

使用docker启动ngrok

docker run -it -e NGROK_AUTHTOKEN=<token> ngrok/ngrok http 8080

NGROK_AUTHTOKEN获取方法:

1.1 进入ngrok官网https://ngrok.com/,注册ngrok账号并下载ngrok

1.2 获取Authtoken

image-20230803123131090

获取公网地址后,按下Ctrl + P,然后再按下Ctrl + Q,使容器后台运行。

image-20230803123606894

1.3 在FeishuBot/public/chat/conf.py中填写相关信息

先运行ChatApi.py

python3 ChatApi.py

到飞书后台填写请求配置地址,格式为https://123456.ngrok-free.app/query/message

期间保证ngrok在后台一直运行

2.使用Kubernetes暴露公网

2.1 在FeishuBot/public/build-api填好conf.py中的信息,然后自己制作docker镜像

docker build -t docker的用户名/镜像名:<tag> .
docker push 做好的镜像

2.2在FeishuBot/public/build-api下,修改deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - name: api
        image:  # 在build-api目录下制作的镜像
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  selector:
    app: api
  type: NodePort
  ports:
  - name: http  
    protocol: TCP
    port: 80  # 对外暴露的端口
    targetPort: 8080 # Flask应用容器监听的端口
    nodePort: 39378

然后获取检验用的请求配置地址

kubectl apply -f deploy.yaml
kubectl get svc # 获取端口为39378,记得在服务器开放

地址示例:http://1.2.3.4:3XXXXX/query/message

image-20230803185245586

功能

  • 青年大学习提醒
  • 天气通知
  • 互动对话功能
  • ChatGPT—引用网上项目

青年大学习提醒

实现每周一早上九点,通知用户完成青年大学习

点击超链接跳转微信

image-20230731180846759

使用方法

自定义机器人:在FeishuBot/personal/conf.py中填写你的webhook

应用机器人:在FeishuBot/public/send/conf.py中填写你的app_id和app_secret

开启服务:自定义机器人启动脚本FeishuBot/personal/qndxx-remind/run1.sh

​ 应用机器人启动脚本FeishuBot/public/send/qndxx-remind/run1.sh

chmod +x run1.sh
./run1.sh

天气通知

实现每天早上七点,向用户推送天气信息

普通天气

image-20230731190241182

出现灾害天气时,推送气象台预警信息,并附带特殊天气图标

image-20230731190331070

使用方法

自定义机器人:在FeishuBot/personal/conf.py中填写你的webhook和指定城市

应用机器人:在FeishuBot/public/send/conf.py中填写你的app_id和app_secret,指定城市

开启服务:自定义机器人启动脚本FeishuBot/personal/weather-remind/run2.sh

​ 应用机器人启动脚本FeishuBot/public/send/weather-remind/run2.sh

chmod +x run1.sh
./run2.sh

互动对话功能

仅限应用机器人

互动对话逻辑

img

实现向应用机器人发送特定信息,返回特定内容

1.用户发送”青年大学习“,机器人回复青年大学习通知内容

image-20230801223157822

2.用户发送"查询天气:指定城市名"后,机器人回复需要监测天气城市的天气信息。

城市名注意不要带市和区。 如: 北京、南岸

image-20230802110517854

image-20230802120451729

3.用户发送“热搜”,机器人返回即时热搜榜
在这里插入图片描述

4.如果你想添加新的对话逻辑,你只需要在ChatApi.py中添加新的if条件判断语句即可。如果你能开发出新功能,请在仓库中提出Pull requests合并请求,我将感激不尽!

ChatGPT

参考网上的项目,建议使用新的应用机器人

飞书 ChatGPT 机器人 - 用 JavaScript 五分钟开发一个飞书 ChatGPT 机器人 (aircode.cool)

BUG

1.用K8s配置请求地址时,用于检验时地址都是可用的,但是更改镜像后,无法使用互动对话功能

2.互动对话功能在服务器上使用ngrok有点问题,在windows下完全可以使用

3.因为配置请求地址时需要在固定地址的情况下改变镜像,所以GitLab中的CI只跑通用于检验的镜像并部署在K8s,详情请看.gitlab-ci.yaml

image-20230804185615165

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值