waba-template-author

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese
<!-- Verified against Sent sources: - https://docs.sent.dm/docs/docs/03-quickstart/first-template - https://docs.sent.dm/start/quickstart/first-message - https://docs.sent.dm/reference/api - Sent v3 OpenAPI: POST /v3/templates, GET /v3/templates, GET /v3/templates/{id}, PUT /v3/templates/{id}, DELETE /v3/templates/{id}, POST /v3/messages Review notes: - Sent docs define templates across SMS, WhatsApp, and RCS, and state that WhatsApp templates require Meta approval. - Sent's surfaced template statuses are `APPROVED`, `PENDING`, `REJECTED` (snapshot Template Models section). - Sent's three template categories are `UTILITY`, `MARKETING`, `AUTHENTICATION` — no others. - Treat WhatsApp category rules, rejection reasons, the Meta-only `PAUSED` state, and Cloud API payloads as Meta-side policy/context. Sent does not surface `PAUSED`. -->
<!-- 已对照Sent来源验证: - https://docs.sent.dm/docs/docs/03-quickstart/first-template - https://docs.sent.dm/start/quickstart/first-message - https://docs.sent.dm/reference/api - Sent v3 OpenAPI: POST /v3/templates, GET /v3/templates, GET /v3/templates/{id}, PUT /v3/templates/{id}, DELETE /v3/templates/{id}, POST /v3/messages 审核说明: - Sent文档定义了适用于SMS、WhatsApp和RCS的模板,并指出WhatsApp模板需要Meta审核。 - Sent显示的模板状态为`APPROVED`、`PENDING`、`REJECTED`(参考模板模型章节快照)。 - Sent的三类模板为`UTILITY`、`MARKETING`、`AUTHENTICATION`——无其他类别。 - 将WhatsApp类别规则、拒绝原因、Meta专属的`PAUSED`状态以及Cloud API负载视为Meta端的政策/上下文。Sent不会显示`PAUSED`状态。 -->

WABA template author

WABA模板编写工具

Overview

概述

Use this skill to write WhatsApp template content that can be represented as a Sent template, submitted for WhatsApp review where required, and later sent through
POST /v3/messages
with
template.id
. The skill’s job is not just to produce polished copy; it must choose the right category, structure components correctly, provide realistic sample values, and flag review risks before submission.
Sent stores templates as reusable message blueprints across SMS, WhatsApp, and RCS. WhatsApp review and category enforcement come from Meta, but the Sent-facing workflow uses Sent’s
/v3/templates
endpoints and Sent template statuses.
使用此技能编写可转换为Sent模板的WhatsApp模板内容,在需要时提交WhatsApp审核,之后可通过
POST /v3/messages
接口并携带
template.id
发送消息。本技能的职责不仅是生成打磨后的文案,还必须选择正确的类别、合理构建组件、提供真实的示例值,并在提交前标记审核风险。
Sent将模板存储为可在SMS、WhatsApp和RCS间复用的消息蓝图。WhatsApp的审核和类别规则由Meta制定,但面向Sent的工作流需使用Sent的
/v3/templates
端点和Sent模板状态。

When to use

使用场景

Use this skill when the user asks for WhatsApp template copy, WABA template creation, utility/marketing/authentication classification, template rejection fixes, variable samples, buttons, headers, template categories, Meta approval risk, or a Sent template payload for WhatsApp.
Do not use this skill to design the whole template-management UI; use
template-builder-ui
. Do not use it to connect a WABA or phone number; use
waba-embedded-signup
. Do not use it to register SMS compliance; use
sms-10dlc-registration
.
当用户请求WhatsApp模板文案、WABA模板创建、实用类/营销类/认证类分类、模板拒签修复、变量示例、按钮、标题、模板类别、Meta审核风险,或用于WhatsApp的Sent模板负载时,使用此技能。
请勿使用此技能设计完整的模板管理UI;如需此功能,请使用
template-builder-ui
。请勿使用此技能连接WABA或电话号码;如需此功能,请使用
waba-embedded-signup
。请勿使用此技能注册SMS合规性;如需此功能,请使用
sms-10dlc-registration

