MCPInstall

waba-template-author

Writes, classifies, validates, and repairs WhatsApp templates using the Sent v3 template definition contract. Use for utility, marketing, authentication, OTP, Meta review, rejected templates, variables, buttons, channel overrides, or submission-ready Sent payloads.

Installs
2.9K
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/sentdm/sent-plugin --skill waba-template-author
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads waba-template-author automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

WhatsApp Template Author

Use this skill to turn a messaging intent into a valid body for POST /v3/templates, review it for WhatsApp policy risk, and explain the resulting lifecycle. Sent's template request is not Meta's Cloud API components[] shape.

Source precedence

When official sources disagree:

  1. Use the live Sent v3 OpenAPI for paths, request fields, and response shapes.
  2. Use the most specific current Sent guide for lifecycle and policy semantics.
  3. Preserve unknown provider values instead of forcing them into a closed enum.

The canonical references are the Sent template-definition guide, the v3 OpenAPI, and the webhook events reference. Do not use snapshot-era v2 examples.

Authoring workflow

1. Establish intent and category

Collect the business event, recipient expectation, requested action, language, channel overrides, and realistic sample values. Choose:

  • UTILITY for a specific non-promotional transaction, account, or service event.
  • MARKETING for promotions, offers, re-engagement, product discovery, or mixed promotional content.
  • AUTHENTICATION for one-time verification codes and supported authentication flows.

If content mixes utility and promotion, classify it as marketing or split it. See references/waba-template-categories.md.

2. Build the Sent create request

POST /v3/templates accepts these top-level fields:

FieldRequirement
definitionRequired. Contains header, body, footer, buttons, optional definitionVersion, and optional authenticationConfig.
categoryOptional: UTILITY, MARKETING, or AUTHENTICATION; omit for detection only when ambiguity is acceptable.
languageOptional locale such as en_US.
creation_sourceOptional source string; from-api is the documented default.
submit_for_reviewOptional Boolean; default false. Draft and validate before review.
sandboxOptional Boolean for validation without side effects.

Do not put name, channels, body, header, buttons, or components at the request root. name exists on update/response surfaces, not on the current create request.

{
  "category": "UTILITY",
  "language": "en_US",
  "definition": {
    "header": null,
    "body": {
      "multiChannel": {
        "type": "body",
        "template": "Hi {{0:variable}}, order {{1:variable}} has shipped.",
        "variables": [
          {
            "id": 0,
            "name": "customerName",
            "type": "variable",
            "props": {"sample": "Avery"}
          },
          {
            "id": 1,
            "name": "orderNumber",
            "type": "variable",
            "props": {"sample": "A-1042"}
          }
        ]
      },
      "sms": null,
      "whatsapp": null,
      "rcs": null
    },
    "footer": null,
    "buttons": null,
    "definitionVersion": "1.0",
    "authenticationConfig": null
  },
  "creation_source": "from-api",
  "submit_for_review": false,
  "sandbox": true
}

Use definition.body.multiChannel as the channel-neutral body. sms, whatsapp, and rcs are complete channel overrides, not fragments. Keep each body at or below 1,024 characters.

3. Define variables exactly

Use placeholders such as {{0:variable}}, {{1:link}}, or {{2:media}}. Each placeholder needs one matching definition with:

  • a unique non-negative integer id;
  • a readable name;
  • a matching type;
  • props.sample with realistic review and preview data.

Keep placeholder IDs and variable IDs aligned inside every body override. Never output naked {{1}} placeholders in a Sent request.

4. Add supported buttons

Sent currently recognizes QUICK_REPLY, URL, VOICE_CALL, PHONE_NUMBER, and COPY_CODE. Enforce:

  • 10 buttons total;
  • at most 2 URL buttons;
  • at most 1 voice-call button;
  • at most 1 phone-number button;
  • at most 1 copy-code button;
  • quick replies may use the remaining slots, up to the total of 10.

Buttons use id, type, and props. Labels are at most 25 characters. Require type-specific properties: quickReplyType; urlType and url; countryCode and phoneNumber; or offerCode. Quick replies and calls-to-action may coexist—do not invent an XOR rule.

5. Handle authentication templates

For AUTHENTICATION, use definition.authenticationConfig:

{
  "addSecurityRecommendation": true,
  "codeExpirationMinutes": 10
}

Expiration is 1–90 minutes. Keep authentication content to the verification purpose, use one code variable and the supported copy-code action, and do not add marketing language, unrelated links, media, or promotional buttons.

6. Validate before submission

Run:

python scripts/lint_waba_template.py template.json

The linter validates the Sent request shape, variables, the 1,024-character limit, channel overrides, every current button type, per-type limits, and authentication configuration. A Meta Cloud API example with components[] must fail with an explicit conversion error.

Use sandbox: true and submit_for_review: false while integrating. When the user is ready for provider review, show the final payload and explain that submission changes external state before proceeding.

