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