Category decision

类别判定

Pick the narrowest truthful WhatsApp category. Do not force promotional content into utility. The category should match the recipient’s expectation, the opt-in context, and the actual copy.
CategoryUse whenAvoid when
UtilityThe message is tied to an existing transaction, account, order, appointment, or service request.The copy includes upsell, acquisition, abandoned cart, discount, or broad engagement language.
MarketingThe message promotes, re-engages, cross-sells, announces offers, or encourages optional action not tied to an existing transaction.The message is purely required service/account information.
AuthenticationThe message delivers one-time passcodes or verification flows.The message includes non-authentication content or marketing.
Example. “Your order 1234 shipped and arrives tomorrow” is utility. “Your order shipped — add accessories for 20% off” is marketing risk because it adds promotional content.
选择最精准且符合实际的WhatsApp类别。请勿将推广内容强行归入实用类。类别应与收件人的预期、选择加入的场景以及实际文案相符。
类别使用场景避免场景
Utility(实用类)消息与现有交易、账户、订单、预约或服务请求相关。文案包含追加销售、获客、购物车遗弃提醒、折扣或广泛互动类语言。
Marketing(营销类)消息用于推广、重新触达、交叉销售、发布优惠或鼓励与现有交易无关的可选操作。消息仅包含必需的服务/账户信息。
Authentication(认证类)消息用于发送一次性验证码或验证流程。消息包含非认证内容或营销信息。
示例:“您的订单1234已发货,预计明日送达”属于实用类。“您的订单已发货——添加配件可享20%折扣”存在营销类风险,因为添加了推广内容。

Process

流程

1. Capture the business intent

1. 捕捉业务意图

Ask what event triggers the template, who receives it, what action the recipient should take, and whether the message contains any promotion. Write those answers before drafting copy.
A strong intent statement is specific: “Send a delivery reschedule link after a courier misses the first attempt.” A weak one says: “Notify users about updates.”
询问触发模板的事件、收件人是谁、收件人应采取的操作,以及消息是否包含推广内容。在起草文案前记录这些答案。
清晰的意图表述应具体:“快递首次派送失败后,发送配送改期链接。”模糊的表述如:“通知用户有关更新。”

2. Choose the category before writing copy

2. 起草文案前先选择类别

Drafting before category selection often creates copy that fails review. Choose utility, marketing, or authentication first, then write within that boundary.
If the user wants utility but includes promotional language, explain the conflict and offer two options: remove promotion and keep utility, or keep promotion and classify as marketing.
先起草文案再选择类别往往会导致文案无法通过审核。先选择实用类、营销类或认证类,再在该类别范围内撰写文案。
如果用户想要实用类模板但包含推广语言,需说明冲突并提供两个选项:移除推广内容并保留实用类,或保留推广内容并归类为营销类。

3. Draft the component structure

3. 构建组件结构

Represent the template in Sent-compatible component language: header, body, footer, buttons, variables, and samples. Keep the component set as simple as the use case allows.
ComponentGuidance
HeaderUse only when it clarifies identity or context. Avoid promotional headers for utility templates.
BodyPut the required message and variables here. Keep the first sentence clear without needing the button.
FooterUse for low-emphasis context such as opt-out or support where appropriate.
ButtonsUse quick replies or call-to-action buttons only when they directly support the message intent.
VariablesUse stable names and provide realistic samples for every variable.
用兼容Sent的组件语言表示模板:标题、正文、页脚、按钮、变量和示例。组件集合应尽可能贴合使用场景,保持简洁。
组件指导原则
标题仅在明确身份或上下文时使用。实用类模板避免使用推广性标题。
正文放置必需消息和变量。第一句应清晰易懂,无需依赖按钮。
页脚用于低优先级上下文,如适当情况下的退订或支持信息。
按钮仅在直接支持消息意图时使用快速回复或号召性按钮。
变量使用稳定名称,并为每个变量提供真实示例。

4. Write with review risk in mind

4. 撰写时考虑审核风险

