mcpField
C
canva-creator

canva-creator

github.com/anthropics营销与增长33.6k2.0k 次安装1 天前更新
代码仓库

关于 canva-creator

canva-creator 是营销活动工作流技能,按审批流程将内容简报转为发布日历、素材清单、Canva 社媒设计、文案和 HubSpot 待发布内容。它将邮件纯文本内容与 Canva 设计分开处理。

主要功能

  1. 01根据简报制定发布日历
  2. 02盘点社媒设计所需素材
  3. 03生成并审核 Canva 设计候选稿
  4. 04撰写纯文本邮件内容
  5. 05将获批社媒帖子提交至 HubSpot

适用场景

  1. 01规划覆盖社媒与邮件的营销活动
  2. 02生成设计前检查图片占位
  3. 03比较每篇帖子的 Canva 设计候选稿
  4. 04准备社媒帖子以提交至 HubSpot

安装

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

$npx skills add https://github.com/anthropics/knowledge-work-plugins --skill canva-creator

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

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

reference/
canva-api.md
gotchas.md
hubspot-staging.md
reference/examples/
boutique-brief-campaign.md

详细介绍

Canva Creator

范围

本技能分五个顺序阶段处理一次营销活动,每个阶段都需经所有者批准后才能进入下一阶段:

brief → calendar → asset inventory → Canva designs → copy → HubSpot staging
路径渠道本技能产出
Canva(社交)Instagram、Facebook、X/Twitter、LinkedInCanva 设计 + 文案 + 定时 HubSpot 帖子
纯文本邮件(电子通讯、营销、自动化培育)主题 + 预览文本 + 正文,直接在对话中提供给所有者自行发送

任何情况下都不会为邮件行使用 Canva —— 不使用模板、不使用自动填充、不做设计副本、不上传素材、不导出。邮件图形不在本技能范围内,因为当图片位数超过可用照片时,邮件模板自动填充会生成占位图形,而且变体缩略图在聊天预览中无法正常显示。如果所有者要求制作 Canva 邮件设计,请参阅 reference/gotchas.md 中的引导话术。


前置检查

进入阶段 1 之前,请确认以下事项:

  1. Brief。 用户已引用或粘贴了已批准的 brief。如果没有,请回复:"在搭建营销活动之前,我需要内容 brief。您是否已有来自 content-strategy 技能的 brief,或者现在想编写一份?"

  2. Canva 套餐。 Pro/Teams 需要从用户的素材库中手动选择模板(没有自动填充 API)。Enterprise 可以从品牌模板中自动填充。

  3. HubSpot 套餐。 社交内容暂存需要 Marketing Hub Professional。若为 Starter 或 Free,则跳过阶段 5,改为导出 CSV(参见 reference/hubspot-staging.md)。

  4. 品牌素材。 如果已连接店铺(Shopify 或 Square,属于同级工具,参见 ../../shared/connector-neutrality.md),请先读取商品列表:brief 中提到的每个商品的标题、图片 URL 和价格。仅做读取 —— 在阶段 2 第 5 步之前不会向 Canva 上传任何内容,且届时只上传已批准日程中各槽位所需的图片。该列表即为初始照片清单;只询问店铺中没有图片的商品。读取规则(包括读取字段和价格声明规则)见 ../social-content-engine/reference/shopify-assets.md(该文档针对 Shopify 编写;Square 的商品目录图片按工具清单中的相同步骤操作)。如果没有连接店铺,请确认本地商品照片的路径,或确认品牌套件已在 Canva 中生效。

  5. 生成额度。 估算本次营销活动的 Canva 用量,并在阶段 1 开始前告知用户。默认每个需要 Canva 的行生成 3 个候选方案;每个设计约消耗 5 次 API 调用(自动填充 + 导出 + 轮询)。

    Generation budget for this campaign:
      Canva (social) rows: 8
      Candidates per row:  3   (default — say "single candidate" to use 1)
      Total designs:       24
      API calls (approx):  ~120  (autofill + export + polling)
    
    Canva limit: 100 requests/minute. This will take ~2-3 minutes of
    generation, well within your tier limits. Proceed?
    

    如果预计设计总数超过 30 个,应事先建议使用单候选模式——大型营销活动的额度很快就会耗尽。在阶段 1 开始前,所有者可以将每行的候选数改为 1、2 或 3。所选值在整个会话期间保持不变。


