关于 canva-creator
canva-creator 是营销活动工作流技能,按审批流程将内容简报转为发布日历、素材清单、Canva 社媒设计、文案和 HubSpot 待发布内容。它将邮件纯文本内容与 Canva 设计分开处理。
主要功能
- 01根据简报制定发布日历
- 02盘点社媒设计所需素材
- 03生成并审核 Canva 设计候选稿
- 04撰写纯文本邮件内容
- 05将获批社媒帖子提交至 HubSpot
适用场景
- 01规划覆盖社媒与邮件的营销活动
- 02生成设计前检查图片占位
- 03比较每篇帖子的 Canva 设计候选稿
- 04准备社媒帖子以提交至 HubSpot
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ anthropics/ knowledge-work-plugins --skill canva-creator安装后在 Claude Code 中输入/canva-creator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
reference/canva-api.mdgotchas.mdhubspot-staging.mdreference/examples/boutique-brief-campaign.md详细介绍
Canva Creator
范围
本技能分五个顺序阶段处理一次营销活动,每个阶段都需经所有者批准后才能进入下一阶段:
brief → calendar → asset inventory → Canva designs → copy → HubSpot staging
| 路径 | 渠道 | 本技能产出 |
|---|---|---|
| Canva(社交) | Instagram、Facebook、X/Twitter、LinkedIn | Canva 设计 + 文案 + 定时 HubSpot 帖子 |
| 纯文本 | 邮件(电子通讯、营销、自动化培育) | 主题 + 预览文本 + 正文,直接在对话中提供给所有者自行发送 |
任何情况下都不会为邮件行使用 Canva —— 不使用模板、不使用自动填充、不做设计副本、不上传素材、不导出。邮件图形不在本技能范围内,因为当图片位数超过可用照片时,邮件模板自动填充会生成占位图形,而且变体缩略图在聊天预览中无法正常显示。如果所有者要求制作 Canva 邮件设计,请参阅 reference/gotchas.md 中的引导话术。
前置检查
进入阶段 1 之前,请确认以下事项:
-
Brief。 用户已引用或粘贴了已批准的 brief。如果没有,请回复:"在搭建营销活动之前,我需要内容 brief。您是否已有来自 content-strategy 技能的 brief,或者现在想编写一份?"
-
Canva 套餐。 Pro/Teams 需要从用户的素材库中手动选择模板(没有自动填充 API)。Enterprise 可以从品牌模板中自动填充。
-
HubSpot 套餐。 社交内容暂存需要 Marketing Hub Professional。若为 Starter 或 Free,则跳过阶段 5,改为导出 CSV(参见 reference/hubspot-staging.md)。
-
品牌素材。 如果已连接店铺(Shopify 或 Square,属于同级工具,参见
../../shared/connector-neutrality.md),请先读取商品列表:brief 中提到的每个商品的标题、图片 URL 和价格。仅做读取 —— 在阶段 2 第 5 步之前不会向 Canva 上传任何内容,且届时只上传已批准日程中各槽位所需的图片。该列表即为初始照片清单;只询问店铺中没有图片的商品。读取规则(包括读取字段和价格声明规则)见 ../social-content-engine/reference/shopify-assets.md(该文档针对 Shopify 编写;Square 的商品目录图片按工具清单中的相同步骤操作)。如果没有连接店铺,请确认本地商品照片的路径,或确认品牌套件已在 Canva 中生效。 -
生成额度。 估算本次营销活动的 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 或纯文本起草之一:
| Date | Channel | Path | Theme | Asset type | Caption/Subject angle |
|---|---|---|---|---|---|
| Jun 2 | Instagram feed | Canva (social) | Linen launch | Square post | "finally, a dress…" |
| Jun 5 | Text-only | Linen launch | Email body | "Linen that actually breathes" |
在展示之前,将每一行邮件渠道标记为 Text-only。除非 brief 另有说明,否则上限为 30 天。预先标出排期冲突(同一产品在同一天有两条帖子)。
检查点 1。 展示日历,并询问:"这是否符合计划?是否有需要调整的日期、需要新增的渠道或需要更换的主题?"反复修改直到获得批准,然后大声重述分配情况:"N 行通过 Canva 处理,M 行通过纯文本起草处理",再进入下一步。在这里发现分类错误没有成本;等到生成设计之后再发现,代价就大了。
阶段 2 — 素材清单(仅限 Canva 行)
邮件行完全跳过此阶段。对于每一行 Canva (social),构建一份清单,列出模板所需的内容以及现有可用的素材。
-
逐一列出每个图片槽位的名称。 方形 Instagram 帖子通常有 1-2 个图片槽位;轮播图和产品网格可能有 5 个以上。请逐个列出(
Header_Image、Product1_Image、Product2_Image……),切勿笼统地写成"产品图片"。- Enterprise:从品牌模板(
GET /v1/brand-templates/{id})的dataset[].label中读取字段名称。 - Pro/Teams:统计模板中每个不同的图片矩形框。
- Enterprise:从品牌模板(
-
盘点可用素材。 文本内容来自 brief(产品名称、优惠文案、标语、价格);产品图片 URL 在预检时从已连接的店铺读取(仅针对缺口表中需要的槽位,在第 5 步上传,届时再通过
asset.id记录);已上传到 Canva 的产品照片(GET /v1/assets)或所有者磁盘上的照片;品牌套件的颜色和字体(仅 Enterprise)。文案中的价格必须取自店铺返回的值或 brief,绝不能凭记忆填写。 -
构建逐槽位缺口表。 每个设计的每个槽位一行,而不是每个设计一行。
Date Slot name Slot kind Available asset Status Jun 2 Hero_Image image bloom_summer.jpg → asset_id pending upload Jun 2 Headline text "Summer linen, finally" ready Jun 9 Product1_Image image — MISSING -
与所有者一起解决槽位与素材不匹配的问题。 如果模板的图片槽位多于 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 默认横向占位图的设计。
-
上传缺失的照片并获取已验证的素材 ID。 通过
POST /v1/asset-uploads上传,然后轮询GET /v1/asset-uploads/{job_id},直到status == "success"。从响应中记录asset.id——这是唯一能在 autofill 图片字段中生效的值。传入空字符串、URL、文件路径或过期 ID 会静默地渲染 Canva 的默认横向图形,而不是照片。 -
确认清单。 向所有者展示已完成的逐槽位表格,确保每个槽位都已解决,且每个图片的
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 轮播图会使用连接器的已认证会话直接渲染自动填充结果,请让其自行渲染,不要重复嵌入。
行循环
-
解析模板。(每个会话只做一次——除非日历混合了不同资产类型,否则各行使用同一模板。)
- Enterprise:按资产类型过滤,调用
GET /v1/brand-templates。 - Pro/Teams:调用
GET /v1/designs?ownership=any&query={template name},将排名前 3 的结果提供给所有者,并在生成前请其确认一个。
- Enterprise:按资产类型过滤,调用
-
并行生成该行的候选设计。 同时发起该行的 3 个候选(或由预检确定的 N 个)。
- Enterprise:对每个候选调用
POST /v1/autofills,传入模板 ID 和字段值。并发轮询所有任务。 - Pro/Teams:调用
POST /v1/designs创建副本。描述所有者在 Canva 中应用的文字和图片编辑内容,并收集返回的设计 ID。
- Enterprise:对每个候选调用
-
验证任务状态。 对每个候选,确认
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. 停止生成——基于现有成果进入文案阶段等待所有者选择。不要反复重试。
-
-
将每个成功的候选导出为永久 PNG。 并行发起该行的导出。
- REST:调用
POST /v1/exports,设置format.type: "png",轮询GET /v1/exports/{job_id}直至成功,获取urls[0]。 - Canva MCP:使用设计 ID 调用
export-design。
这些永久 URL 将用于预览嵌入,并在之后附加到 HubSpot 帖子中。自动填充响应中的缩略图永远不会在后续流程中使用。
- REST:调用
-
对每个导出结果进行视觉验证。 查看图片,凡出现以下任一情况即予以拒绝——它们都表明存在未填充的占位或资产错误:
- 带有云朵和绿色山丘的通用风景图(Canva 默认占位图)
- 本应放置照片处却是纯灰色矩形
- Lorem ipsum 文本或模板默认文字
- 主体与需求不符(产品错误、品牌错误)
如果某个候选未通过验证:重新检查受影响槽位的清单,修正
asset.id,仅重新生成该候选,重新导出,并再次验证。 -
部分失败时按候选重试。 如果该行的 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 -
呈现该行的候选。 让原生 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。 -
暂停 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。
-
创建营销活动。 使用日历中的活动名称和开始/结束日期调用
POST /marketing/v3/campaigns。 -
暂存每条社交媒体帖子。 针对每个
Canva (social)行向 HubSpot Social API 发送POST:channel:将日历中的渠道映射为 HubSpot 账号 IDscheduledAt:ISO 8601 格式的日期时间——调用前确认其为未来时间content.body:已批准的配文attachments:阶段 3 中生成的永久 Canva 导出 PNG 链接status:SCHEDULED(绝不使用PUBLISHED)
-
确认队列。 调用
GET /marketing/v3/social/posts?status=SCHEDULED,展示列表,并提供指向 HubSpot 营销活动视图的直接链接。 -
呈现待交接的邮件内容。 对每个邮件行,按发送日期分组,直接展示已批准的主题、预览文本和正文。店主将这些内容复制到他们的邮件工具中(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。 在日历获批之前就开始生成,是本技能中最大的无效工作来源。
参考资料
- reference/canva-api.md — Canva Connect API 端点、资源上传、导出格式、MCP 等效方案
- reference/hubspot-staging.md — HubSpot Social API,以及非 Pro 版本的 CSV 备用方案
- reference/gotchas.md — 常见故障模式的正确与错误做法对照
- reference/examples/boutique-brief-campaign.md — 完整示例(单槽位社交内容、多槽位模板)
使用未列出的工具
本技能中提到的连接器是经过测试的路径,并非唯一选择。如果所有者希望此流程使用未连接或未列出的工具,可以提供 build-connector。它会先检查连接器目录,若没有对应连接器,则通过 Zapier 连接,绝不基于原始 API 手动构建。连接建立后,该工具即与本技能中的其他可选连接器一样加入流程,并同样受制于上述审批关卡。