- 飞书消息接收与处理(文字、图片、Word 文档) - WordPress REST API 文章发布 - 图片自动上传到媒体库 - Word 文档解析与发布 - HTML 格式化与分类自动匹配 - Python CLI 工具(避免 shell 引号冲突) - Webhook 服务器(8080 端口) - 完整日志系统
194 lines
5.7 KiB
Markdown
194 lines
5.7 KiB
Markdown
# 飞书机器人发布问题修复总结
|
||
|
||
## 📋 问题列表
|
||
|
||
| 序号 | 问题描述 | 严重程度 | 状态 |
|
||
|------|---------|---------|------|
|
||
| 1 | 飞书机器人使用未加密的图片链接发布到文章,图片打不开 | 🔴 严重 | ✅ 已修复 |
|
||
| 2 | 发布图片到文章时,删除了原有文字内容,只保留图片 | 🔴 严重 | ✅ 已修复 |
|
||
| 3 | 发布图片时报错:WordPress 返回"传入的 JSON 体无效" | 🟡 中等 | ✅ 已修复 |
|
||
|
||
---
|
||
|
||
## 🔍 问题 1:飞书图片链接问题
|
||
|
||
### 原始问题
|
||
飞书机器人发布文章时,图片使用了飞书的临时链接(如 `https://www.feishu.cn/file/26b372ae-e315-4e61-8047-dc93608b830f?public=1`),在 WordPress 网站上无法正常显示。
|
||
|
||
### 根本原因
|
||
1. 飞书图片 URL 需要特定的认证 token 才能访问
|
||
2. WordPress 网站无法直接访问飞书的私有图床
|
||
3. 飞书图片链接有有效期限制
|
||
|
||
### 解决方案
|
||
**采用"下载 → 上传 → 替换"三步走策略**:
|
||
|
||
1. 创建飞书 API 客户端模块 (`modules/feishu_api.py`)
|
||
- 获取飞书访问令牌(自动刷新)
|
||
- 下载飞书图片(支持 base64 解码)
|
||
- 下载飞书文件(支持 base64 解码)
|
||
|
||
2. 更新飞书机器人脚本 (`feishu_bot.py`)
|
||
- 新增 `_download_image()` 方法:下载飞书图片到本地
|
||
- 新增 `_download_file()` 方法:下载飞书文件到本地
|
||
- 新增 `_get_message_images()` 方法:获取消息中的所有图片
|
||
|
||
3. 更新飞书配置 (`feishu_config.py`)
|
||
- 填入飞书应用凭证
|
||
|
||
---
|
||
|
||
## 🔍 问题 2:文字被删除问题
|
||
|
||
### 原始问题
|
||
发布图片到文章时,删除了原有文字内容,只保留了图片。
|
||
|
||
### 根本原因
|
||
`_handle_image_message` 方法中,`text="图片文章"` 覆盖了原始文字内容。
|
||
|
||
### 解决方案
|
||
1. 更新 `_handle_image_message` 方法,保留原始文字内容
|
||
2. 新增 `message_id` 和 `chat_id` 参数,用于获取消息中的图片
|
||
3. 确保图片发布时不会覆盖文字内容
|
||
|
||
---
|
||
|
||
## 🔍 问题 3:JSON 格式错误
|
||
|
||
### 原始问题
|
||
发布图片时报错:WordPress 返回"传入的 JSON 体无效"。
|
||
|
||
### 根本原因
|
||
1. Webhook 服务器收到空数据或格式错误的数据
|
||
2. JSON 解析失败,导致请求处理中断
|
||
|
||
### 解决方案
|
||
1. 更新 Webhook 服务器 (`webhook_server.py`)
|
||
- 添加更详细的错误处理
|
||
- 添加空请求检查
|
||
- 添加 JSON 解析失败时的详细日志
|
||
|
||
---
|
||
|
||
## 📁 文件结构
|
||
|
||
```
|
||
/www/wwwroot/wp-publish/
|
||
├── modules/
|
||
│ ├── feishu_api.py # 飞书 API 客户端(新增)
|
||
│ ├── wp_api.py # WordPress API
|
||
│ ├── wp_category.py # 分类匹配
|
||
│ ├── wp_formatter.py # HTML 格式化
|
||
│ ├── wp_image_handler.py # 图片处理
|
||
│ ├── wp_logger.py # 日志系统
|
||
│ └── wp_parse_docx.py # Word 解析
|
||
├── scripts/
|
||
│ ├── wp_publish.py # Word 文档发布
|
||
│ └── wp_publish_text.py # 文字 + 图片发布
|
||
├── feishu_bot.py # 飞书机器人(已更新)
|
||
├── feishu_config.py # 飞书配置(已更新)
|
||
├── webhook_server.py # Webhook 服务器(已更新)
|
||
├── IMAGE_FIX.md # 问题说明文档
|
||
├── BUGFIX_SUMMARY.md # 修复总结文档
|
||
└── logs/ # 日志目录
|
||
```
|
||
|
||
---
|
||
|
||
## 🚀 使用方式
|
||
|
||
### 方式 1:发送文字 + 图片
|
||
在飞书中发送文字和图片,机器人会自动:
|
||
1. 下载所有图片
|
||
2. 上传到 WordPress 媒体库
|
||
3. 发布包含 WordPress 图片链接的文章
|
||
|
||
### 方式 2:发送 Word 文档
|
||
在飞书中发送 `.docx` 文件,机器人会自动:
|
||
1. 下载 Word 文档
|
||
2. 解析文档内容
|
||
3. 提取并上传图片
|
||
4. 发布文章
|
||
|
||
### 方式 3:发送指令发布
|
||
```
|
||
#标题 文章标题
|
||
#分类 ai
|
||
文章正文内容
|
||
[图片]
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 技术细节
|
||
|
||
### 飞书 API 认证
|
||
- 使用 `tenant_access_token` 进行认证
|
||
- 自动刷新令牌(有效期 2 小时)
|
||
- 令牌过期前 5 分钟自动刷新
|
||
|
||
### 图片处理流程
|
||
```python
|
||
# 1. 获取访问令牌
|
||
token = feishu_client.get_access_token()
|
||
|
||
# 2. 下载图片
|
||
image_path = feishu_client.download_image(image_key)
|
||
|
||
# 3. 上传到 WordPress
|
||
result = image_handler.upload_image(image_path)
|
||
|
||
# 4. 获取 WordPress 图片 URL
|
||
wp_image_url = result.get('url')
|
||
```
|
||
|
||
### 错误处理
|
||
- 飞书 API 调用失败:记录错误日志,返回失败消息
|
||
- 图片下载失败:跳过该图片,继续处理其他内容
|
||
- WordPress 上传失败:记录错误,尝试重新上传
|
||
|
||
---
|
||
|
||
## 📊 测试验证
|
||
|
||
### 测试步骤
|
||
1. 在飞书中发送一条包含图片的消息
|
||
2. 检查日志确认图片下载成功
|
||
3. 检查 WordPress 媒体库确认图片上传成功
|
||
4. 访问发布的文章,确认图片正常显示
|
||
|
||
### 日志位置
|
||
- 飞书机器人日志:`/www/wwwroot/wp-publish/logs/feishu_bot.log`
|
||
- 飞书 API 日志:`/www/wwwroot/wp-publish/logs/feishu_api.log`
|
||
- WordPress 发布日志:`/www/wwwroot/wp-publish/logs/publish.log`
|
||
|
||
---
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
1. **飞书权限**:确保飞书应用已开通 `im:message:receive` 权限
|
||
2. **文件大小**:飞书图片和文件下载有大小限制(通常 20MB)
|
||
3. **网络环境**:服务器需要能够访问飞书 API(`open.feishu.cn`)
|
||
4. **SSL 证书**:WordPress 使用自签名证书,已配置跳过验证
|
||
|
||
---
|
||
|
||
## 🔄 服务管理
|
||
|
||
```bash
|
||
# 查看服务状态
|
||
systemctl status wp-publish
|
||
|
||
# 重启服务
|
||
systemctl restart wp-publish
|
||
|
||
# 查看日志
|
||
tail -f /www/wwwroot/wp-publish/logs/feishu_bot.log
|
||
```
|
||
|
||
---
|
||
|
||
## 📞 技术支持
|
||
|
||
如有问题,请查看日志文件获取详细错误信息,或联系技术支持。
|