工作流程

阶段 1 — 发布日历

从 brief 中提取内容主题、渠道、发布节奏以及硬性日期(如新品发布、促销活动、节假日)。

构建一个带有 Path 列的日历表格,将每一行分配到 Canva 或纯文本起草之一:

DateChannelPathThemeAsset typeCaption/Subject angle
Jun 2Instagram feedCanva (social)Linen launchSquare post"finally, a dress…"
Jun 5EmailText-onlyLinen launchEmail body"Linen that actually breathes"

在展示之前,将每一行邮件渠道标记为 Text-only。除非 brief 另有说明,否则上限为 30 天。预先标出排期冲突(同一产品在同一天有两条帖子)。

检查点 1。 展示日历,并询问:"这是否符合计划?是否有需要调整的日期、需要新增的渠道或需要更换的主题?"反复修改直到获得批准,然后大声重述分配情况:"N 行通过 Canva 处理,M 行通过纯文本起草处理",再进入下一步。在这里发现分类错误没有成本;等到生成设计之后再发现,代价就大了。


阶段 2 — 素材清单(仅限 Canva 行)

邮件行完全跳过此阶段。对于每一行 Canva (social),构建一份清单,列出模板所需的内容以及现有可用的素材。

  1. 逐一列出每个图片槽位的名称。 方形 Instagram 帖子通常有 1-2 个图片槽位;轮播图和产品网格可能有 5 个以上。请逐个列出(Header_Image、Product1_Image、Product2_Image……),切勿笼统地写成"产品图片"。

    • Enterprise:从品牌模板(GET /v1/brand-templates/{id})的 dataset[].label 中读取字段名称。
    • Pro/Teams:统计模板中每个不同的图片矩形框。
  2. 盘点可用素材。 文本内容来自 brief(产品名称、优惠文案、标语、价格);产品图片 URL 在预检时从已连接的店铺读取(仅针对缺口表中需要的槽位,在第 5 步上传,届时再通过 asset.id 记录);已上传到 Canva 的产品照片(GET /v1/assets)或所有者磁盘上的照片;品牌套件的颜色和字体(仅 Enterprise)。文案中的价格必须取自店铺返回的值或 brief,绝不能凭记忆填写。

  3. 构建逐槽位缺口表。 每个设计的每个槽位一行,而不是每个设计一行。

    DateSlot nameSlot kindAvailable assetStatus
    Jun 2Hero_Imageimagebloom_summer.jpg → asset_id pendingupload
    Jun 2Headlinetext"Summer linen, finally"ready
    Jun 9Product1_Imageimage—MISSING
  4. 与所有者一起解决槽位与素材不匹配的问题。 如果模板的图片槽位多于 brief 提供的照片,请暂停并询问:

    The "Summer Carousel" template has 5 image slots. The brief gave me 1
    photo (bloom_summer.jpg). How should I fill the other 4?
    
      1. Reuse the same photo across all 5 slots
      2. You send me 4 more photos (file paths)
      3. Pick a simpler template with fewer slots
    

    在所有者做出选择之前,不要发起任何生成调用。槽位为空时生成,会得到充满 Canva 默认横向占位图的设计。

  5. 上传缺失的照片并获取已验证的素材 ID。 通过 POST /v1/asset-uploads 上传,然后轮询 GET /v1/asset-uploads/{job_id},直到 status == "success"。从响应中记录 asset.id——这是唯一能在 autofill 图片字段中生效的值。传入空字符串、URL、文件路径或过期 ID 会静默地渲染 Canva 的默认横向图形,而不是照片。

  6. 确认清单。 向所有者展示已完成的逐槽位表格,确保每个槽位都已解决,且每个图片的 asset.id 都已确认。这是调用 Canva API 之前的最后一个停靠点。


