WhatsApp templates can be created for any account that belongs to one or more senders. The template endpoints are the same for both OBO and ES senders. Any template in a project can be used by all senders in the same template.
When creating a template, it needs to have a unique name, a language, and a category. For new template categories, one of the following categories should be used: MARKETING
, OTP
and TRANSACTIONAL
. When listing older templates it is possible that other values are returned and new languages for older templates should use the category of the existing template.
Category | Description |
---|---|
MARKETING | Send promotional offers, product announcements, and more to increase awareness and engagement. |
OTP | Send one-time password codes that allow your customers to securely access their accounts. |
TRANSACTIONAL | Send account updates, order updates, alerts, and more to share important information. |
If setting the status to draft
the template will not be processed. A draft template will be saved and editable until an edit sets the status to submit
.
async function createTemplate() {
const resp = await fetch(
`https://provisioning.api.sinch.com/v1alpha1/projects/${PROJECT_ID}/whatsapp/templates`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization:
'Basic ' +
Buffer.from(ACCESS_KEY + ':' + ACCESS_SECRET).toString('base64'),
},
body: JSON.stringify({
name: 'example_template',
status: 'draft',
category: 'TRANSACTIONAL',
language: 'en',
components: [
{
type: 'BODY',
text: 'Good morning {{1}}, your package has arrived at {{2}}.',
examples: ['Steve'. 'your local post office'],
},
],
}),
}
);
const data = await resp.json();
return data;
}
Use the list templates in a project to see which templates are in progress or can be used for sending templates with through Conversation API.
The list is paginated and will return a nextPageToken
if there are more templates. If only approved templates are needed, for example to show which a user can use to send messages with, a filter can be added.
async function getAllApprovedTemplates(pageToken: string) {
const resp = await fetch(
`https://provisioning.api.sinch.com/v1alpha1/projects/${PROJECT_ID}/whatsapp/templates?pageToken=${pageToken}&templateStatus=APPROVED`,
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization:
'Basic ' +
Buffer.from(ACCESS_KEY + ':' + ACCESS_SECRET).toString('base64'),
},
}
);
let data = await resp.json();
if (data.nextPageToken) {
const nextData = await getAllApprovedTemplates(data.nextPageToken);
return {
...data.templates,
...nextData.templates,
};
} else {
return data.templates;
}
}