Skip to main content

Templates

A template holds the entire flow of messages sent to the subscriber. This is where all the different channels are tied together under a single entity.

Let's explore the different parts of a notification template

Global template metadata

This will contain general information regarding the notification itself. Let's explore the different aspects of it.

Notification name

The name will be used to identify the notification template when triggering it. A slugified version of the name will be generated after the notification was created. For example a notification template with the name of "Test Notification" will be converted to "test-notification" as the trigger key.

Notification Group

Used to group multiple notification templates to a single group, currently only used behind the scenes for organisational purposes. But in the upcoming subscriber preferences management will be used to group multiple notifications for the subscriber.

Template steps

The templates steps are used to organization the different messages in a particular flow. You can add messages for multiple channels and in the upcoming workflow editor release you will be able to configure custom flows that including actions like: Delay, Digest and other conditional steps.

Messages

A message is particularly tied to a specific channel and will create the content template associated with its channel.

For email channel you can either use our basic visual editor or a fully custom code with handlebars variables.

Variable usage

To use custom payload variables passed to the template you can use the {{curly}} syntax for example:

 novu.trigger('template-name', {
payload: {
name: 'Hello',
customObject: {
world: 'World'
}
}
});

Can be accessed in a template directly:

{{name}}! This is our {{customObject.world}} 

Iteration

To iterate over an array passed to the trigger endpoint you can use the following syntax

 novu.trigger('template-name', {
payload: {
people: [{
name: 'Person 1 Name'
}, {
name: 'Person 2 Name'
}]
}
});
<ul>
{{#each people}}
<li>{{name}}</li>
{{/each}}
</ul>

Conditional

To render a specific block conditionally you can use the #if

<div class="entry">
{{#if enabledFeature}}
<h1>You can use superpowers now</h1>
{{/if}}
</div>

Trigger

After a notification template will be created a trigger key will be automatically generated for it. To use the trigger you can install the server side sdk with:

  npm install @novu/node

To use the API you first need to get a Novu API Key. You can get it from the Settings page in the admin panel.

import { Novu } from '@novu/node';

const novu = new Novu(process.env.NOVU_API_KEY);

await novu.trigger('<REPLACE_WITH_EVENT_NAME_FROM_ADMIN_PANEL>',
{
to: {
subscriberId: '<USER_IDENTIFIER>',
email: 'test@email.com',
firstName: 'John',
lastName: 'Doe',
},
payload: {
customVariables: 'Test',
organization: {
logo: 'https://evilcorp.com/logo.png',
},
},
}
);