feat: 添加飞书tenant_access_token自动获取功能

- 在FeishuSheetsClient中添加_get_tenant_access_token()方法
- 实现token自动缓存和刷新机制(提前30分钟刷新)
- 更新配置类支持FEISHU_APP_ID和FEISHU_APP_SECRET
- 从.env中移除FEISHU_TOKEN,完全使用应用凭证
- 更新report.py和gui.py支持新的配置检查逻辑
- 更新FeishuScheduleManager配置检查逻辑
- 更新文档和示例文件说明新的配置方式

系统现在支持两种认证方式:
1. 推荐:使用应用凭证(FEISHU_APP_ID + FEISHU_APP_SECRET)
2. 备选:使用手动token(FEISHU_TOKEN)

所有功能测试通过,系统能自动获取、缓存和刷新token。
This commit is contained in:
2025-12-31 06:03:51 +08:00
parent 929c4b836f
commit 9b19015156
7 changed files with 298 additions and 25 deletions

View File

@@ -75,9 +75,16 @@ CONFLUENCE_CONTENT_ID=155764524
# 飞书表格配置(用于获取排班人员信息)
FEISHU_BASE_URL=https://open.feishu.cn/open-apis/sheets/v3
FEISHU_TOKEN=your-feishu-api-token
FEISHU_SPREADSHEET_TOKEN=EgNPssi2ghZ7BLtGiTxcIBUmnVh
# 飞书应用凭证推荐方式自动获取tenant_access_token
# 创建飞书自建应用后获取app_id和app_secret
FEISHU_APP_ID=your-feishu-app-id
FEISHU_APP_SECRET=your-feishu-app-secret
# 备选手动配置token不推荐token会过期
# FEISHU_TOKEN=your-feishu-api-token
# 数据库配置
DATABASE_PATH=data/daily_logs.db
@@ -205,10 +212,29 @@ GUI 功能:
- **`manager.py`** - 内容管理器,提供高级内容管理功能
### 飞书模块 (`src/feishu/`)
- **`client.py`** - 飞书 API 客户端
- **`client.py`** - 飞书 API 客户端支持自动获取和刷新tenant_access_token
- **`parser.py`** - 排班数据解析器
- **`manager.py`** - 飞书排班管理器,缓存和刷新排班信息
#### Token 自动获取机制
飞书模块现在支持两种认证方式:
1. **推荐方式**使用应用凭证FEISHU_APP_ID + FEISHU_APP_SECRET
- 系统会自动调用飞书API获取tenant_access_token
- token有效期2小时系统会在过期前30分钟自动刷新
- 无需手动管理token过期问题
2. **备选方式**使用手动配置的FEISHU_TOKEN
- 兼容旧配置方式
- token过期后需要手动更新
- 不推荐长期使用
#### 如何获取应用凭证
1. 登录飞书开放平台https://open.feishu.cn/
2. 创建自建应用
3. 在"凭证与基础信息"中获取App ID和App Secret
4. 为应用添加"获取tenant_access_token"权限
5. 将应用发布到企业(仅自建应用需要)
### 数据库模块 (`src/database/`)
- **`base.py`** - 数据库基类,提供统一的连接管理
- **`daily_logs.py`** - 每日交接班日志数据库
@@ -271,7 +297,15 @@ python3 main.py report-today
1. **连接失败**: 检查 `.env` 文件中的 API 令牌和 URL
2. **数据库错误**: 确保 `data/` 目录存在且有写入权限
3. **解析错误**: 检查 Confluence 页面结构是否发生变化
4. **飞书数据获取失败**: 验证飞书表格权限和 token 有效性
4. **飞书数据获取失败**:
- 验证飞书表格权限
- 检查应用凭证是否正确FEISHU_APP_ID + FEISHU_APP_SECRET
- 确认应用已发布到企业(自建应用需要)
- 检查网络连接是否能访问飞书API
5. **飞书token获取失败**:
- 确认应用有"获取tenant_access_token"权限
- 检查app_id和app_secret是否正确
- 查看日志文件获取详细错误信息
### 日志级别