用途:把消息意图转换为符合 Sent v3 模板定义契约的合法请求体,用于 POST /v3/templates,并评估 WhatsApp 政策风险、说明模板生命周期。注意 Sent 的模板请求不是 Meta Cloud API 的 components[] 结构。
主要能力:确定意图与分类(UTILITY 非促销交易/账户/服务事件,MARKETING 促销与再营销,AUTHENTICATION 验证码与认证流程;混合内容归为营销或拆分);构建创建请求,顶层字段包括必填 definition(含 header、body、footer、buttons、可选 definitionVersion、authenticationConfig),以及可选的 category、language、creation_source(默认 from-api)、submit_for_review(默认 false)、sandbox。不要将 name、channels、body、header、buttons、components 放在请求根层。
变量与按钮:使用 {{0:variable}}、{{1:link}}、{{2:media}} 等占位符,每个占位符须有唯一非负整数 id、可读 name、匹配 type 与 props.sample,且不得输出裸 {{1}}。支持 QUICK_REPLY、URL、VOICE_CALL、PHONE_NUMBER、COPY_CODE;按钮总数最多 10,URL 最多 2,语音、电话、复制码各最多 1,标签最多 25 字符;需按类型提供 quickReplyType、urlType/url、countryCode/phoneNumber 或 offerCode。
认证模板:AUTHENTICATION 使用 authenticationConfig,如 addSecurityRecommendation 与 codeExpirationMinutes(1–90 分钟),仅保留验证用途,用一个验证码变量和复制码操作,不加营销内容、无关链接、媒体或促销按钮。
校验与提交:运行 python scripts/lint_waba_template.py template.json 检查请求结构、变量、1024 字符限制、渠道覆盖、按钮类型与限额、认证配置;Meta Cloud API 的 components[] 示例应显式报转换错误。集成期用 sandbox: true 与 submit_for_review: false,提交前展示最终请求体并说明会改变外部状态。
生命周期:模板状态包括 DRAFT、PENDING、APPROVED、REJECTED、PAUSED;模板 webhook 使用 field: "templates",不带 sub_type 和 event,状态在 payload.status;需持久化原始字符串并安全展示未知值。
限制:不要将 Meta Cloud API 示例当作合法 Sent 请求;Sent 请求体各渠道体最长 1024 字符;sms、whatsapp、rcs 为完整覆盖而非片段;未知提供方取值应保留而非强制枚举。