Use concise, literal copy. Avoid vague urgency, misleading scarcity, or mixed intents. Do not include sensitive data unless the use case requires it and the customer confirms it is acceptable.
Utility example.
text
Name: order_shipped_update
Category: Utility
Language: en_US
Body: Hi {{first_name}}, your {{brand_name}} order {{order_id}} has shipped and is expected on {{delivery_date}}. Track it here: {{tracking_url}}.
Samples:
  first_name: Alex
  brand_name: Acme
  order_id: A12345
  delivery_date: May 22
  tracking_url: https://acme.example/t/A12345
Button: Track order -> {{tracking_url}}
Marketing example.
text
Name: spring_sale_announcement
Category: Marketing
Language: en_US
Body: Hi {{first_name}}, {{brand_name}} spring deals are live. Use code {{promo_code}} by {{end_date}} to save on selected items.
Samples:
  first_name: Alex
  brand_name: Acme
  promo_code: SPRING20
  end_date: May 31
Button: Shop now -> https://acme.example/sale
使用简洁、直白的文案。避免模糊的紧迫感、误导性稀缺性或混合意图。除非使用场景需要且客户确认可接受,否则请勿包含敏感数据。
实用类示例
text
Name: order_shipped_update
Category: Utility
Language: en_US
Body: Hi {{first_name}}, your {{brand_name}} order {{order_id}} has shipped and is expected on {{delivery_date}}. Track it here: {{tracking_url}}.
Samples:
  first_name: Alex
  brand_name: Acme
  order_id: A12345
  delivery_date: May 22
  tracking_url: https://acme.example/t/A12345
Button: Track order -> {{tracking_url}}
营销类示例
text
Name: spring_sale_announcement
Category: Marketing
Language: en_US
Body: Hi {{first_name}}, {{brand_name}} spring deals are live. Use code {{promo_code}} by {{end_date}} to save on selected items.
Samples:
  first_name: Alex
  brand_name: Acme
  promo_code: SPRING20
  end_date: May 31
Button: Shop now -> https://acme.example/sale

5. Convert the draft into a Sent template operation

5. 将草稿转换为Sent模板操作

Use Sent’s template API for creation and lifecycle management. The verified operations are:
OperationEndpointUse
Create template
POST /v3/templates
Save a draft or submit a new template.
List templates
GET /v3/templates
Find templates by search, status, or category.
Retrieve template
GET /v3/templates/{id}
Inspect status and definition.
Update template
PUT /v3/templates/{id}
Revise name, category, language, definition, or submit for review.
Delete template
DELETE /v3/templates/{id}
Delete the Sent template, optionally deleting from Meta where supported.
Use Sent’s documented template statuses in user-facing instructions:
PENDING
,
APPROVED
,
REJECTED
(per the Sent docs snapshot, Template Models section). Sent does not surface
PAUSED
— that is Meta-side only. If Meta returns additional statuses for a WhatsApp account, quote them as Meta-side evidence rather than Sent-surfaced statuses.
使用Sent的模板API进行创建和生命周期管理。已验证的操作如下:
操作端点用途
创建模板
POST /v3/templates
保存草稿或提交新模板。
列出模板
GET /v3/templates
按搜索关键词、状态或类别查找模板。
获取模板
GET /v3/templates/{id}
查看状态和定义。
更新模板
PUT /v3/templates/{id}
修改名称、类别、语言、定义,或提交审核。
删除模板
DELETE /v3/templates/{id}
删除Sent模板,可选在支持的情况下同步从Meta删除。
在面向用户的说明中使用Sent文档规定的模板状态:
PENDING
APPROVED
REJECTED
(参考Sent文档快照的模板模型章节)。Sent不会显示
PAUSED
状态——这是Meta端专属状态。如果Meta为WhatsApp账户返回其他状态,请将其作为Meta端证据引用,而非Sent显示的状态。

6. Add variable samples before submission

6. 提交前添加变量示例