7. Track the right lifecycle surface

Sent template resources use the known states DRAFT, PENDING, APPROVED, REJECTED, and PAUSED. Do not claim this is every value the API may ever return.

Template webhooks are WhatsApp approval events. They use field: "templates", omit sub_type and event, and carry the provider status in payload.status:

{
  "field": "templates",
  "timestamp": "2026-08-09T12:00:00Z",
  "payload": {
    "account_id": "00000000-0000-0000-0000-000000000000",
    "template_id": "11111111-1111-1111-1111-111111111111",
    "template_name": "order_update",
    "whatsapp_template_id": "2222222222222222",
    "status": "APPROVED",
    "language": "en_US",
    "category": "UTILITY",
    "channel": "whatsapp",
    "reason": null
  }
}

Common forwarded values include PENDING, APPROVED, REJECTED, and CATEGORY_UPDATED. Meta can also send values such as PAUSED or DISABLED. Persist the raw string, handle known values, and safely surface unknown ones. See references/template-rejection-playbook.md.

Boundaries

Use template-builder-ui for editor architecture and client-side validation UX. Use sent-templates to list, inspect, or delete existing templates through the connected Sent tools. Use waba-embedded-signup for WABA connection. Use rcs-agent-onboarding for current RCS launch capabilities.

Meta Cloud API payloads may appear in references/waba-template-examples.md, but every such example must be clearly labelled non-Sent and must never be passed to the Sent linter as a valid request.

FAQ

What does the waba-template-author skill do?

Writes, classifies, validates, and repairs WhatsApp templates using the Sent v3 template definition contract. Use for utility, marketing, authentication, OTP, Meta review, rejected templates, variables, buttons, channel overrides, or submission-ready Sent payloads.

How do I install waba-template-author?

Run npx skills add https://github.com/sentdm/sent-plugin --skill waba-template-author in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/waba-template-author/ (personal) or .claude/skills/waba-template-author/ (project).

Which AI agents can use waba-template-author?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is waba-template-author safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains waba-template-author?

It is published by sentdm in sentdm/sent-plugin. It has 2,919 recorded installs.

More from sentdm/sent-plugin

View all →

sent

sentdm/sent-plugin

Routes broad or ambiguous Sent requests to the correct MCP-backed operation or specialist skill. Use when the user asks what Sent can do, says "help me with Sent" or "set up messaging," needs several Sent workflows, or has not made the channel, task, or desired operation clear enough to select a more specific skill.

AI & Agents2.9K installs

waba-embedded-signup

sentdm/sent-plugin

Guides WhatsApp Business Account onboarding through Sent, separating dashboard Embedded Signup, organization WABA inheritance, and direct child-profile credentials. Use for WABA connection, Meta signup, profile creation, access-token handling, phone number mapping, completion callbacks, or WhatsApp onboarding failures.

Data & Databases2.9K installs

Analyzes Sent message delivery, webhook, and activity data to explain funnel drop-offs, delivery failures, read-rate gaps, channel fallback, and suspicious performance changes. Use when a user says MDR, delivery report, message activity, webhook event, failed messages, low delivery rate, RCS fallback, WhatsApp read rate, SMS filtering, campaign performance, or asks why messages did not arrive.

rcs-agent-onboarding

sentdm/sent-plugin

Guides current Sent RCS and RBM onboarding, launch evidence, carrier approval, text and suggestion-chip templates, Sender Profile readiness, and safe routing. Use for RCS launch, fallback, pinned-channel tests, or broadcast prevention.

Marketing & SEO2.9K installs

sms-10dlc-registration

sentdm/sent-plugin

Prepares and validates Sent US A2P 10DLC brand and campaign registration through Sender Profiles, including inheritance, all campaign use cases, opt-in evidence, sample-message policy, autoresponses, sandbox validation, TCR status, and rejection remediation.

Marketing & SEO2.9K installs

template-builder-ui

sentdm/sent-plugin

Designs and audits tenant-facing Sent template builders, previews, validation, lifecycle UX, and API payload mapping. Use for template editor forms, variables, channel overrides, WhatsApp review, RCS suggestion chips, authentication templates, and safe submission flows.

Frontend & Design2.9K installs

Popular code quality & workflow skills

View category →

grill-me

mattpocock/skills

A relentless interview to sharpen a plan or design.

Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick.

handoff

mattpocock/skills

Compact the current conversation into a handoff document for another agent to pick up.

domain-modeling

mattpocock/skills

Build and sharpen a project's domain model. Use when discussing codebase terminology, writing or editing a GLOSSARY.md, or recording or editing an ADR.

codebase-design

mattpocock/skills

Shared vocabulary for designing deep modules. Use when the user wants to design or improve a module's interface, find deepening opportunities, decide where a seam goes, make code more testable or AI-navigable, or when another skill needs the deep-module vocabulary.

diagnosing-bugs

mattpocock/skills

Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.