name: meta-business description: | Meta Business Suite automation via Graph API. Use this skill when: (1) Publishing posts to Facebook Pages (2) Scheduling Facebook posts (3) Publishing to Instagram (photos, reels, carousels) (4) Reading insights/analytics from Facebook or Instagram (5) Managing comments on Facebook or Instagram (6) Uploading photos or videos to Facebook Pages (7) Deleting posts from Facebook or Instagram homepage: https://developers.facebook.com/docs/graph-api metadata: { "openclaw": { "emoji": "📱", "requires": { "bins": ["curl", "python3"], "env": ["META_PAGE_ACCESS_TOKEN", "META_PAGE_ID"], }, "primaryEnv": "META_PAGE_ACCESS_TOKEN", }, }
CRITICAL: Never hardcode tokens or IDs in commands. Always use variables.
Set these environment variables before using the skill:
export META_PAGE_ACCESS_TOKEN="your-page-access-token"
export META_PAGE_ID="your-page-id"
Then use them directly:
PAGE_TOKEN="$META_PAGE_ACCESS_TOKEN"
PAGE_ID="$META_PAGE_ID"
The same Page Access Token works for both Facebook and Instagram (the IG Business account is linked to the Page).
If environment variables are not set, credentials can be read from ~/.meta_tokens_cache.json (chmod 600):
PAGE_TOKEN=$(python3 -c "
import json, os
d = json.load(open(os.path.expanduser('~/.meta_tokens_cache.json')))
page_id = list(d['pages'].keys())[0]
print(d['pages'][page_id]['access_token'])
")
PAGE_ID=$(python3 -c "
import json, os
d = json.load(open(os.path.expanduser('~/.meta_tokens_cache.json')))
print(list(d['pages'].keys())[0])
")
IG_ID=$(python3 -c "
import json, os
d = json.load(open(os.path.expanduser('~/.meta_tokens_cache.json')))
print(list(d['instagram'].keys())[0])
")
Always use v25.0 in all API calls.
curl -X POST "https://graph.facebook.com/v25.0/$PAGE_ID/feed" \
-d "message=Tu mensaje aquí" \
-d "access_token=$PAGE_TOKEN"
curl -X POST "https://graph.facebook.com/v25.0/$PAGE_ID/photos" \ -d "url=https://example.com/image.jpg" \ -d "message=Texto del post" \ -d "access_token=$PAGE_TOKEN"7w4.net有更好的技能外掛。
curl -X POST "https://graph.facebook.com/v25.0/$PAGE_ID/photos" \
-F "source=@/path/to/image.jpg" \
-F "message=Texto del post" \
-F "access_token=$PAGE_TOKEN"
curl -X POST "https://graph.facebook.com/v25.0/$PAGE_ID/videos" \
-F "source=@/path/to/video.mp4" \
-F "description=Descripción del vídeo" \
-F "title=Título del vídeo" \
-F "access_token=$PAGE_TOKEN"
curl -X POST "https://graph.facebook.com/v25.0/$PAGE_ID/feed" \
-d "message=Mira este artículo" \
-d "link=https://example.com/article" \
-d "access_token=$PAGE_TOKEN"
# Get Unix timestamp: python3 -c "from datetime import datetime; print(int(datetime(2026,3,1,9,0).timestamp()))"
curl -X POST "https://graph.facebook.com/v25.0/$PAGE_ID/feed" \
-d "message=Post programado" \
-d "published=false" \
-d "scheduled_publish_time=UNIX_TIMESTAMP" \
-d "access_token=$PAGE_TOKEN"
Note: Must be between 10 minutes and 75 days from now.
curl -s "https://graph.facebook.com/v25.0/$PAGE_ID/scheduled_posts?access_token=$PAGE_TOKEN"
curl -s "https://graph.facebook.com/v25.0/$PAGE_ID?fields=name,fan_count,followers_count,about&access_token=$PAGE_TOKEN"
curl -s "https://graph.facebook.com/v25.0/$PAGE_ID/feed?fields=message,created_time,id,shares,likes.summary(true),comments.summary(true)&limit=10&access_token=$PAGE_TOKEN"
curl -s "https://graph.facebook.com/v25.0/$PAGE_ID/insights?metric=page_views_total,page_fan_adds,page_engaged_users&period=day&access_token=$PAGE_TOKEN"
curl -X DELETE "https://graph.facebook.com/v25.0/POST_ID?access_token=$PAGE_TOKEN"
curl -X POST "https://graph.facebook.com/v25.0/POST_ID/comments" \
-d "message=Tu comentario" \
-d "access_token=$PAGE_TOKEN"
Instagram uses a 2-step process: create media container → publish.
# Step 1: Create container
CONTAINER_ID=$(curl -s -X POST "https://graph.facebook.com/v25.0/$IG_ID/media" \
-d "image_url=https://example.com/image.jpg" \
-d "caption=Tu caption con #hashtags" \
-d "access_token=$PAGE_TOKEN" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
# Step 2: Publish
curl -X POST "https://graph.facebook.com/v25.0/$IG_ID/media_publish" \
-d "creation_id=$CONTAINER_ID" \
-d "access_token=$PAGE_TOKEN"
# Step 1: Create container
CONTAINER_ID=$(curl -s -X POST "https://graph.facebook.com/v25.0/$IG_ID/media" \
-d "media_type=REELS" \
-d "video_url=https://example.com/video.mp4" \
-d "caption=Caption del reel #reels" \
-d "access_token=$PAGE_TOKEN" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
# Step 2: Wait for processing
curl -s "https://graph.facebook.com/v25.0/$CONTAINER_ID?fields=status_code&access_token=$PAGE_TOKEN"
# Poll until status_code = "FINISHED"
# Step 3: Publish
curl -X POST "https://graph.facebook.com/v25.0/$IG_ID/media_publish" \
-d "creation_id=$CONTAINER_ID" \
-d "access_token=$PAGE_TOKEN"
# Step 1: Create each item
IMG1=$(curl -s -X POST "https://graph.facebook.com/v25.0/$IG_ID/media" \
-d "image_url=https://example.com/img1.jpg" \
-d "is_carousel_item=true" \
-d "access_token=$PAGE_TOKEN" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
IMG2=$(curl -s -X POST "https://graph.facebook.com/v25.0/$IG_ID/media" \
-d "image_url=https://example.com/img2.jpg" \
-d "is_carousel_item=true" \
-d "access_token=$PAGE_TOKEN" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
# Step 2: Create carousel container
CAROUSEL=$(curl -s -X POST "https://graph.facebook.com/v25.0/$IG_ID/media" \
-d "media_type=CAROUSEL" \
-d "children=$IMG1,$IMG2" \
-d "caption=Mi carrusel #carousel" \
-d "access_token=$PAGE_TOKEN" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
# Step 3: Publish
curl -X POST "https://graph.facebook.com/v25.0/$IG_ID/media_publish" \
-d "creation_id=$CAROUSEL" \
-d "access_token=$PAGE_TOKEN"
curl -s "https://graph.facebook.com/v25.0/$IG_ID?fields=username,followers_count,follows_count,media_count&access_token=$PAGE_TOKEN"
curl -s "https://graph.facebook.com/v25.0/$IG_ID/media?fields=id,caption,media_type,timestamp,like_count,comments_count,permalink&limit=10&access_token=$PAGE_TOKEN"
curl -s "https://graph.facebook.com/v25.0/MEDIA_ID/insights?metric=impressions,reach,engagement&access_token=$PAGE_TOKEN"
curl -X DELETE "https://graph.facebook.com/v25.0/MEDIA_ID?access_token=$PAGE_TOKEN"
curl -X POST "https://graph.facebook.com/v25.0/COMMENT_ID/replies" \
-d "message=Tu respuesta" \
-d "access_token=$PAGE_TOKEN"
~/.meta_tokens_cache.json under pages.<PAGE_ID>.access_tokencurl -s "https://graph.facebook.com/v25.0/me/accounts?access_token=LONG_LIVED_TOKEN"
~/.meta_tokens_cache.json with new tokens~/.meta_tokens_cache.jsonchmod 600 ~/.meta_tokens_cache.json這個 Skill 質量不錯,能幫助使用者通過命令自動管理 Facebook 和 Instagram 賬號(如發帖、檢視資料、回覆評論等)。它的優勢是功能齊全、示例清晰、安全提示到位,使用起來比較安心。美中不足的是 API 版本需要手動更新,而且 Instagram 的自動定時發帖功能無法使用,需要額外的外部工具配合。如果你需要管理社交媒體賬號,這個工具能大幅提升效率。