Templates are pre-approved message formats required for initiating WhatsApp conversations outside the 24-hour window.
Create Template
const result = await client.templates.create({
name: "order_confirmation",
language: "en",
body: "Hi {{1}}, your order #{{2}} is confirmed!",
whatsappCategory: "UTILITY",
variables: ["customer_name", "order_id"],
});
console.log(result.id); // tpl_xxx
console.log(result.status); // draft, pending, approved, rejected
List Templates
const result = await client.templates.list({});
for (const template of result.items) {
console.log(template.id, template.name, template.status);
}
// With pagination
const result = await client.templates.list({
limit: 50,
cursor: "cursor_xxx",
});
Get Template
const result = await client.templates.get({
templateId: "tpl_abc123",
});
console.log(result.name);
console.log(result.body);
console.log(result.status);
Delete Template
await client.templates.delete({
templateId: "tpl_abc123",
});
Submit Template for Approval
After creating a template, you need to submit it to Meta for approval before you can use it:
const result = await client.templates.submit({
templateId: "tpl_abc123",
senderId: "sender_xyz",
category: "UTILITY", // Optional if already set on template
});
console.log(result.status); // "pending"
The senderId must reference a sender that has a WhatsApp Business Account configured. Templates are submitted to the WABA associated with that sender.
Template Categories
| Category | Use Case |
|---|
UTILITY | Order updates, account alerts, appointment reminders |
MARKETING | Promotions, offers, newsletters |
AUTHENTICATION | OTP codes, verification messages |
Using Templates in Messages
const result = await client.messages.send({
to: "+14155551234",
messageType: "template",
content: {
templateId: "tpl_abc123",
templateVariables: {
"1": "John",
"2": "ORD-12345",
},
},
});