Dify-FeiShu-bot是一个使用python FastAPI框架编写的后端,可以非常方便的支持利用Dify接入飞书搭建飞书机器人,并且充分利用飞书消息卡片,可以搭建出漂亮的UI界面
项目展示地址: 【【墨趣书法大管家】小B端智能伙伴 | 极客公园&飞书hAIkathon、Dify...-哔哩哔哩】 https://b23.tv/lCiSikf 后续会更新教程,喜欢的话可以点个🌟➕持续关注
- 非常方便创建bot;
- 非常方便创建消息卡片;
创建机器人🤖从来没有如此简单。
-
定义你自己的机器人(主要是定义机器人的消息回调事件)
以Dify机器人为例:在
src/Bots
文件夹📁下,新建bot_dify.py
文件,并依据bot_example.py
官方示例,重写你的机器人的消息回调方法。# 重写Bot的消息回调方法 from src.feishu_bot import FeishuBot from src.logger_setup import setup_logger # 设置日志 logger = setup_logger() # 定义ExampleBot类,继承FeishuBot class ExampleBot(FeishuBot): def __init__(self, name: str): super().__init__(name) # 重写需要的事件处理方法 async def handle_v1_0_p2p_chat_create(self, event_id: str, event: dict): logger.info(f"ExampleBot handling v1.0 p2p chat create event: {event}") # 添加你的处理逻辑 async def handle_v2_0_im_message_receive_v1(self, event_id: str, event: dict): logger.info(f"ExampleBot handling v2.0 message received event: {event}") # 添加你的处理逻辑
目前支持重写的消息回调的方法有:
回调事件名称 版本 事件类型 事件回调方法 用户和机器人的会话首次被创建 v1.0 p2p_chat_create handle_v1_0_p2p_chat_create 接收消息 v2.0 im.message.receive_v1 handle_v2_0_im_message_receive_v1 机器人自定义菜单事件 v2.0 application.bot.menu_v6 handle_v2_0_application_bot_menu_v6 卡片回传交互 v2.0 card.action.trigger handle_v2_0_card_action_trigger 如果有其他需求,希望在项目中添加一个新功能,但当前项目中还没有这个功能,你可以通过创建一个Issue和Pull Request来提出这个需求。
-
在项目根目录下的main.py文件里导入刚才定义的机器人,并创建机器人的路由,用于后续的事件回调配置:
# src/main.py from fastapi import FastAPI from src.feishu_bot import FeishuBot from src.Bots.bot_dify import DifyBot app = FastAPI() # 创建多个飞书机器人实例并注册其路由 # example_bot = ExampleBot(name="ExampleBot") # app.include_router(example_bot.router, prefix="/example_bot") # 路由实际的访问路径将变成'/example_bot/webhook' # 以dify机器人为例 dify_bot = DifyBot(name="dify") app.include_router(dify_bot.router, prefix="/dify") # 路由实际的访问路径将变成'/dify/webhook' if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
-
克隆项目
git clone https://github.com/Mr-KID-github/Dify-FeiShu-bot.git
-
修改项目环境配置 将.env.example改为.env,并修改里面的环境变量,配置你自己的Dify密钥和飞书机器人相关配置
-
创建虚拟环境
conda create --name DifyOnFeishu python=3.12
-
激活虚拟环境
conda activate DifyOnFeishu
-
安装依赖
pip install -r requirements.txt
-
运行 FastAPI 服务器:
-
使用 uvicorn 运行你的应用:
uvicorn src.main:app --reload --host 0.0.0.0 --port 8000
或者你可以直接使用:
./start.sh
-
这会启动一个本地服务器,你可以在浏览器中访问 http://127.0.0.1:8000/docs#/ 查看接口文档。
-
-
如果是在本地调试的话,你可以使用 ngrok 暴露本地服务器:(可选,并且需要注意的是
⚠️ 每次ngrok生成的URL都会变动,所以也需要同步更新飞书机器人的事件回调配置)-
为了让飞书可以访问你的本地服务器,需要使用 ngrok 暴露本地服务器到公网。
-
下载并安装 ngrok,然后运行以下命令:
ngrok http 8000
这会生成一个公网 URL,例如 https://abc123.ngrok.io,将这个 URL 配置为飞书机器人的 webhook URL。
-
-
配置飞书机器人的事件回调:
登录飞书开发者后台,找到你的机器人应用,进入配置页面。在 【事件与回调】的webhook 配置中,将上一步得到的 ngrok 公网 URL 配置进去,你的 webhook 路由已经配置为 /
your_bot_name
/webhook/event,因此飞书的 webhook URL 应该是:例如https://abc123.ngrok.io/your_bot_name/webhook/event
如果是在远程服务器(例如阿里云、腾讯云、火山引擎等有公网IP地址,更建议此方案),可以使用域名,也可以使用IP加端口的方式配置飞书的 webhook URL 应该是:例如
http://your_ip:your_port/your_bot_name/webhook/event 或者 https://your_ip:your_port/your_bot_name/webhook/event
如果飞书机器人的事件回调配置通过✅,那就恭喜你🎉你,基本配置已经完成了。
首先你可以参考.env.example
里面的配置在项目根目录新建一个.env
文件。关于里面的配置详解,请查阅:关于env环境配置
在运行应用之前,可以在终端中使用export命令设置环境变量,例如
export APP_ENV=development
这个是以开发环境运行应用的意思。详情🔎请见:关于start.sh脚本启动应用
本项目采用MIT License。详细信息请见LICENSE。
如何贡献 欢迎提交Issue和Pull Request来提出需求和改进建议。详细的贡献指南请见:CONTRIBUTING.md。
Twitter:https://x.com/zouyu1121