name: facebook-publish description: Publish posts, videos, and reels to Facebook via Meta Graph API v23.0. Supports feed posts, video posts, photo posts, reels, and stories. Requires Meta OAuth2 page access token. metadata: openclaw: emoji: 📘 requires: bins: - python3
Facebook 发布(facebook-publish)
通过 Meta Graph API v23.0 发布内容到 Facebook,支持帖子、视频、Reels 和 Stories。使用 Meta OAuth2 Page Access Token 认证。
前置条件
- Meta Developer Portal 创建应用,获取 App ID / App Secret
- 申请
pages_manage_posts和pages_read_engagement权限 - 获取长效 Page Access Token
配置
保存到 ~/.openclaw/credentials/facebook_config.json:
{
"app_id": "your_app_id",
"app_secret": "your_app_secret",
"page_access_token": "your_long_lived_page_token",
"page_id": "your_page_id"
}
使用方式
文字帖子:
python3 ./skills/facebook-publish/scripts/publish_facebook.py \
--message "帖子内容" \
--mode feed
视频/Reel:
python3 ./skills/facebook-publish/scripts/publish_facebook.py \
--message "描述" \
--video video.mp4 \
--mode reel
图片帖子:
python3 ./skills/facebook-publish/scripts/publish_facebook.py \
--message "描述" \
--images img1.jpg img2.jpg \
--mode feed
参数说明
| 参数 | 必填 | 说明 |
|---|---|---|
--message |
是 | 帖子内容 |
--mode |
是 | feed/video/reel/story |
--video |
视频模式必填 | 视频文件路径 |
--images |
图片模式必填 | 图片路径列表 |
--title |
否 | 视频标题(video 模式) |
Agent 工作流
- 检查 Facebook 配置是否存在
- 准备内容 + 媒体文件
- 运行
publish_facebook.py脚本 - 检查 stdout JSON 输出:
{"ok": true, "post_id": "xxx", "url": "https://facebook.com/xxx"}→ 成功{"ok": false, "error": "AUTH_REQUIRED"}→ 更新 Page Token{"ok": false, "error": "..."}→ 其他错误
错误处理
| 错误 | 原因 | 处理 |
|---|---|---|
| AUTH_REQUIRED | Token 失效 | 更新 Page Access Token |
| UPLOAD_FAILED | 上传失败 | 检查文件格式,重试 |
| MEDIA_PROCESSING | 视频处理中 | 轮询状态等待完成 |
| RATE_LIMIT | 频率限制 | 等待后重试 |
发布记录(强制)
发布成功后,必须立即调用 published-track 技能记录发布信息:
./skills/published-track/scripts/record.sh \
--platform facebook \
--title "标题" \
--content-type post \
--source-folder "<原始文件夹路径>" \
--publish-url "<发布URL>" \
--publish-date "$(date +%Y-%m-%d)"
--source-folder 为原始内容所在的相对路径(如 output_articles/xxx 或 output_videos/xxx)。
--publish-url 为发布后获得的 URL,若发布失败则留空并在 --notes 中注明原因。
执行 ./skills/published-track/scripts/init-db.sh(幂等,重复执行无副作用)。