阶段 3 — 生成 Canva 设计

在调用任何 Canva API 之前,重新读取日历,并删除所有 Path 不是 Canva (social) 的行。邮件类行不经过此阶段。

逐行生成设计,每行生成 3 个候选方案(或使用预检时选定的数值)。每行遵循相同的流程:生成候选方案 → 验证 → 导出 → 视觉检查 → 重试失败项 → 呈现 → 等待所有者选择 → 处理下一行。每行之间暂停 30 秒。这样可将突发请求限制在每约 30 秒 3 次生成加 3 次导出,远低于 Canva 的每分钟 100 次请求速率限制。不要并行处理多行;逐行处理是防止所有者在活动期间触及配额上限的保障。

轮询频率。 每 3–5 秒轮询一次任务状态,不要更频繁。过于密集的轮询只会消耗配额,并不会加快完成速度。

预览 URL:只有一种类型可以安全嵌入。 自动填充响应返回的 design.canva.ai 缩略图会在几分钟内过期;将其作为 Markdown 图片嵌入会导致显示"Show Image"占位符并无法加载。永久导出 URL(export-download.canva.com)或 export-design MCP 工具生成的链接不会过期。原生 Cowork 轮播图会使用连接器的已认证会话直接渲染自动填充结果,请让其自行渲染,不要重复嵌入。

