WhatsApp templates

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.

Create a 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.
Note

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.

Copy
Copied
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;
}

Listing templates

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.

Copy
Copied
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;
  }
}