{"id":28318581,"url":"https://github.com/anycodes/feishurbt","last_synced_at":"2025-06-24T18:31:50.901Z","repository":{"id":290193786,"uuid":"973652191","full_name":"anycodes/FeishuRBT","owner":"anycodes","description":"FeishuRBT - Dify AI应用的飞书机器人连接器","archived":false,"fork":false,"pushed_at":"2025-06-18T04:40:55.000Z","size":621,"stargazers_count":8,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-18T05:34:14.690Z","etag":null,"topics":["claudeai","dify","feishu-bot"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anycodes.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-27T13:02:17.000Z","updated_at":"2025-06-18T04:40:58.000Z","dependencies_parsed_at":"2025-06-18T05:27:15.601Z","dependency_job_id":"ff8e220e-f66b-4c65-8a67-5afdaa1fbde4","html_url":"https://github.com/anycodes/FeishuRBT","commit_stats":null,"previous_names":["anycodes/feishurbt"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/anycodes/FeishuRBT","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anycodes%2FFeishuRBT","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anycodes%2FFeishuRBT/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anycodes%2FFeishuRBT/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anycodes%2FFeishuRBT/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anycodes","download_url":"https://codeload.github.com/anycodes/FeishuRBT/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anycodes%2FFeishuRBT/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261733703,"owners_count":23201705,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claudeai","dify","feishu-bot"],"created_at":"2025-05-25T08:11:05.503Z","updated_at":"2025-06-24T18:31:50.850Z","avatar_url":"https://github.com/anycodes.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dify飞书机器人 - 完整使用指南\n\n这是一个将Dify AI应用快速对接到飞书的机器人项目，支持对接不同类型的Dify应用（聊天机器人、Agent、Flow），实现在飞书中与AI应用进行交互。\n\n## 📋 功能特点\n\n- 🤖 支持对接Dify所有类型的应用：聊天机器人、Agent、Flow\n- 💬 支持私聊和群聊（@机器人）\n- 📝 支持自定义命令系统，快速调用不同功能\n- 🔄 支持对话上下文保持，记忆用户历史对话\n- 🧠 支持多模型切换，根据场景选择不同的模型\n- 👥 支持多用户管理，区分管理员和普通用户\n- 🌐 提供Web管理界面，方便配置和管理\n- 📊 支持日志查看和会话管理\n- 🔔 支持Webhook事件通知系统，实现外部系统集成\n- 🔌 支持事件订阅机制，用户可选择订阅感兴趣的通知\n\n\n## 目录\n- [架构原理](#架构原理)\n- [安装部署指南](#安装部署指南)\n  - [前置条件](#前置条件)\n  - [步骤一：安装Dify](#步骤一安装dify)\n  - [步骤二：创建飞书机器人](#步骤二创建飞书机器人)\n  - [步骤三：部署本项目](#步骤三部署本项目)\n  - [步骤四：初始化并配置机器人](#步骤四初始化并配置机器人)\n  - [步骤五：使用机器人](#步骤五使用机器人)\n- [可用命令列表](#可用命令列表)\n  - [通用命令](#通用命令)\n  - [管理员命令](#管理员命令)\n- [Web管理界面](#web管理界面)\n- [数据存储](#数据存储)\n- [Webhook系统](#webhook-系统)\n  - [Webhook功能特点](#webhook功能特点)\n  - [创建Webhook](#创建webhook)\n  - [订阅事件](#订阅事件)\n  - [取消订阅](#取消订阅)\n  - [查看订阅](#查看订阅)\n  - [集成外部系统](#集成外部系统)\n  - [实战示例：AWS Lambda集成](#实战示例aws-lambda-集成)\n- [高级配置](#高级配置)\n  - [环境变量](#环境变量)\n  - [会话超时配置](#会话超时配置)\n  - [自定义命令系统](#自定义命令系统)\n  - [Webhook提示词模板](#webhook提示词模板)\n- [与其他系统集成](#与其他系统集成)\n  - [GitHub集成](#github-集成)\n  - [监控系统集成](#监控系统集成)\n  - [Slack/Teams消息转发](#slackteams-消息转发)\n- [常见问题](#常见问题)\n- [性能优化](#性能优化)\n  - [多线程支持](#多线程支持)\n  - [会话管理](#会话管理)\n- [项目扩展](#项目扩展)\n- [最佳实践/实践案例](#最佳实践实践案例)\n- [许可证](#许可证)\n- [贡献](#贡献)\n- [更新日志](#更新日志)\n\n## 🔍 架构原理\n\n```mermaid\ngraph TD\n    A[飞书用户] --\u003e|发送消息| B[飞书服务器]\n    B --\u003e|事件推送| C[Dify飞书机器人]\n    C --\u003e|处理消息| D{是否是命令?}\n    D --\u003e|是| E[命令处理器]\n    D --\u003e|否| F[对话处理器]\n    E --\u003e|系统命令| G[内置功能]\n    E --\u003e|自定义命令| H[调用关联模型]\n    F --\u003e|普通对话| H\n    H --\u003e|API请求| I[Dify API]\n    I --\u003e|返回结果| C\n    C --\u003e|发送回复| B\n    B --\u003e|显示回复| A\n    C --\u003e|管理功能| J[Web管理界面]\n    J --\u003e|配置管理| C\n    \n    K[外部系统] --\u003e|调用Webhook| C\n    C --\u003e|推送通知| L[订阅用户/群组]\n    \n    M[管理员] --\u003e|访问| J\n```\n\n\u003e 安全相关说明参考[安全文档](./docs/secure.md)\n\n## 🚀 安装部署指南\n\n### 前置条件\n\n1. 已经创建好的Dify应用\n2. 有飞书管理员权限，可以创建机器人\n3. 公网可访问的服务器（或内网穿透服务）\n4. Python 3.7+\n\n### 步骤一：安装Dify\n\n如果您还没有安装Dify，请按照以下步骤操作：\n\n1. 访问 [Dify官网](https://dify.ai)，根据指南安装Dify云服务或自托管版本\n\n2. 创建一个新的应用（聊天机器人、Agent或Flow均可）\n\n3. 获取API密钥\n   - 进入应用设置 \u003e API访问\n   - 获取并记录API密钥（API Key）\n   - 记录应用端点URL\n\n### 步骤二：创建飞书机器人\n\n1. 登录 [飞书开发者平台](https://open.feishu.cn/app)\n\n2. 创建自建应用\n   - 点击\"创建应用\"\n   - 填写应用名称、描述等信息\n   - 上传一个机器人头像\n\n3. 配置机器人权限\n   - 在左侧菜单选择\"权限管理\"\n   - 添加以下权限：\n     - `im:message:receive_v1`（接收消息）\n     - `im:message:send_v1`（发送消息）\n     - `im:message.group:read`（读取群组信息，可选）\n     - `im:message.p2p:read`（读取单聊信息，可选）\n\n4. 事件订阅配置\n   - 在左侧菜单选择\"事件订阅\"\n   - 填写\"请求网址\"（您部署此项目的URL）\n     - 例如：`https://your-domain.com/webhook/event`\n   - 点击\"验证\"（此时可能验证失败，稍后我们会解决）\n   - 添加事件：`im.message.receive_v1`（接收消息事件）\n\n5. 获取机器人凭证\n   - 在左侧菜单选择\"凭证与基础信息\"\n   - 记录以下信息：\n     - App ID\n     - App Secret\n     - Verification Token（事件订阅页面）\n\n6. 发布版本\n   - 提交审核并发布（内部应用可以跳过审核）\n\n### 步骤三：部署本项目\n\n1. 克隆代码\n   ```bash\n   git clone \u003crepository-url\u003e\n   cd FeishuRBT\n   ```\n\n2. 安装依赖\n   ```bash\n   pip install bottle waitress\n   ```\n\n3. 配置环境变量\n   ```bash\n   # 飞书机器人凭证\n   export VERIFICATION_TOKEN=\"your_verification_token\"\n   export APP_ID=\"your_app_id\"\n   export APP_SECRET=\"your_app_secret\"\n   export BOT_NAME=\"Dify机器人\"  # 机器人的名称，用于识别@消息\n   ```\n\n4. 启动服务\n   ```bash\n   python app.py\n   ```\n\n5. 使用内网穿透工具（如果在本地开发）\n   - 如Ngrok、Frp等\n   - 将本地8080端口映射到公网URL\n   - 复制公网URL并在飞书开发者平台\"事件订阅\"中更新\"请求网址\"\n\n6. 完成事件订阅验证\n   - 在飞书开发者平台点击\"验证\"按钮\n   - 如果配置正确，会显示验证成功\n\n### 步骤四：初始化并配置机器人\n\n1. 添加机器人为好友或拉入群组\n\n2. 初始化管理员（首次使用）\n   - 私聊机器人发送 `\\init-admin`\n   - 收到确认消息后，您将成为管理员\n\n3. 登录Web管理界面\n   - 发送 `\\admin-login` 命令\n   - 点击返回的链接访问管理界面\n\n4. 添加Dify模型\n   - 在管理界面选择\"模型管理\" \u003e \"添加模型\"\n   - 填写以下信息：\n     - 模型名称：自定义名称\n     - 模型描述：对模型的简单描述\n     - Dify API地址：Dify应用的API端点（例如：https://api.dify.ai/v1）\n     - 模型类型：选择对应类型（chatbot/agent/flow）\n     - API密钥：Dify应用的API Key\n\n5. 设置默认模型\n   - 在\"系统配置\"页面设置默认模型\n   - 设置会话超时时间（默认30分钟）\n\n### 步骤五：使用机器人\n\n1. 基本聊天\n   - 私聊：直接发送消息给机器人\n   - 群聊：@机器人 + 消息内容\n\n2. 使用命令查看帮助\n   - 发送 `\\help` 查看可用命令\n\n3. 切换模型\n   - 发送 `\\change-model 模型名称` 切换当前会话的模型\n\n4. 添加自定义命令（管理员）\n   - 通过管理界面添加自定义命令\n   - 或发送 `\\command-add 名称 简介 启动指令 模型` 命令\n\n## 🔢 可用命令列表\n\n### 通用命令\n- `\\help` - 显示帮助信息\n- `\\model-list` - 列出所有可用模型\n- `\\model-info [模型名称]` - 查看指定模型详情\n- `\\command-list` - 列出所有可用自定义命令\n- `\\change-model [模型名称]` - 切换当前对话使用的模型\n- `\\clear` - 清除当前会话历史\n- `\\session-info` - 查看当前会话状态\n- `\\subscribe-event [配置令牌]` - 订阅指定事件通知\n- `\\unsubscribe-event [配置令牌]` - 取消订阅指定事件\n- `\\list-subscriptions` - 查看您当前的所有订阅\n\n### 管理员命令\n- `\\init-admin` - 初始化管理员（仅首次使用）\n- `\\admin-login` - 管理员登录Web界面\n- `\\admin-logout` - 管理员退出Web界面\n- `\\admin-add [用户ID]` - 添加管理员权限\n- `\\admin-remove [用户ID]` - 移除管理员权限\n- `\\model-add [名称] [描述] [Dify地址] [类型] [密钥]` - 添加模型\n- `\\model-delete [名称]` - 删除模型\n- `\\model-update [名称] [参数] [新值]` - 更新模型参数\n- `\\set-default-model [名称]` - 设置默认模型\n- `\\set-session-timeout [分钟]` - 设置会话超时时间\n- `\\command-add [名称] [简介] [启动指令] [模型]` - 添加命令\n- `\\command-delete [名称]` - 删除命令\n- `\\command-update [名称] [参数] [新值]` - 更新命令\n- `\\webhook-list` - 查看可用的Webhook事件\n- `\\webhook-add [名称] [描述] [模型]` - 添加Webhook\n- `\\webhook-delete [ID]` - 删除Webhook\n- `\\webhook-status [ID] [启用/禁用]` - 修改Webhook状态\n\n## 📊 Web管理界面\n\nWeb管理界面提供直观的方式管理机器人，包括以下功能：\n\n- 模型管理：添加、编辑和删除模型\n- 命令管理：添加、编辑和删除自定义命令\n- Webhook管理：创建和管理Webhook，查看订阅情况和调用日志\n- 系统配置：设置默认模型和会话超时时间\n- 用户管理：查看用户并管理管理员权限\n- 日志查看：查看系统日志\n\nWeb 管理界面需要管理员执行`\\admin-login`，并通过响应的地址进行操作（未操作60分钟后自动失效）\n\n![image](https://github.com/user-attachments/assets/2aa94c66-997c-4a71-9173-4c8430f0db79)\n\n![image](https://github.com/user-attachments/assets/aa72d924-bb57-404b-b721-0e743c3bd81d)\n\n![image](https://github.com/user-attachments/assets/c2870afb-a48b-4e75-aaaf-ffd03fb18ac5)\n\n## 📦 数据存储\n\n本项目使用SQLite数据库存储配置和会话数据，包括：\n\n- 用户信息\n- 模型配置\n- 自定义命令\n- 会话历史\n- 系统设置\n- Webhook配置及订阅信息\n- Webhook调用日志\n\n数据库文件位于项目根目录下的`lark_dify_bot.db`。\n\n## 🔌 Webhook 系统\n\nWebhook系统允许外部应用通过HTTP请求触发机器人功能，并将结果推送给订阅用户或群组。\n\n### Webhook功能特点\n\n- 外部系统可以通过API调用触发AI分析\n- 用户/群组可以订阅感兴趣的事件通知\n- 支持自定义提示词模板处理输入数据\n- 提供调用日志和统计信息\n\n### 创建Webhook\n\n管理员可通过以下方式创建Webhook：\n\n1. Web管理界面\n   - 进入\"Webhook管理\" \u003e \"添加Webhook\"\n   - 填写名称、描述、选择模型\n   - 可选择性添加提示词模板\n\n2. 命令方式\n   ```\n   \\webhook-add 事件名称 事件描述 模型名称\n   ```\n\n### 订阅事件\n\n用户可以通过以下命令订阅事件：\n```\n\\subscribe-event 配置令牌\n```\n\n配置令牌可通过`\\webhook-list`命令查看，或由管理员分享。\n\n### 取消订阅\n\n用户可以通过以下命令取消订阅：\n```\n\\unsubscribe-event 配置令牌\n```\n\n### 查看订阅\n\n用户可以查看自己当前订阅的所有事件：\n```\n\\list-subscriptions\n```\n\n### 集成外部系统\n\n外部系统可以通过HTTP POST请求发送数据到Webhook URL：\n```\nPOST https://your-domain.com/api/webhook/your_token\nContent-Type: application/json\n\n{\n  \"data\": \"要分析的数据\",\n  \"additional_info\": \"其他信息\"\n}\n```\n\n机器人会使用配置的模型分析数据，并将结果推送给所有订阅者。\n\n### 实战示例：AWS Lambda 集成\n\n以下是在AWS Lambda中集成Webhook的详细步骤，实现自动将日志和事件分析结果发送到飞书：\n\n#### 1. 创建Webhook\n首先，在Dify飞书机器人中创建一个名为\"日志分析\"的Webhook：\n\n1. 发送命令：`\\webhook-add 日志分析 \"分析CloudWatch日志和报警\" GPT-4分析师`\n2. 或通过Web管理界面创建，设置提示词模板：\n   ```\n   请分析以下AWS日志或告警数据，提取关键信息：\n   \n   {data}\n   \n   请提供：\n   1. 问题概述\n   2. 可能原因\n   3. 建议操作\n   4. 严重程度评估\n   ```\n\n3. 记录生成的API Token和配置Token\n4. 让运维团队成员订阅此Webhook：`\\subscribe-event 配置Token`\n\n#### 2. 创建Lambda函数\n\n在AWS Console创建新的Lambda函数：\n\n```python\nimport json\nimport urllib.request\nimport urllib.parse\n\n# 配置Webhook URL和Token\nWEBHOOK_URL = \"https://your-domain.com/api/webhook/your_api_token\"\n\ndef lambda_handler(event, context):\n    try:\n        # 提取CloudWatch事件/日志数据\n        alarm_data = {}\n        \n        # 如果是CloudWatch告警\n        if 'detail' in event and 'alarmName' in event.get('detail', {}):\n            alarm_data = {\n                \"alarm_name\": event['detail']['alarmName'],\n                \"state\": event['detail'].get('state', {}).get('value'),\n                \"reason\": event['detail'].get('state', {}).get('reason'),\n                \"timestamp\": event['time'],\n                \"account\": event['account'],\n                \"region\": event['region']\n            }\n        # 如果是日志事件\n        elif 'awslogs' in event:\n            # 处理CloudWatch Logs\n            import base64\n            import zlib\n            \n            compressed_data = base64.b64decode(event['awslogs']['data'])\n            uncompressed_data = zlib.decompress(compressed_data, 16+zlib.MAX_WBITS)\n            log_data = json.loads(uncompressed_data)\n            \n            alarm_data = {\n                \"log_group\": log_data.get('logGroup', ''),\n                \"log_stream\": log_data.get('logStream', ''),\n                \"log_events\": log_data.get('logEvents', []),\n                \"subscription_filters\": log_data.get('subscriptionFilters', [])\n            }\n        else:\n            # 其他事件类型\n            alarm_data = event\n        \n        # 发送到Webhook\n        headers = {\n            \"Content-Type\": \"application/json\"\n        }\n        \n        data = {\n            \"type\": \"aws_alert\",\n            \"data\": json.dumps(alarm_data, indent=2),\n            \"source\": \"aws_lambda\",\n            \"severity\": \"high\"\n        }\n        \n        req = urllib.request.Request(\n            WEBHOOK_URL, \n            data=json.dumps(data).encode('utf-8'),\n            headers=headers,\n            method=\"POST\"\n        )\n        \n        with urllib.request.urlopen(req) as response:\n            response_body = response.read().decode('utf-8')\n            print(f\"Response: {response_body}\")\n            \n        return {\n            'statusCode': 200,\n            'body': json.dumps('Alert sent to Feishu successfully!')\n        }\n        \n    except Exception as e:\n        print(f\"Error: {str(e)}\")\n        return {\n            'statusCode': 500,\n            'body': json.dumps(f'Error: {str(e)}')\n        }\n```\n\n#### 3. 配置Lambda触发器\n\n可以从多个AWS服务配置触发器：\n- CloudWatch告警\n- CloudWatch Logs（通过订阅过滤器）\n- EventBridge规则（捕获各种AWS事件）\n\n例如，设置CloudWatch Logs订阅过滤器：\n1. 转到CloudWatch控制台 \u003e 日志 \u003e 日志组\n2. 选择要监控的日志组\n3. 点击\"操作\" \u003e \"订阅过滤器\" \u003e \"创建Lambda订阅过滤器\"\n4. 选择您创建的Lambda函数\n5. 设置筛选模式，例如`ERROR`或`Exception`\n\n#### 4. 测试集成\n\n1. 触发一个测试事件（例如创建一个测试告警）\n2. 检查Lambda函数日志确认执行成功\n3. 在飞书中，订阅了\"日志分析\"Webhook的用户/群组应收到分析结果通知\n\n这样，您就创建了一个自动化系统，可以实时分析AWS日志和告警，并通过Dify AI提供智能分析结果，直接发送到飞书中，帮助团队更快地应对问题。\n\n## 🔧 高级配置\n\n### 环境变量\n\n```\nVERIFICATION_TOKEN=your_verification_token\nAPP_ID=your_app_id\nAPP_SECRET=your_app_secret\nBOT_NAME=Dify机器人\nBOT_OPEN_ID=ou_xxxx  # 可选，机器人的open_id\n```\n\n### 会话超时配置\n\n通过以下命令设置会话超时时间：\n```\n\\set-session-timeout 分钟数\n```\n超时后，会话上下文将被自动清除，开始新会话。\n\n默认会话超时时间为30分钟，可以在Web管理界面的\"系统配置\"页面调整。\n\n### 自定义命令系统\n\n自定义命令允许您为特定任务创建快捷方式，例如：\n- `\\翻译 Hello World` - 自动翻译文本\n- `\\总结 长文本...` - 自动总结长文本\n- `\\代码 实现xxx功能` - 生成代码\n\n每个命令可以关联特定的Dify模型，便于快速切换不同功能。\n\n### Webhook提示词模板\n\n创建Webhook时，您可以设置提示词模板来处理输入数据：\n\n```\n请分析以下数据并提取关键信息：\n\n{data}\n\n分析要点：\n1. 主要问题是什么？\n2. 有哪些解决方案？\n3. 最佳行动建议是什么？\n```\n\n模板中的`{data}`会被替换为实际接收到的数据。如果不设置模板，系统会使用默认模板。\n\n## 🔄 与其他系统集成\n\n除了AWS Lambda，Webhook也可以与其他常见系统集成：\n\n### GitHub 集成\n\n使用GitHub Actions自动将问题和PR发送到飞书：\n\n```yaml\nname: Send Issue to Feishu\n\non:\n  issues:\n    types: [opened, edited]\n  pull_request:\n    types: [opened, edited]\n\njobs:\n  notify:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Send to Feishu\n        run: |\n          PAYLOAD=$(jq -n \\\n            --arg title \"${{ github.event.issue.title || github.event.pull_request.title }}\" \\\n            --arg body \"${{ github.event.issue.body || github.event.pull_request.body }}\" \\\n            --arg url \"${{ github.event.issue.html_url || github.event.pull_request.html_url }}\" \\\n            --arg user \"${{ github.event.sender.login }}\" \\\n            '{type: \"github_event\", data: {title: $title, body: $body, url: $url, user: $user}}')\n          \n          curl -X POST \\\n            -H \"Content-Type: application/json\" \\\n            -d \"$PAYLOAD\" \\\n            \"https://your-domain.com/api/webhook/your_api_token\"\n```\n\n### 监控系统集成\n\n在Prometheus Alertmanager中配置Webhook通知：\n\n```yaml\nreceivers:\n- name: 'feishu-webhook'\n  webhook_configs:\n  - url: 'https://your-domain.com/api/webhook/your_api_token'\n    send_resolved: true\n    http_config:\n      follow_redirects: true\n    max_alerts: 10\n    \nroute:\n  receiver: 'feishu-webhook'\n  group_wait: 30s\n  group_interval: 5m\n  repeat_interval: 4h\n```\n\n### Slack/Teams 消息转发\n\n使用Zapier或n8n等无代码工具，将其他平台消息转发到Dify飞书机器人：\n\n1. 触发器: 新的Slack消息\n2. 操作: HTTP请求 (POST)\n   - URL: https://your-domain.com/api/webhook/your_api_token\n   - Body: \n     ```json\n     {\n       \"type\": \"message_forward\",\n       \"data\": \"{{Channel}} - {{User}}: {{Message}}\",\n       \"source\": \"slack\"\n     }\n     ```\n\n## 🤔 常见问题\n\n### 如何处理飞书事件订阅验证失败？\n\n1. 确认环境变量中的`VERIFICATION_TOKEN`是否正确\n2. 确认服务器是否能正常访问\n3. 检查日志了解详细错误原因\n\n### 如何添加新模型？\n\n通过Web管理界面或使用命令：\n```\n\\model-add 模型名称 模型描述 https://your-dify-api.com/v1 chatbot your_api_key\n```\n\n### 如何处理会话不响应？\n\n1. 检查会话状态：`\\session-info`\n2. 尝试清除会话：`\\clear`\n3. 切换到确定可用的模型：`\\change-model [模型名称]`\n\n### Webhook无法收到通知？\n\n1. 确认Webhook状态是否为\"启用\"\n2. 检查是否有用户或群组订阅该Webhook\n3. 查看Webhook调用日志，了解请求是否成功处理\n4. 检查飞书机器人是否有发送消息的权限\n\n### Webhook调用返回401错误？\n\n这表示API Token无效，可能原因：\n1. Token复制错误或包含额外空格\n2. Token已被重新生成\n3. Webhook已被禁用\n\n解决方法：在管理界面重新获取API Token，或检查Webhook状态。\n\n### 如何在生产环境部署？\n\n推荐使用以下方式部署：\n1. 使用Docker容器化\n2. 配置反向代理（Nginx/Apache）\n3. 设置进程管理工具（Supervisor/Systemd）\n4. 安装waitress用于多线程支持：`pip install waitress`\n\n生产环境启动命令示例：\n```bash\n# 使用waitress启动（多线程支持）\npython app.py\n\n# 或使用gunicorn(需另行安装)\ngunicorn --workers=4 --bind=0.0.0.0:8080 app:app\n```\n\n## 🔄 性能优化\n\n### 多线程支持\n\n默认情况下，程序会尝试使用waitress作为WSGI服务器，支持并发处理多个请求。如果环境中未安装waitress，会回退到Bottle的单线程服务器。\n\n为获得最佳性能，建议安装waitress：\n```\npip install waitress\n```\n\n### 会话管理\n\n程序自动管理会话超时，避免长时间不活跃的会话占用资源。您可以通过以下方式优化：\n\n1. 根据使用情况调整会话超时时间\n2. 定期检查会话状态：`\\session-info`\n3. 及时清理不需要的会话：`\\clear`\n\n## 📈 项目扩展\n\n### 添加新功能\n\n1. 支持更多的Dify功能（例如上传文件）\n2. 增加更多飞书交互方式（例如消息卡片）\n3. 添加用户画像和偏好设置\n4. 实现群组特定的AI个性化配置\n\n### 多平台支持\n\n您可以参考本项目架构，轻松扩展支持（以下案例未经验证，需要测试和开发，只提供大体思路）：\n1. [企业微信](./docs/extensions_guide.md#1-企业微信扩展)\n2. [钉钉](./docs/extensions_guide.md#2-钉钉扩展)\n3. [Slack](./docs/extensions_guide.md#3-slack扩展)\n4. [Discord](./docs/extensions_guide.md#4-discord扩展)\n\n## 最佳实践/实践案例\n\n- 命令 最佳实践案例：\n    - [案例1: 企业内部知识库助手](./docs/command_best_practices.md#1-企业内部知识库助手)\n    - [案例2: 多级智能客服与工单系统对接](./docs/command_best_practices.md#2-多级智能客服与工单系统对接)\n    - [案例3: 员工培训与学习助手](./docs/command_best_practices.md#3-员工培训与学习助手)\n    - [案例4: 会议记录与项目管理助手](./docs/command_best_practices.md#4-会议记录与项目管理助手)\n    - [案例5: 数据分析与业务报告生成助手](./docs/command_best_practices.md#5-数据分析与业务报告生成助手)\n    - [案例6: 开发文档与代码助手](./docs/command_best_practices.md#6-开发文档与代码助手)\n    - [案例7: 自动化市场情报收集](./docs/command_best_practices.md#7-自动化市场情报收集)\n    - [案例8: 自动化日常管理任务](./docs/command_best_practices.md#8-自动化日常管理任务)\n- Webhook 最佳实践案例：\n    - [案例1: 通过Lambda监控AWS费用异常](./docs/webhook_best_practices.md#案例1-通过lambda监控aws费用异常)\n    - [案例2: 通过Lambda监控CloudWatch异常](./docs/webhook_best_practices.md#案例2-通过lambda监控cloudwatch异常)\n    - [案例3: 通过CloudEvents触发Lambda做云事件监控](./docs/webhook_best_practices.md#案例3-通过cloudevents触发lambda做云事件监控)\n    - [案例4: 定期汇总服务健康状态](./docs/webhook_best_practices.md#案例4-定期汇总服务健康状态)\n    - [案例5: 监控数据库性能指标](./docs/webhook_best_practices.md#案例5-监控数据库性能指标)\n    - [案例6: CI/CD管道状态通知](./docs/webhook_best_practices.md#案例6-cicd管道状态通知)\n\n\n## 📄 许可证\n\n[LICENSE](./LICENSE)\n\n## 👨‍💻 贡献\n\n欢迎通过提交Issue或Pull Request来贡献代码。我们对项目的任何改进建议都持开放态度！\n\n如果您想在当前项目进行二次开发可以参考[开发者文档](./docs/dev.md)。\n\n## 🔄 更新日志\n\n### v1.1.0\n- 添加Webhook系统，支持外部系统调用和事件订阅\n- 增加会话超时配置功能\n- 支持Markdown格式消息显示\n- 优化Web管理界面\n- 添加waitress多线程支持\n\n### v1.0.0\n- 初始版本发布\n- 支持Dify API集成\n- 实现基本的机器人功能和命令系统\n- 添加Web管理界面\n\n### v2.0.0\n**重构**：模块化架构重构与数据库迁移系统  \n\n**主要更新内容**：\n- 架构重构：将单体文件拆分为模块化结构（models/、handlers/、services/、utils/）\n- 数据库迁移系统：实现完整的数据库迁移系统，支持版本跟踪\n- 修复群聊功能：改进提及解析机制，解决群聊命令识别问题\n- 增强Webhook功能：添加回退机制和直推模式\n- 模板文件分离：将所有模板文件（.tpl）从Python代码中提取为独立文件\n- 样式文件分离：提取CSS样式为独立样式表，提升可维护性\n- 简化Docker配置：移除不必要的组件，优化配置\n- 管理界面优化：新增数据库管理界面和订阅管理功能\n- 错误处理改进：完善错误处理机制和UTF-8编码支持\n- 日志系统增强：添加全面的日志记录和调试功能\n\n**⚠️ 重要提醒**\n- 破坏性变更：数据库结构已更新，升级时需要执行数据库迁移操作\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanycodes%2Ffeishurbt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanycodes%2Ffeishurbt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanycodes%2Ffeishurbt/lists"}