Files
qiniu-feishu-bot/WEBSOCKET.md
饭团 3769d164b1 feat: 支持 HTTP 回调和 WebSocket 长连接两种模式
新增功能:
- 通过 FEISHU_MODE 配置切换模式 (http/websocket)
- 安装飞书 SDK (@larksuiteoapi/node-sdk)
- WebSocket 模式支持内网部署(无需公网 IP)
- 新增 WEBSOCKET.md 配置指南

更新:
- README.md 添加两种模式说明
- .env.example 添加 FEISHU_MODE 配置
- 健康检查返回当前模式信息
2026-03-05 16:42:17 +08:00

214 lines
3.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WebSocket 长连接模式配置指南
## 📡 两种模式对比
| 特性 | HTTP 回调 | WebSocket 长连接 |
|------|----------|-----------------|
| 公网 IP | ✅ 需要 | ❌ 不需要 |
| 域名 | ✅ 需要 | ❌ 不需要 |
| HTTPS | ✅ 推荐 | ❌ 不需要 |
| 内网部署 | ❌ 困难 | ✅ 简单 |
| 实时性 | 好 | 更好 |
| 配置复杂度 | 简单 | 中等 |
---
## 🚀 配置 WebSocket 模式
### 1⃣ 飞书开放平台配置
1. 访问 https://open.feishu.cn/
2. 进入你的应用管理页面
3. 点击"事件订阅"
4. **选择"WebSocket 长连接"方式**
5. 开启"启用事件订阅"
6. 添加订阅事件:
- `im.message.receive_v1` - 接收消息
7. 保存并复制:
- Verification Token
- Encrypt Key
### 2⃣ 修改配置文件
编辑 `.env` 文件:
```env
# 飞书配置
FEISHU_APP_ID=cli_xxxxxxxxxx
FEISHU_APP_SECRET=xxxxxxxxxxxxxx
FEISHU_VERIFICATION_TOKEN=xxxxxxxxxxxxxx
FEISHU_ENCRYPT_KEY=xxxxxxxxxxxxxx
# 设置为 WebSocket 模式
FEISHU_MODE=websocket
# 七牛云配置
QINIU_ACCESS_KEY=xxxxxxxxxxxxxx
QINIU_SECRET_KEY=xxxxxxxxxxxxxx
QINIU_BUCKET=your-bucket-name
QINIU_REGION=z0
QINIU_DOMAIN=https://your-cdn.com
# 服务配置
PORT=3030
NODE_ENV=production
```
### 3⃣ 安装依赖
```bash
cd /path/to/qiniu-feishu-bot
npm install
```
### 4⃣ 启动服务
```bash
# 使用 PM2
pm2 restart qiniu-bot
# 或直接启动
npm start
```
### 5⃣ 查看日志
```bash
# PM2 日志
pm2 logs qiniu-bot
# 应该看到:
# 🚀 七牛云上传机器人启动 (WebSocket 长连接模式)
# 📡 WebSocket 已启动
# ✅ WebSocket 连接成功
```
---
## 🔧 故障排查
### WebSocket 连接失败
**检查配置:**
```bash
# 验证 .env 配置
cat .env | grep FEISHU
# 确认 FEISHU_MODE=websocket
```
**查看日志:**
```bash
pm2 logs qiniu-bot --lines 100
```
**常见错误:**
1. **验证失败**
- 检查 Verification Token 是否正确
- 检查 Encrypt Key 是否正确
2. **连接被拒绝**
- 检查防火墙是否允许出站连接
- 确认服务器能访问外网
3. **认证失败**
- 检查 App ID 和 App Secret
---
## 📊 监控 WebSocket 状态
### 健康检查
```bash
curl http://localhost:3030/health
```
返回:
```json
{
"status": "ok",
"timestamp": "2026-03-05T08:00:00.000Z",
"mode": "websocket",
"port": 3030
}
```
### 连接状态
查看 PM2 日志中的连接状态:
```bash
pm2 logs qiniu-bot | grep -E "(WebSocket|连接|open|close)"
```
---
## 🔄 切换模式
### 从 HTTP 切换到 WebSocket
```bash
# 1. 修改 .env
nano .env
# 设置 FEISHU_MODE=websocket
# 2. 重启服务
pm2 restart qiniu-bot
# 3. 验证
pm2 logs qiniu-bot
```
### 从 WebSocket 切换到 HTTP
```bash
# 1. 修改 .env
nano .env
# 设置 FEISHU_MODE=http
# 2. 重启服务
pm2 restart qiniu-bot
# 3. 在飞书开放平台改回 HTTP 回调方式
```
---
## 💡 最佳实践
### WebSocket 模式适用场景
- ✅ 内网服务器(无公网 IP
- ✅ 开发测试环境
- ✅ 不想配置域名和 HTTPS
- ✅ 需要更好的实时性
### HTTP 回调模式适用场景
- ✅ 云服务器(有公网 IP
- ✅ 生产环境
- ✅ 已有域名和 HTTPS
- ✅ 需要更可控的连接管理
---
## 📝 注意事项
1. **WebSocket 长连接会保持在线状态**
- 确保服务器网络稳定
- 断线会自动重连5 秒间隔)
2. **两种方式不能同时使用**
- 通过 `FEISHU_MODE` 配置选择
- 飞书开放平台也要对应配置
3. **健康检查始终可用**
- 无论哪种模式,`/health` 端点都工作
- 可用于监控服务状态
---
**🍙 祝你使用愉快!**