行循环
  1. 解析模板。(每个会话只做一次——除非日历混合了不同资产类型,否则各行使用同一模板。)

    • Enterprise:按资产类型过滤,调用 GET /v1/brand-templates。
    • Pro/Teams:调用 GET /v1/designs?ownership=any&query={template name},将排名前 3 的结果提供给所有者,并在生成前请其确认一个。
  2. 并行生成该行的候选设计。 同时发起该行的 3 个候选(或由预检确定的 N 个)。

    • Enterprise:对每个候选调用 POST /v1/autofills,传入模板 ID 和字段值。并发轮询所有任务。
    • Pro/Teams:调用 POST /v1/designs 创建副本。描述所有者在 Canva 中应用的文字和图片编辑内容,并收集返回的设计 ID。
  3. 验证任务状态。 对每个候选,确认 GET /autofills/{job_id} 返回的 status == "success",且存在 result.design.id。按设计逐个处理错误:

    • JOB_FAILED → 读取 job.error.message,修正字段值或资产 ID,重试一次。

    • RATE_LIMIT_EXCEEDED(本会话首次遇到)→ 等待 60 秒,对该候选重试一次。这用于处理短暂的流量峰值。

    • RATE_LIMIT_EXCEEDED(本会话第二次遇到)或任何 quota_exceeded / 每日上限错误 → 立即停止生成。不要重试。汇报进度并询问:

      Canva 正在对该活动进行限流。目前状态:
        ✓ 已生成:第 1-4 条帖子(12 个设计)
        ⏸ 剩余:第 5-8 条帖子(12 个设计尚未生成)
      
      我应该如何继续?
        1. 剩余每行改为 1 个候选(共 4 个设计)——立即完成
        2. 暂停活动——配额恢复后 60 分钟再继续
        3. 停止生成——基于现有成果进入文案阶段
      

      等待所有者选择。不要反复重试。

  4. 将每个成功的候选导出为永久 PNG。 并行发起该行的导出。

    • REST:调用 POST /v1/exports,设置 format.type: "png",轮询 GET /v1/exports/{job_id} 直至成功,获取 urls[0]。
    • Canva MCP:使用设计 ID 调用 export-design。

    这些永久 URL 将用于预览嵌入,并在之后附加到 HubSpot 帖子中。自动填充响应中的缩略图永远不会在后续流程中使用。

  5. 对每个导出结果进行视觉验证。 查看图片,凡出现以下任一情况即予以拒绝——它们都表明存在未填充的占位或资产错误:

    • 带有云朵和绿色山丘的通用风景图(Canva 默认占位图)
    • 本应放置照片处却是纯灰色矩形
    • Lorem ipsum 文本或模板默认文字
    • 主体与需求不符(产品错误、品牌错误)

    如果某个候选未通过验证:重新检查受影响槽位的清单,修正 asset.id,仅重新生成该候选,重新导出,并再次验证。

  6. 部分失败时按候选重试。 如果该行的 N 个候选中有 1 个在第 3 步或第 5 步失败,只重新生成该候选——不要重做整行,也不要呈现不完整的损坏轮播。如果第二次尝试仍然失败:

    The third candidate for the Jun 9 post keeps failing — Canva returned
    [error / rendered placeholder]. How should I proceed?
    
      1. Skip it — present the other 2 and move on
      2. Swap to a simpler template for just this candidate
      3. Try once more with a different photo
    
  7. 呈现该行的候选。 让原生 Cowork 轮播渲染自动填充工具结果。在其下方添加文字提示:

    Jun 9 candidates are ready — scroll through the carousel above.
    Which one should I use for the Jun 9 post?
    

    如果轮播无法渲染或某个位置损坏,则改为嵌入第 4 步中的永久导出 PNG URL。最后的备用方案是链接到设计的 Canva 编辑 URL(https://www.canva.com/d/{design_id})。切勿重新嵌入 design.canva.ai 的 URL。

  8. 暂停 30 秒,然后进入下一行。

检查点 2。 当所有者为日历中的每一行都选定一个设计时,即视为完成。如果他们需要重新生成,则只重新生成该候选。


阶段 4 — 文案撰写

为每个日历行撰写文案。社交媒体行需要配文;邮件行需要完整邮件。

社交媒体配文:Instagram、Facebook、X、LinkedIn:

  • 长度:适合各渠道(Instagram ≤ 2,200 个字符;Facebook 建议 ≤ 500;X ≤ 280)。
  • 结构:开头钩子 → 一项产品益处 → 行动号召 → 3-5 个话题标签(而非 30 个)。
  • 语气:匹配 brief 中的语气标记。如果 brief 写的是"随性友好",就不要写成企业式文案。
  • 不要废话。不要使用"令人兴奋的消息!"或"我们很高兴宣布"。直接以价值开头。

邮件内容:Claude 撰写整封邮件;不使用 Canva:

  • 主题:≤ 50 个字符,具体,不使用标题党。"春季项目预订中"比"别错过!"更好。
  • 预览文本:≤ 90 个字符,补充主题但不重复主题。
  • 正文:平实的段落文字,100-250 字。开头一句要能吸引读者读下去 → 1-2 段实质内容 → 单一明确的行动号召 → 结尾签名。
  • 语气:与社交媒体使用相同的语气标记。店主希望邮件听起来像他们本人,而不是模板化的通讯稿。
  • 不引用图片。不要写"见上图"。如果店主想要视觉元素,由他们在邮件工具中自行添加。
  • 每封邮件只有一个行动号召。选择最重要的操作,并将其放在最前面。

在每个社交媒体行下方直接展示配文。在每个邮件行下方直接展示完整邮件:

Subject: <subject line>
Preheader: <preheader text>

<body text>

如需完整示例,请参阅 reference/examples/boutique-brief-campaign.md。

检查点 3。"有需要重写的配文或邮件吗?请标明日期并说明需要修改的内容。"反复修改直至获得批准。


阶段 5 — HubSpot 暂存与邮件交接

在 HubSpot 中暂存社交媒体帖子。邮件内容不会暂存——会直接在内容中呈现,供店主复制到他们的邮件工具中。API 字段参考请见 reference/hubspot-staging.md。

  1. 创建营销活动。 使用日历中的活动名称和开始/结束日期调用 POST /marketing/v3/campaigns。

  2. 暂存每条社交媒体帖子。 针对每个 Canva (social) 行向 HubSpot Social API 发送 POST:

    • channel:将日历中的渠道映射为 HubSpot 账号 ID
    • scheduledAt:ISO 8601 格式的日期时间——调用前确认其为未来时间
    • content.body:已批准的配文
    • attachments:阶段 3 中生成的永久 Canva 导出 PNG 链接
    • status:SCHEDULED(绝不使用 PUBLISHED)
  3. 确认队列。 调用 GET /marketing/v3/social/posts?status=SCHEDULED,展示列表,并提供指向 HubSpot 营销活动视图的直接链接。

  4. 呈现待交接的邮件内容。 对每个邮件行,按发送日期分组,直接展示已批准的主题、预览文本和正文。店主将这些内容复制到他们的邮件工具中(HubSpot Marketing Email、Mailchimp、Gmail 或 M365)。

最终检查点。

Your social posts are scheduled in HubSpot: [link]
They'll go out as scheduled — you can cancel or edit any post in HubSpot.

Email content is drafted below — copy each into your email tool when
you're ready to send:

  Jun 5 — "Spring projects are booking up"
  Jul 15 — "Summer maintenance windows are filling"

Anything to change before we're done?

在该摘要之外(而非替代它),请按照内部样式规范(../../shared/artifact-style.md)将营销活动渲染为 HTML 成果物:发布日历以表格呈现,每行附带渠道状态标签(已排期 / 已起草 / 待交接),每行还需一个暂存帖子面板,展示已批准的配文或邮件文案及其导出 PNG 链接。

结束提议。 用一行说明该营销活动现在包含的内容,然后给出最相关的下一步及其触发短语——通常是在帖子开始发布后使用"我的营销有效吗?"(growth-pulse)。另可提供至多两项:用于常规日历的"做内容"(social-content-engine),或"我的广告"(ad-manager)。最多三项;对店主在本次会话中已拒绝的内容,不再重复提议。


审批关卡

  • 邮件行不调用 Canva。 每次 API 调用前都要重新检查 Path 列。
  • 不发布。 每篇 HubSpot 帖子都以 SCHEDULED 状态进入暂存;由所有者控制何时上线。
  • 预检时务必告知生成预算。 所有者需看到设计总数并批准,然后才能开始第 1 阶段。
  • 第 3 阶段逐行处理。 同一行内的候选稿并行触发,但各行之间按顺序执行,每行间隔 30 秒,以此保护配额。
  • 第二次遇到配额错误时,暂停并询问。 切勿循环重试。
  • 展示前务必导出为永久 PNG。 任务成功并不代表设计渲染正确。
  • 消息中切勿嵌入 design.canva.ai 链接。 这些链接会过期。
  • 某个候选失败时,切勿重新生成整行。 仅按候选逐个重试。
  • Pro/Teams 用户切勿自动选择模板。 务必先确认。
  • 切勿跳过逐槽位盘点。 多槽位模板只要有一个槽位为空,就会渲染出占位风景图。
  • 切勿跳过检查点 1。 在日历获批之前就开始生成,是本技能中最大的无效工作来源。

参考资料

使用未列出的工具

本技能中提到的连接器是经过测试的路径,并非唯一选择。如果所有者希望此流程使用未连接或未列出的工具,可以提供 build-connector。它会先检查连接器目录,若没有对应连接器,则通过 Zapier 连接,绝不基于原始 API 手动构建。连接建立后,该工具即与本技能中的其他可选连接器一样加入流程,并同样受制于上述审批关卡。

评论

支持 Markdown