mcpField
I
instagram

instagram

github.com/acedatacloud营销与增长1748 次安装1 天前更新
代码仓库

关于 instagram

instagram 是通过 Instagram Graph API 发布图片、视频、Reels 和轮播内容的技能。它涵盖账号解析、媒体处理、发布,以及记录已确认的内容链接。

主要功能

  1. 01解析关联的专业账号
  2. 02发布图片和视频
  3. 03创建 Reels 和轮播内容
  4. 04检查媒体处理状态
  5. 05记录已发布内容链接

适用场景

  1. 01发布带说明文字的图片
  2. 02处理完成后发布 Reels
  3. 03发布多项内容组成的轮播

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/acedatacloud/skills --skill instagram

安装后在 Claude Code 中输入/instagram确认已加载。

详细介绍

使用 curl + jq 调用 Instagram Graph API(graph.facebook.com)。连接器会注入 $INSTAGRAM_ACCESS_TOKEN(包含 instagram_content_publish + pages_read_engagement 权限的令牌;Facebook Page 令牌或 Instagram-Login 用户令牌)以及可选的 $INSTAGRAM_IG_USER_ID。切勿回显这些值。

Instagram 只能向关联 Facebook Page 的专业版(Business 或 Creator)账户发布图片/视频/Reels。不能发布纯文本帖子。

解析 Instagram 账户 ID

如果已设置 $INSTAGRAM_IG_USER_ID,请使用它。否则,从令牌中推导——先尝试 Page 令牌路径(/me 就是 Page),再回退到用户令牌路径(/me/accounts → 关联的 Page → IG 账户),这样连接器接受的两种令牌都能正确解析:

if [ -n "$INSTAGRAM_IG_USER_ID" ]; then
  IGID="$INSTAGRAM_IG_USER_ID"
else
  # Page access token: /me IS the Page, read its linked IG account directly
  IGID=$(curl -sS "https://graph.facebook.com/v21.0/me?fields=instagram_business_account&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r '.instagram_business_account.id // empty')
  if [ -z "$IGID" ]; then
    # User access token: list the managed Page, then its linked IG account
    PAGE=$(curl -sS "https://graph.facebook.com/v21.0/me/accounts?access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r '.data[0].id // empty')
    IGID=$(curl -sS "https://graph.facebook.com/v21.0/$PAGE?fields=instagram_business_account&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r '.instagram_business_account.id // empty')
  fi
fi
echo "ig_user_id=$IGID"

错误以 JSON 格式返回,包含 error.message / error.code——请原样显示。401 / OAuthException → 令牌已过期或缺少权限;IGID 为 null → 令牌未关联专业版 IG 账户/Page(参见“注意事项”)。如有需要,请重新连接。

发布单张图片(两步:创建容器 → 发布)

请先与用户确认说明文字和图片。 image_url 必须是公开的 JPEG URL(Instagram 会在服务器端使用 cURL 获取):

CID=$(curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media" \
  -d "image_url=https://cdn.acedata.cloud/xxxx.jpg" \
  --data-urlencode "caption=One endpoint → posters, cards, mockups. #AI #API" \
  -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .id)
echo "container=$CID"

curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media_publish" \
  -d "creation_id=$CID" -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq .
# → {"id":"<IG_MEDIA_ID>"}

获取永久链接并提供给用户:

curl -sS "https://graph.facebook.com/v21.0/<IG_MEDIA_ID>?fields=permalink&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .permalink

Reels/视频

使用 media_type=REELS + 公开的 video_url 创建,然后在发布前轮询容器状态,直到状态为 FINISHED(视频处理需要时间):

CID=$(curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media" \
  -d "media_type=REELS" -d "video_url=https://cdn.acedata.cloud/xxxx.mp4" \
  --data-urlencode "caption=..." -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .id)

# poll until the video finishes processing (up to ~5 min) BEFORE publishing —
# publishing an IN_PROGRESS container is rejected:
for i in $(seq 1 60); do
  ST=$(curl -sS "https://graph.facebook.com/v21.0/$CID?fields=status_code&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .status_code)
  echo "status=$ST"; [ "$ST" = "FINISHED" ] && break
  [ "$ST" = "ERROR" ] || [ "$ST" = "EXPIRED" ] && { echo "container failed: $ST"; break; }
  sleep 5
done

curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media_publish" \
  -d "creation_id=$CID" -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq .

轮播(2–10 个项目)

将每个子项目设为 is_carousel_item=true 后,创建一个 media_type=CAROUSEL 容器,设置 children=<ID1>,<ID2>,... + caption,然后发布轮播 ID。

注意事项

  • 不能发布纯文本帖子——Instagram 要求图片或视频。图片请使用公开的 JPEG(PNG/其他格式会被拒绝;扩展 JPEG(如 MPO/JPS)也不行)。
  • 需要专业版账户——必须是关联 Facebook Page 的 Business/Creator IG 账户。如果 instagram_business_account 为 null,说明该账户不是专业版账户或尚未关联;用户必须在 IG/Page 设置中解决此问题。
  • 媒体必须是 Instagram 可访问服务器上的公开 URL;本地文件无法使用。请先托管到 cdn.acedata.cloud。
  • **速率限制:**每 24 小时最多发布 100 条 API 帖子(轮播计为 1 条)。通过 GET /$IGID/content_publishing_limit 检查。
  • **Page 发布授权(PPA):**部分 Page 必须先完成 PPA,API 发布才能生效——如果 API 错误提到 PPA,请原样显示。
  • API 版本:如果遇到版本/弃用错误,请确保 vXX.0 路径为最新版本。

记录输出

成功发布并获取有效永久链接后,请调用内置的 publish_artifact 工具一次,让用户能在 My Outputs 中查看:

publish_artifact(kind="image", channel="instagram", title="<title>", url="<the REAL permalink>", status="delivered")

使用实际返回的 URL——切勿伪造。每个已发布项目只调用一次,且仅在确认交付后调用;如果发布失败,请跳过(或使用 status="failed")。 参见 _shared/artifacts.md。

评论

支持 Markdown