# 飞书机器人发布问题修复总结 ## 📋 问题列表 | 序号 | 问题描述 | 严重程度 | 状态 | |------|---------|---------|------| | 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 ``` --- ## 📞 技术支持 如有问题,请查看日志文件获取详细错误信息,或联系技术支持。