何时使用
拿到一份已批准的内容简报后,需要把它端到端落地成一场营销活动:排期、出图、写文案、入队待发。本技能按五个串行阶段推进,每个阶段都由 owner 显式批准后才进入下一阶段:
简报 → 排期日历 → 素材清单 → Canva 设计 → 文案 → HubSpot 排期入队
两条路径分流(排期表用 Path 列标注每一行):
| 路径 | 渠道 | 产物 |
|---|---|---|
| Canva(社媒) | Instagram、Facebook、X、LinkedIn | Canva 设计 + 文案 + HubSpot 排期帖 |
| 纯文本 | 邮件(newsletter / 营销 / drip) | 主题 + 预览文字 + 正文,内联呈现给 owner 自行发送 |
不该用本技能的边界:
- 邮件行绝不走 Canva:不建模板、不 autofill、不复制设计、不上传/导出素材。邮件正文由 Claude 直接写成纯文本内联呈现。原因:邮件模板 autofill 在图片槽多于可用照片时会塞占位图,且缩略图在聊天预览里渲染失败。owner 若要 Canva 邮件设计 → 见源仓
reference/gotchas.md的转向话术。 - 不做自动发布:所有 HubSpot 帖子只入队为
SCHEDULED,上线由 owner 控制。 - 无简报不开工:没有简报先索取,别凭空动手。
步骤 / 指令
飞行前检查(Stage 1 之前)
- 简报:用户已引用/粘贴已批准简报;否则索取。
- Canva 等级:Pro/Teams 需从用户库手选模板(无 autofill API);Enterprise 可从品牌模板 autofill。
- HubSpot 等级:社媒入队需 Marketing Hub Professional;Starter/Free → 跳过 Stage 5,改导出 CSV。
- 品牌素材:确认磁盘上产品照路径,或 Canva 品牌套件已就绪。
- 生成预算:开工前估算并公示设计总量。默认每行 3 个候选,每个设计约 5 次 API 调用(autofill + export + 轮询)。预计总设计数 > 30 时,先建议单候选模式;锁定该值贯穿整个会话。
本次活动生成预算:
Canva(社媒)行数: 8
每行候选数: 3 (默认;说 "单候选" 改为 1)
设计总数: 24
API 调用(约): ~120
Canva 限速 100 请求/分钟,约 2-3 分钟,余量充足。继续?
Stage 1 — 发布排期日历
从简报提取主题、渠道、节奏、硬日期(上新/促销/节日)。建表,每行用 Path 列路由到 Canva 或纯文本:
| Date | Channel | Path | Theme | Asset type | Caption/Subject angle |
|---|---|---|---|---|---|
| Jun 2 | Instagram feed | Canva(社媒) | Linen launch | Square post | "finally, a dress…" |
| Jun 5 | 纯文本 | Linen launch | Email body | "Linen that actually breathes" |
所有邮件行标 纯文本;默认 30 天封顶;提前标出排期冲突(同日同产品两帖)。
检查点 1:展示日历 → "符合计划吗?要改日期/加渠道/换主题吗?" 迭代至批准后,口头复述分流:"N 行走 Canva,M 行走纯文本"。在此抓错是免费的,出图之后再抓就不是了。
Stage 2 — 素材清单(仅 Canva 行)
邮件行整段跳过。逐 Canva 行建清单:
- 逐一列出每个图片槽并命名(
Header_Image、Product1_Image…),绝不笼统写成 "产品图"。Enterprise 从GET /v1/brand-templates/{id}的dataset[].label读字段名;Pro/Teams 数模板里每个独立图片矩形。 - 盘点可用素材:简报文本(产品名、报价、定价)、已上传 Canva 的照片(
GET /v1/assets)或磁盘照片、品牌色与字体(Enterprise)。 - 建逐槽差距表(每槽一行,不是每设计一行):
| Date | Slot name | Slot kind | Available asset | Status |
|---|---|---|---|---|
| Jun 2 | Hero_Image | image | bloom_summer.jpg → asset_id pending | upload |
| Jun 9 | Product1_Image | image | — | MISSING |
- 槽位多于照片时暂停问 owner(复用同图 / 补图 / 换简单模板),未选定前不发任何生成调用——空槽会渲染成 Canva 默认风景占位图。
- 上传缺图并拿到已验证的 asset ID:
POST /v1/asset-uploads,轮询GET /v1/asset-uploads/{job_id}直到status == "success",记录响应里的asset.id——这是 autofill 图片字段唯一有效的值;传空串/URL/文件路径/过期 ID 都会静默渲染成 Canva 库存风景图。 - 确认清单:向 owner 展示每槽已解决、每个图片
asset.id已确认的完整表——这是调 Canva API 前最后一站。
Stage 3 — Canva 设计生成
调任何 Canva API 前,重读日历,丢弃 Path 不是 Canva(社媒) 的行。
一次只处理一个日历行,每行 3 候选(或飞行前选定值)。每行循环:生成候选 → 验证 → 导出 → 肉眼检查 → 重试失败项 → 呈现 → 等 owner 选 → 下一行。行间停 30 秒,不并行多行——这是防止中途撞配额的保护。
- 轮询节奏:每 3-5 秒查一次 job 状态,别更快。
- 预览 URL 只有一种可安全嵌入:autofill 返回的
design.canva.ai缩略图几分钟内过期,嵌入会变成坏图。只嵌入永久导出 URL(export-download.canva.com或export-designMCP 工具)。原生 Cowork 轮播让其自行渲染,别重新嵌入。
单行循环:
- 定模板(每会话一次):Enterprise
GET /v1/brand-templates按资产类型过滤;Pro/TeamsGET /v1/designs?ownership=any&query={模板名},呈现前 3 个让 owner 确认。绝不替 Pro/Teams 自动选模板。 - 并行生成本行候选:Enterprise 每候选
POST /v1/autofills(模板 ID + 字段值),并发轮询;Pro/TeamsPOST /v1/designs建副本,描述文本/图片编辑,收回 design ID。 - 验证 job 状态:确认
GET /autofills/{job_id}返回status == "success"且有result.design.id。错误分级处理:JOB_FAILED→ 读job.error.message,修字段值/asset ID,重试一次。RATE_LIMIT_EXCEEDED(本会话首次)→ 等 60s,仅重试该候选一次。RATE_LIMIT_EXCEEDED(第二次)或任何quota_exceeded/日上限错误 → 立即停止生成,不重试,汇报进度并让 owner 选(切单候选跑完 / 暂停 60 分钟 / 用现有的转文案)。
- 每个成功候选导出为永久 PNG(并行):REST
POST /v1/exports(format.type: "png"),轮询GET /v1/exports/{job_id}至成功,取urls[0];或 Canva MCPexport-design。这些永久 URL 才用于预览嵌入和后续 HubSpot 附件。 - 肉眼验证每张导出,命中即拒:带云和绿丘的通用风景(Canva 默认占位)、该放照片处的纯灰矩形、lorem-ipsum/模板默认文本、主体与简报不符(错产品/错品牌)。失败 → 复查该槽清单、修
asset.id、只重生成该候选、重导出、重验证。 - 部分失败按候选重试:N 个里 1 个失败,只重生成那一个,别重做整行、别呈现半坏轮播。第二次仍失败 → 让 owner 选(跳过 / 换简单模板 / 换张照片再试)。
- 呈现本行候选:让原生 Cowork 轮播渲染 autofill 结果,下方加文字提示让 owner 选。轮播不渲染时改嵌 Step 4 的永久 PNG;最终兜底链到
https://www.canva.com/d/{design_id}。绝不重新嵌入design.canva.aiURL。 - 停 30 秒,进入下一行。
检查点 2:owner 为每个日历行选定一个设计即满足;要重生成只重生成那一个候选。
Stage 4 — 文案撰写
每行写文案:社媒行写 caption,邮件行写整封邮件。
社媒 caption(IG/FB/X/LinkedIn):长度按渠道(IG ≤ 2200、FB ≤ 500 推荐、X ≤ 280);结构 hook → 一个产品利益点 → CTA → 3-5 个话题标签(不是 30 个);语气匹配简报 tone;不写 "Exciting news!"/"We're thrilled to announce" 这类填充。
邮件正文(Claude 全写,无 Canva):主题 ≤ 50 字、具体、不标题党;预览文字 ≤ 90 字、补充主题而非重复;正文纯散文 100-250 词(开头钩子 → 1-2 段实质 → 单一明确 CTA → 签名);语气同社媒;不引用图片(别写 "见上图");每封一个 CTA。
社媒 caption 内联呈现在对应行下;邮件按下列格式内联:
Subject: <主题>
Preheader: <预览文字>
<正文>
检查点 3:"有要重写的 caption 或邮件吗?标出日期和改动。" 迭代至批准。
Stage 5 — HubSpot 排期入队 + 邮件交接
社媒帖入队 HubSpot;邮件不入队,内联呈现给 owner 自行复制到其邮件工具。
- 建活动:
POST /marketing/v3/campaigns(活动名 + 起止日期)。 - 逐
Canva(社媒)行入队:POST到 HubSpot Social API:channel映射到 HubSpot 账号 ID;scheduledAt用 ISO 8601 且调用前确认在未来;content.body填已批准 caption;attachments填 Stage 3 的永久 Canva 导出 PNG URL;status恒为SCHEDULED(绝不PUBLISHED)。 - 确认队列:
GET /marketing/v3/social/posts?status=SCHEDULED,列出并给 HubSpot 活动视图直链。 - 交接邮件内容:每个邮件行按发送日期分组,内联呈现已批准的主题 + 预览 + 正文,owner 自行复制到其邮件工具。
最终检查点:告知社媒已排期入队(附链接,可在 HubSpot 取消/编辑),邮件内容内联待复制,问 "结束前还有要改的吗?"。
示例
完整可运行示例(单槽社媒、多槽模板)见源仓 reference/examples/boutique-brief-campaign.md。典型一行的端到端:Jun 2 IG 方图 → 清单 Hero_Image 上传拿 asset.id → 3 候选 autofill → 导出 3 张永久 PNG → 肉眼剔除风景占位 → 轮播呈现让 owner 选 1 → 写 caption(hook+利益点+CTA+4 标签)→ HubSpot 排期为 Jun 2 9:00 SCHEDULED。
注意事项(审批闸门)
- 邮件行不调任何 Canva:每次 API 调用前重查
Path列。 - 不发布:HubSpot 帖恒为
SCHEDULED。 - 飞行前必公示生成预算:owner 见总设计数并批准后再进 Stage 1。
- Stage 3 一次一行:行内候选并行,行间串行 + 30s 间隔——这是配额保护。
- 第二次配额错误就暂停问 owner,绝不循环重试。
- 呈现前必导出永久 PNG:job 成功 ≠ 设计渲染正确。
- 消息里绝不嵌
design.canva.aiURL(会过期)。 - 单候选失败绝不重做整行:只按候选重试。
- 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(完整示例)。 - 上游:内容简报通常来自 content-strategy 技能。
采编自 anthropics/knowledge-work-plugins(small-business/skills/canva-creator),遵循 Apache-2.0 许可。