diff --git a/README.md b/README.md index 672373e..886149d 100644 --- a/README.md +++ b/README.md @@ -24,12 +24,18 @@ "tenant": [ "im:message", "im:message:readonly", + "im:resource", + "im:message.p2p_msg:readonly", + "cardkit:card:read", + "cardkit:card:write", + "cardkit:template:read", "aily:file:read", "aily:file:write" ], "user": [ "aily:file:read", - "aily:file:write" + "aily:file:write", + "im:message.p2p_msg:get_as_user" ] } } @@ -39,15 +45,15 @@ |---------|------| | `im:message` | 发送消息 | | `im:message:readonly` | 读取消息 | -| `aily:file:read` | 读取文件 | -| `aily:file:write` | 写入文件 | +| `im:resource` | **关键**:访问消息中的资源(文件) | +| `im:message.p2p_msg:readonly` | 读取私聊消息 | +| `cardkit:*` | 发送交互式卡片 | +| `aily:file:*` | 文件读写 | -详细权限配置请查看 [`FEISHU_PERMISSIONS.md`](./FEISHU_PERMISSIONS.md) +详细权限配置请查看 [`FEISHU_SCOPES.md`](./FEISHU_SCOPES.md) ### 3. 配置事件订阅 -**方式一:HTTP 回调(默认)** - 1. 进入"事件订阅"页面 2. 选择 **"HTTP 回调"** 方式 3. 开启"启用事件订阅" @@ -56,26 +62,13 @@ - `im.message.receive_v1` - 接收消息 6. 保存后复制 Verification Token 和 Encrypt Key -**方式二:WebSocket 长连接(内网推荐)** - -1. 进入"事件订阅"页面 -2. 选择 **"WebSocket 长连接"** 方式 -3. 开启"启用事件订阅" -4. 配置订阅事件: - - `im.message.receive_v1` - 接收消息 -5. 保存后复制 Verification Token 和 Encrypt Key -6. 在 `.env` 中设置 `FEISHU_MODE=websocket` - -> **💡 提示:** WebSocket 模式不需要公网 IP,适合内网部署。 -> -> 详细配置请查看 [`WEBSOCKET.md`](./WEBSOCKET.md) +> **💡 提示:** 也可以使用 WebSocket 长连接模式(不需要公网 IP),在 `.env` 中设置 `FEISHU_MODE=websocket` ### 4. 配置机器人 1. 进入"机器人"页面 2. 开启"启用机器人" 3. 配置机器人名称和头像 -4. 在"消息已读状态"中开启"获取用户已读状态"(可选) ### 5. 安装应用 @@ -87,32 +80,7 @@ ## 📦 部署 -### 🐧 Linux / 🍎 macOS - -```bash -# 一键启动 -chmod +x start.sh -./start.sh - -# 或手动部署 -npm install -cp .env.example .env -npm start -``` - -### 🪟 Windows - -```cmd -# 双击运行 -start.bat - -# 或手动部署 -npm install -copy .env.example .env -npm start -``` - -### 🐳 Docker(所有平台) +### 🐳 Docker(推荐) ```bash # 构建镜像 @@ -127,48 +95,42 @@ docker run -d \ qiniu-feishu-bot ``` -### 🌐 Nginx 反向代理(生产环境推荐) - -**特点:** -- ✅ 不占用 80/443 端口(Node.js 应用使用 3030 端口) -- ✅ 支持多域名部署(与其他应用共享 Nginx) -- ✅ 支持 HTTPS 配置 - -详细配置请查看 [`NGINX.md`](./NGINX.md) +### 🐧 Linux / 🍎 macOS ```bash -# 快速配置 -sudo nano /etc/nginx/sites-available/qiniu-bot -# 复制 NGINX.md 中的配置 -sudo ln -s /etc/nginx/sites-available/qiniu-bot /etc/nginx/sites-enabled/ -sudo nginx -t -sudo systemctl restart nginx +# 安装依赖 +npm install + +# 复制环境变量 +cp .env.example .env + +# 编辑配置 +nano .env + +# 启动服务(使用 PM2) +pm2 start pm2.config.cjs + +# 查看日志 +pm2 logs qiniu-bot ``` -**Nginx 配置示例(多域名):** +### 🪟 Windows -```nginx -# 七牛云上传机器人 -server { - listen 80; - server_name qiniu.your-domain.com; # 独立域名 - - location /feishu/event { - proxy_pass http://127.0.0.1:3030/feishu/event; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - } -} +```cmd +# 安装依赖 +npm install -# 其他应用 -server { - listen 80; - server_name other.your-domain.com; - - location / { - proxy_pass http://127.0.0.1:4000; - } -} +# 复制环境变量 +copy .env.example .env + +# 编辑配置 +notepad .env + +# 启动服务(使用 PM2) +pm2 start pm2.config.cjs + +# 查看日志 +pm2 logs qiniu-bot ``` --- @@ -185,8 +147,6 @@ FEISHU_VERIFICATION_TOKEN=xxxxxxxxxxxxxx FEISHU_ENCRYPT_KEY=xxxxxxxxxxxxxx # 飞书事件接收模式:http (HTTP 回调) 或 websocket (WebSocket 长连接) -# - http: 需要公网 IP/域名,配置简单 -# - websocket: 不需要公网 IP,内网可用 FEISHU_MODE=http # 七牛云配置(可选,也可通过卡片配置) @@ -213,6 +173,20 @@ NODE_ENV=production "region": "z0", "domain": "https://your-cdn-domain.com" } + }, + "uploadPaths": { + "原文件名": "", + "ipa": "/ipa/gamehall_jinxianv2.ipa" + }, + "uploadProfiles": { + "默认": { + "bucket": "default", + "path": "" + }, + "IPA 上传": { + "bucket": "default", + "path": "ipa" + } } } ``` @@ -221,22 +195,31 @@ NODE_ENV=production ## 💡 使用方式 -### 命令触发 +### 常用命令 | 命令 | 说明 | |------|------| -| `/upload` | 上传文件到七牛云 | -| `/upload --original` | 使用原文件名上传 | -| `/config` | 管理七牛云配置 | -| `/help` | 查看帮助 | +| `/upload` | 开始上传流程 | +| `/config list` | 查看存储桶配置 | +| `/path list` | 查看预设路径 | +| `/path add <名称> <路径>` | 添加预设路径 | +| `/profile list` | 查看上传配置模板 | +| `/profile add <名称> <桶> [路径]` | 添加上传配置 | +| `/profile remove <名称>` | 删除上传配置 | +| `/help` | 查看详细帮助 | -### 卡片交互 +### 使用流程 -发送任意消息给机器人,会收到交互式卡片: +**方式 1:选择配置 → 发送文件** +1. 发送 `/upload` +2. 选择上传配置 +3. 发送文件 +4. 确认上传 -- 📎 **选择文件** - 点击后上传附件 -- ⚙️ **配置** - 管理七牛云配置 -- ❓ **帮助** - 查看使用说明 +**方式 2:发送文件 → 选择配置** +1. 直接发送文件 +2. 选择上传配置 +3. 确认上传 --- @@ -247,23 +230,18 @@ qiniu-feishu-bot/ ├── src/ │ ├── index.js # 主入口 │ ├── feishu-api.js # 飞书 API 封装 -│ ├── qiniu-uploader.js # 七牛云上传 -│ └── cards/ # 卡片模板 -│ ├── upload-card.js # 上传卡片 -│ └── config-card.js # 配置卡片 +│ └── qiniu-uploader.js # 七牛云上传 ├── config/ -│ └── qiniu-config.json.example -├── .env.example +│ └── qiniu-config.json # 七牛云配置 +├── .env # 环境变量 +├── .env.example # 环境变量示例 +├── .env.production # 生产环境配置 ├── .gitignore ├── Dockerfile ├── package.json -├── start.sh # Linux/macOS 启动脚本 -├── start.bat # Windows 启动脚本 +├── pm2.config.cjs # PM2 配置 ├── README.md # 项目说明 -├── DEPLOY.md # 详细部署指南(Linux/macOS/Windows) -├── WINDOWS.md # Windows 专用指南 -├── NGINX.md # Nginx 反向代理部署指南 -└── WEBSOCKET.md # WebSocket 长连接模式配置指南 +└── FEISHU_SCOPES.md # 飞书权限配置 ``` --- @@ -275,21 +253,18 @@ qiniu-feishu-bot/ 1. 检查七牛云配置是否正确 2. 确认存储桶区域代码匹配 3. 检查 AccessKey/SecretKey 权限 +4. 在七牛云控制台关闭存储桶的"防覆盖"设置 ### 消息无响应 1. 检查事件订阅配置 -2. 确认服务器可被飞书访问(需要公网 IP) -3. 查看日志输出 +2. 确认服务器可被飞书访问(HTTP 模式需要公网 IP) +3. 查看日志:`pm2 logs qiniu-bot` +4. 检查飞书应用权限是否已授权 -### 文件无法覆盖 +### 文件下载失败 -在七牛云控制台关闭存储桶的"防覆盖"设置。 - -### 跨平台问题 - -- **Windows**: 查看 [`WINDOWS.md`](./WINDOWS.md) -- **Linux/macOS**: 查看 [`DEPLOY.md`](./DEPLOY.md) +确保已添加 `im:resource` 权限,该权限用于访问消息中的文件资源。 ---