Every placeholder needs a realistic sample. Samples should look like production data and should not add claims that the body does not support.
Bad sample pattern. Body says “Your appointment is confirmed,” but sample data includes “50% off visit.” This can create category confusion.
Good sample pattern. Body and sample values all support the same transactional use case.
每个占位符都需要真实的示例。示例应与生产数据类似,且不得添加正文未提及的声明。
错误示例模式:正文写“您的预约已确认”,但示例数据包含“就诊享50%折扣”。这会导致类别混淆。
正确示例模式:正文和示例值均支持同一交易场景。

7. Revise rejected templates from the reason, not from guesses

7. 根据拒签原因修订模板,而非猜测

If a template is rejected, retrieve the Sent template detail/status and any available rejection reason. Then change only what the reason justifies. Category mismatch, missing samples, unsupported components, and promotional language in utility templates require different fixes.
Rejection symptomLikely correction
Category mismatchChange category or remove conflicting copy.
Missing/weak samplesAdd realistic variable samples.
Unsupported componentSimplify header/buttons or split channel variants.
Policy concernRemove misleading, sensitive, or prohibited content.
Language mismatchCorrect language code and localized text.
如果模板被拒,获取Sent模板详情/状态及所有可用拒签原因。仅修改原因指出的内容。类别不匹配、缺少示例、组件不支持、实用类模板含推广语言等情况需要不同的修复方式。
拒签表现可能的修正方式
类别不匹配修改类别或移除冲突文案。
示例缺失/无效添加真实的变量示例。
组件不支持简化标题/按钮,或拆分渠道变体。
政策问题移除误导性、敏感或违禁内容。
语言不匹配修正语言代码和本地化文本。

8. Confirm sendability after approval

8. 审核通过后确认可发送性

After approval, confirm the template can be used with the intended Sender Profile/channel and sent through
POST /v3/messages
with
template.id
. If delivery later fails, hand off to
messaging-performance-analyzer
rather than rewriting approved copy blindly.
审核通过后,确认模板可用于目标Sender Profile/渠道,并可通过
POST /v3/messages
接口携带
template.id
发送。若后续投递失败,请转交
messaging-performance-analyzer
处理,而非盲目重写已通过审核的文案。

Common rationalizations to avoid

需避免的常见误区

Do not call a template utility if it includes discounts, upsells, abandoned-cart messaging, or broad engagement language.
Do not omit sample values because the placeholders are obvious. Review and test flows need rendered examples.
Do not treat Meta Cloud API payload examples as the Sent API contract. Use Sent
/v3/templates
for Sent integrations.
Do not introduce
PAUSED
as a Sent template status. Sent surfaces only
APPROVED
,
PENDING
, and
REJECTED
— PAUSED is Meta-side and is not reflected in the Sent template status. When Meta pauses, the Sent status stays as it was, and individual sends start failing instead — diagnose via
messaging-performance-analyzer
.
Do not rewrite a rejected template without reading the actual rejection reason when available.
请勿将包含折扣、追加销售、购物车遗弃提醒或广泛互动语言的模板归类为实用类。
请勿因占位符看似明确而省略示例值。审核和测试流程需要渲染后的示例。
请勿将Meta Cloud API负载示例视为Sent API约定。Sent集成请使用Sent
/v3/templates
接口。
请勿将
PAUSED
作为Sent模板状态。Sent仅显示
APPROVED
PENDING
REJECTED
——PAUSED是Meta端状态,不会反映在Sent模板状态中。当Meta暂停模板时,Sent状态保持不变,仅单个发送请求开始失败——需通过
messaging-performance-analyzer
诊断。
请勿在未查看实际拒签原因(如有)的情况下重写被拒模板。

Verification checklist

