首页
/ AutoGPT Ayrshare Post To Snapchat 块:向 Snapchat 发布视频的配置指南与源码解析

AutoGPT Ayrshare Post To Snapchat 块:向 Snapchat 发布视频的配置指南与源码解析

2026-09-06 18:18:46作者:卓艾滢Kingsley

导读

本文聚焦 AutoGPT 平台中的 Post To Snapchat(Ayrshare 集成)块,讲解如何通过 Ayrshare 社交管理 API 将视频内容发布到 Snapchat 的三种目的地——Stories(24 小时限时内容)、Saved Stories(持久化 Stories)与 Spotlight(公开推荐流)。读完本文,你将掌握该块的每个输入输出参数、背后 Ayrshare API 调用链与平台限制校验逻辑,并能直接在可视化编排流程中搭建"定时短视频发布/限时营销"等 Agent。

该块的官方文档位于 post_to_snapchat.md,核心实现位于 post_to_snapchat.py

块概览:它是什么

Post To Snapchat 是 AutoGPT 平台 Ayrshare 社交发布块家族的一员(同族还包括 Facebook、X、Instagram、YouTube、TikTok、Threads、Reddit、Telegram、Pinterest、Google My Business、LinkedIn、Bluesky 等,见 init.py 中的 AYRSHARE_BLOCK_IDS 清单)。在 AutoGPT 的块体系里,它注册为 社交(SOCIAL)分类BlockType.AYRSHARE 的块,块 ID 为 a9d7f854-2c83-4e96-b3a1-7f2e9c5d4b8e(源码 post_to_snapchat.py)。

它的核心定位是 纯视频发布通道

  • Snapchat 只支持视频内容,图片无法发布;
  • 支持三种投放形态:Stories(24 小时后自动消失的限时内容)、Saved Stories(长期保留的 Stories)、Spotlight(面向非粉丝的公开发现流);
  • 通过 Ayrshare 统一鉴权与上传,可选自定义封面缩略图;
  • 支持定时发布(未来时间点)与审核工作流(内容在公开发布前先人工确认)。

工作原理:从块输入到 Ayrshare API

整体链路可以用一句话概括:块拿到 Ayrshare 用户级 profile key → 组装 Snapchat 专属参数 → 调用统一 POST 端点 → 返回平台 ID

1. 凭证解析

Ayrshare 块的凭证采用的是"托管 profile key"机制,而不是简单的环境变量:

  • 每个用户拥有各自的 Ayrshare Profile Key(而非组织级管理密钥 AYRSHARE_API_KEY);
  • 该密钥由 AyrshareManagedProvider 按用户自动开通,并写入标准凭证列表(is_managed=True);
  • 在 Builder 中通过 Ayrshare 的 SSO 弹窗把各社交账号与该 profile 关联。

对应实现见 _config.py 的说明与 _util.py 中的 credentials 字段描述。

块运行时会用该凭证的 profile key 通过 Profile-Key 请求头发往 Ayrshare。组织级 AYRSHARE_API_KEY 则在 settings.py 中配置,由 AyrshareClient 读取,用于 Bearer 鉴权。

2. 客户端初始化与缺失配置兜底

run() 的第一步是 create_ayrshare_client()(见 post_to_snapchat.py):

  • _util.pycreate_ayrshare_client 捕获 MissingConfigError
  • AYRSHARE_API_KEY 未配置,直接产出错误输出:"Ayrshare integration is not configured. Please set up the AYRSHARE_API_KEY." 并终止执行。

3. Snapchat 专属参数

Snapchat 专属选项封装在 snapchat_options 字典里,随 create_postsnapchat_options 参数上传,底层对应 Ayrshare POST 接口的 snapchatOptions 字段(见 post_to_snapchat.pyayrshare.py 的参数透传)。

输入参数详解

下表完整收录块的输入(来自官方文档与 post_to_snapchat.py 的 SchemaField 定义,含默认值与是否高级项):

