Templates are pre-approved message formats required for initiating WhatsApp conversations outside the 24-hour window.
Create Template
result = client.templates.create(
name: "order_confirmation",
language: "en",
body: "Hi {{1}}, your order #{{2}} is confirmed!",
whatsapp_category: "UTILITY",
variables: ["customer_name", "order_id"]
)
puts result.id # tpl_xxx
puts result.status # draft, pending, approved, rejected
List Templates
result = client.templates.list
result.items.each do |template|
puts "#{template.id} #{template.name} #{template.status}"
end
# With pagination
result = client.templates.list(
limit: 50,
cursor: "cursor_xxx"
)
Get Template
result = client.templates.get(template_id: "tpl_abc123")
puts result.name
puts result.body
puts result.status
Delete Template
client.templates.delete(template_id: "tpl_abc123")
Submit Template for Approval
After creating a template, you need to submit it to Meta for approval before you can use it:
result = client.templates.submit(
template_id: "tpl_abc123",
sender_id: "sender_xyz",
category: "UTILITY" # Optional if already set on template
)
puts result.status # "pending"
The sender_id 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
result = client.messages.send(
to: "+14155551234",
message_type: "template",
content: {
"template_id" => "tpl_abc123",
"template_variables" => {
"1" => "John",
"2" => "ORD-12345"
}
}
)