验证清单

  • The trigger event, audience, recipient action, and promotional content are documented.
  • Category is chosen before copy is drafted.
  • The body is clear without relying on a button.
  • Every variable has a realistic sample value.
  • Component choices match the selected channel and use case.
  • Sent template API endpoints are used for create/list/get/update/delete.
  • Status handling uses only Sent's surfaced set —
    APPROVED
    ,
    PENDING
    ,
    REJECTED
    (no
    PAUSED
    ).
  • Rejection fixes map to observed reasons, not generic rewrites.
  • Approved templates are tested through Sent sending with
    template.id
    before broad rollout.
  • 已记录触发事件、受众、收件人操作和推广内容。
  • 起草文案前已选择类别。
  • 正文无需依赖按钮即可清晰传达信息。
  • 每个变量都有真实的示例值。
  • 组件选择符合所选渠道和使用场景。
  • 使用Sent模板API端点进行创建/列出/获取/更新/删除操作。
  • 状态处理仅使用Sent显示的状态集——
    APPROVED
    PENDING
    REJECTED
    (无
    PAUSED
    )。
  • 拒签修复对应已观察到的原因,而非通用重写。
  • 已通过Sent发送
    template.id
    测试已审核模板,再进行大规模推广。

Related skills

相关技能

Use
template-builder-ui
when the task is UI design, component validation, JSON editor behavior, or template-management product specs.
Use
waba-embedded-signup
when the WhatsApp sender/WABA/phone number is not connected to Sent yet.
Use
sender-profile-architect
when the template belongs to a specific tenant, brand, department, or profile boundary.
Use
sms-10dlc-registration
when WhatsApp copy will be mirrored to SMS and must align with US A2P use-case registration.
Use
messaging-performance-analyzer
when approved WhatsApp templates have poor delivery, read, or webhook outcomes.
Use the
sent
skill for shared Sent terminology and routing.
当任务涉及UI设计、组件验证、JSON编辑器行为或模板管理产品规格时,请使用
template-builder-ui
当WhatsApp发送方/WABA/电话号码尚未连接到Sent时,请使用
waba-embedded-signup
当模板属于特定租户、品牌、部门或配置文件边界时,请使用
sender-profile-architect
当WhatsApp文案将同步到SMS且需符合美国A2P使用场景注册要求时,请使用
sms-10dlc-registration
当已审核的WhatsApp模板投递、阅读或Webhook结果不佳时,请使用
messaging-performance-analyzer
共享Sent术语和路由请使用
sent
技能。

Bundled references and scripts

捆绑参考资料和脚本

FileTypePurpose
references/waba-template-categories.md
Policy lookup tableMeta category boundaries, component rules, and Cloud API submission shape.
references/waba-template-examples.md
Worked examplesCopy-pasteable payloads for utility, marketing, and authentication templates.
references/template-rejection-playbook.md
Decision matrixMap rejection reasons to precise edits and resubmission etiquette.
scripts/lint_waba_template.py
Validation scriptStdlib lint for a template JSON payload (placeholder numbering, samples, category-risk phrases, button structure, language code). Run from the skill root:
python scripts/lint_waba_template.py template.json
.
scripts/fixtures/utility_good.json
FixturePassing fixture for the linter.
scripts/fixtures/utility_bad.json
FixtureFailing fixture (wrong placeholder order, promo phrasing in utility).
文件类型用途
references/waba-template-categories.md
政策对照表Meta类别边界、组件规则和Cloud API提交格式。
references/waba-template-examples.md
实操示例可直接复制的实用类、营销类和认证类模板负载。
references/template-rejection-playbook.md
决策矩阵将拒签原因映射到精准修改和重新提交规范。
scripts/lint_waba_template.py
验证脚本对模板JSON负载进行标准库检查(占位符编号、示例、类别风险短语、按钮结构、语言代码)。从技能根目录运行:
python scripts/lint_waba_template.py template.json
scripts/fixtures/utility_good.json
测试用例通过检查的测试用例。
scripts/fixtures/utility_bad.json
测试用例未通过检查的测试用例(占位符顺序错误、实用类含推广语)。

Unverified claims to confirm or remove

需确认或移除的未验证声明

  • Exact category-pricing behavior and Meta rejection-code semantics are external Meta policy context, not Sent API facts.
  • Cross-check the Sent template schema against the live OpenAPI at
    https://docs.sent.dm
    before promoting code to production.
  • 精确的类别定价行为和Meta拒签代码语义属于Meta外部政策上下文,而非Sent API事实。
  • 在将代码推广到生产环境前,请对照
    https://docs.sent.dm
    上的实时OpenAPI交叉检查Sent模板架构。