Input 说明 类型 默认值 高级项 必填
credentials Ayrshare 托管 profile 凭证(自动开通,用户无需创建,通过 Builder SSO 关联账号) CredentialsMetaInput
post 帖子文案(纯视频内容可留空) str ""
media_urls 视频 URL,Snapchat 仅支持视频内容,且每帖最多 1 个 List[str] [] 运行时强制校验
is_video 是否为视频(Snapchat 恒为 True,用于计费档位) bool True
schedule_date 定时发布 UTC 时间(YYYY-MM-DDThh:mm:ssZ str (date-time) None
disable_comments 是否关闭评论 bool False
shorten_links 是否缩短链接 bool False
unsplash Unsplash 配图配置 str None
requires_approval 是否启用审核工作流(发布前人工确认) bool False
random_post 是否生成随机文案 bool False
random_media_url 是否生成随机媒体 bool False
notes 帖子的附加备注 str None
story_type Snapchat 内容类型:story / saved_story / spotlight str story
video_thumbnail 视频封面缩略图 URL(不填则由平台自动生成) str ""

其中与通用 Ayrshare 输入相比(见 _util.pyBaseAyrshareInput),本块做了三处 Snapchat 特化:

  • post 文案可选:视频内容可以不带正文;
  • media_urls 必须且唯一is_video 恒为真;
  • 新增 story_typevideo_thumbnail 两个 Snapchat 专属字段。

输入校验逻辑

run() 在真正请求 Ayrshare 前会执行三层校验(post_to_snapchat.py),任一不满足都会以 error 输出提前返回:

  1. 必须有媒体media_urls 为空 → "Snapchat requires at least one video URL"
  2. 只能一条视频media_urls 长度大于 1 → "Snapchat supports only one video per post"
  3. story_type 合法值:必须属于 ["story", "saved_story", "spotlight"],否则报错并列出合法取值。

schedule_date 与 storyType 的处理细节

  • schedule_date 底层是 Optional[datetime],代码调用 .isoformat() 转成 ISO 字符串后再上传(见 post_to_snapchat.py),因此你在界面上按 YYYY-MM-DDThh:mm:ssZ(UTC)语义填写即可;
  • story_type 取默认 story 时,代码不传 storyType,即使用 Ayrshare 的默认 Stories;只有显式选择 saved_storyspotlight 时才会把对应值写入 snapchatOptions["storyType"]post_to_snapchat.py)。

输出参数详解

Output 说明 类型
error 操作失败时的错误信息 str
post_result 帖子创建的整体结果 PostResponse
post 单个平台的发布结果(每个 postId 各产出一条) PostIds

从源码看,输出类型来自 ayrshare.py 的 Pydantic 模型:

  • PostResponsestatusidrefIdprofileTitlepostpostIds(可空列表)、scheduleDateerrors(可空列表);
  • PostIdsstatusidpostUrlplatform

run() 先产出完整的 post_result,再对响应中的每个 postIds 元素逐个产出 postpost_to_snapchat.py)。这意味着下游可以连 post_result 拿整体状态,也可以连 post 分别拿每个平台的 postUrl 做后续追踪。

错误信息提取

Ayrshare 的错误返回有多种形态,客户端统一用 _extract_error_message()ayrshare.py)抽取可读信息,覆盖三种典型结构:

  • 扁平结构:{"status":"error","message":"..."}
  • 请求级拒绝:{"posts":[{"message":"Missing post parameter",...}]}
  • 平台级失败:{"posts":[{"errors":[{"message":"Twitter is not linked"}]}]}

计费:为什么视频档是 5 积分

Ayrshare 属于订阅代理服务,块采用按次积分计费避免单个重度用户吃穿固定订阅成本。计费实现见 _cost.py

AYRSHARE_POST_COSTS = (
    BlockCost(cost_amount=5, cost_type=BlockCostType.RUN, cost_filter={"is_video": True}),
    BlockCost(cost_amount=2, cost_type=BlockCostType.RUN, cost_filter={"is_video": False}),
)

关键点是 cost_filterrun() 执行之前、依据输入求值期的 is_video 命中计费档位("first match wins",因此视频档排在前面):

  • is_video=True5 积分/次(视频档);
  • is_video=False2 积分/次(图片档)。

由于 Snapchat 是纯视频平台,本块在 BaseAyrshareInput 基础上把 is_video 的默认值重写为 True(见 post_to_snapchat.py),确保默认就按视频档计费。这一约束也被单测固化:_cost 相关测试 明确将 PostToSnapchatBlockPostToYouTubeBlock 一起列入 AYRSHARE_VIDEO_ONLY_BLOCKS

实际使用场景与搭建建议

官方文档给出三类典型玩法:

  1. Ephemeral Marketing(限时营销):分享时效性促销或幕后花絮,借助 24 小时 Stories 制造紧迫感;
  2. Public Discovery(公开发现):把有吸引力的视频投放到 Spotlight,触达粉丝之外的更多新受众;
  3. Scheduled Story Series(定时 Story 系列):围绕产品发布或活动,预先编排一段连续的视频 Stories 节奏。

结合块能力可以这样组织一个最小流程:

  1. 前置块产出(或抓取)一段视频的公网可访问 URL
  2. 填入 media_urls,设置 story_type=story(或 saved_story/spotlight);
  3. 若要定时发布,在 schedule_date 填 UTC 时间;
  4. 需要内容审核则打开 requires_approval
  5. 发布后从 post 输出取 postUrl 用于日志/通知等下游节点。

几点实操提示:

  • 图片 URL 无效:Snapchat 拒绝图片,media_urls 必须是视频直链且只能有 1 个;
  • 文案可为空:视频优先内容可不写 post
  • 封面可选:想自定义封面时填 video_thumbnail,否则由 Ayrshare/Snapchat 自动生成;
  • 审核流requires_approval=True 时内容不会立即公开,需先在 Ayrshare 侧完成审批后再发布。

扩展阅读

登录后查看全文
热门项目推荐
相关项目推荐