DLT Registration
Text SMS
WhatsApp
Hello Contact Center
More
Add ons and Plug ins
Resellers

What is Handlebars and How to Use It in MSG91?

#


Personalize Emails with Handlebars


Handlebars is a templating language that lets you create dynamic email content using expressions inside double curly braces {{ }}.

In MSG91, you can use Handlebars to:

  • Insert variables like customer name, order ID, or any other data.

  • Show or hide blocks of content based on simple conditions.

  • Loop through lists such as items in an order.

This document shows what is supported in MSG91’s Handlebars implementation and how to use it safely when creating templates.


#

1. What Handlebars features are available in MSG91?

MSG91 supports the core Handlebars helpers:

#

Variables

#

Conditions (if / else)

  • {{#if isPremium}} … {{/if}}

  • {{#if isPremium}} … {{else}} … {{/if}}

#

Negative condition (unless)

  • {{#unless hasOrdered}} … {{/unless}}

#

Loops (each)

  • {{#each order.items}} … {{/each}}

#

Root context (advanced use)

  • {{@root.supportPhone}} — access a top-level variable from inside a nested block.


#

1.1 Helpers that are NOT available

These helpers are not supported in MSG91 and will cause errors such as “Missing helper”:

  • Logical helpers: and, or, {{#and}}, {{#or}}

  • Comparison helpers: greaterThan, lessThan, gt, lt, equals, notEquals

  • Utility helpers: length, subtract, and any other custom helper not added by MSG91

Important:
To ensure your templates work, use only:

  • if

  • else

  • unless

  • each

And send simple boolean flags from your backend.


#

2. Common patterns for building templates

These reusable patterns work with MSG91’s supported Handlebars features.


#

2.1 Simple show/hide with if and else

Use this when you want different text for different users.

Template

{{#if isPremium}}
  <p>Thanks for being a premium user! Enjoy your exclusive benefits.</p>
{{else}}
  <p>Upgrade to premium to unlock more benefits.</p>
{{/if}}

Sample data

{
  "isPremium": true
}

#

2.2 Negative condition using unless

Use this when you want to show a reminder only if something has not happened.

Template

{{#unless hasOrdered}}
  <p>You haven’t placed an order yet. Use code WELCOME10 to get 10% off!</p>
{{/unless}}

Sample data

{
  "hasOrdered": false
}

#

2.3 “AND” condition (A and B) using nested if

Handlebars does not support “and”, so we use nested conditions.

Template

<p>
Hello {{name}}!
{{#if hasFoodPreference}}
  {{#if hasDrinkPreference}}
    Thank you for letting us know your dining preferences.
  {{/if}}
{{/if}}
 We look forward to sending you more delicious recipes.
</p>

Sample data

{
  "name": "Ben",
  "hasFoodPreference": true,
  "hasDrinkPreference": true
}

#

2.4 “OR” condition (A or B) using a boolean flag

Compute OR in your application.

Template

<p>
Hello {{name}}!
{{#if hasOutdoorInterest}}
  We think you might enjoy a map of trails in your area.
{{else}}
  We’d love to know more about the outdoor activities you enjoy.
{{/if}}
 Have a great day.
</p>

Sample data

{
  "name": "Ben",
  "isRunner": true,
  "isCyclist": false,
  "hasOutdoorInterest": true
}

#

2.5 Comparison via boolean flags

For example: “balance above ₹1,00,000” or “items in cart”.

High balance example

{{#if user.isHighBalance}}
  <p>Alert: Your account balance exceeds ₹1,00,000.</p>
{{/if}}

Sample data

{
  "user": {
    "balance": 125000,
    "isHighBalance": true
  }
}

Cart example

<p>
Hello {{name}}!
{{#if hasCartItems}}
  You have items left in your cart. Continue checkout anytime.
{{else}}
  Thanks for browsing our site.
{{/if}}
</p>

Sample data

{
  "name": "Ben",
  "hasCartItems": true
}

#

2.6 Looping with each

Template

<ol>
  {{#each user.orderHistory}}
    <li>You ordered: {{this.item}} on {{this.date}}</li>
  {{/each}}
</ol>

Sample data

{
  "user": {
    "orderHistory": [
      { "date": "2025-02-01", "item": "NIKE Air Force" },
      { "date": "2025-05-01", "item": "Air Jordans" },
      { "date": "2025-07-01", "item": "Converse All Stars" }
    ]
  }
}

#

3. Quick cheat sheet

Need

Template pattern

Data you must send

Show content for premium users

{{#if isPremium}} … {{/if}}

"isPremium": true/false

Reminder if no order

{{#unless hasOrdered}} … {{/unless}}

"hasOrdered": true/false

A AND B

Nested {{#if}}

Two booleans

A OR B

Single {{#if flag}}

One OR-boolean

Compare threshold

{{#if someFlag}}

Precomputed boolean

List items

{{#each items}}

Array

Access root variable

{{@root.xyz}}

Root variable

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>MSG91 Handlebars Combined Test</title>
  </head>
  <body>

    <!-- 2.1 Simple show/hide with if / else -->
    <h2>Premium Section</h2>
    {{#if isPremium}}
      <p>Thanks for being a premium user! Enjoy your exclusive benefits.</p>
    {{else}}
      <p>Upgrade to premium to unlock more benefits.</p>
    {{/if}}

    <hr />

    <!-- 2.2 Negative condition with unless -->
    <h2>Order Reminder</h2>
    {{#unless hasOrdered}}
      <p>You haven’t placed an order yet. Use code <strong>WELCOME10</strong> to get 10% off your first purchase!</p>
    {{/unless}}

    <hr />

    <!-- 2.3 AND condition with nested if -->
    <h2>Dining Preferences (AND condition)</h2>
    <p>
      Hello {{name}}!
      {{#if hasFoodPreference}}
        {{#if hasDrinkPreference}}
          Thank you for letting us know your dining preferences.
        {{/if}}
      {{/if}}
      We look forward to sending you more delicious recipes.
    </p>

    <hr />

    <!-- 2.4 OR condition with boolean flag -->
    <h2>Outdoor Interest (OR flag)</h2>
    <p>
      Hello {{name}}!
      {{#if hasOutdoorInterest}}
        We think you might enjoy a map of trails in your area.
      {{else}}
        We’d love to know more about the outdoor activities you enjoy.
      {{/if}}
      Have a great day.
    </p>

    <hr />

    <!-- 2.5 Comparison via boolean flags: high balance -->
    <h2>High Balance Alert</h2>
    {{#if user.isHighBalance}}
      <p>Alert: Your account balance exceeds ₹1,00,000. Consider investing to grow your savings.</p>
    {{/if}}

    <!-- 2.5 Comparison via boolean flags: cart items -->
    <h2>Cart Reminder</h2>
    <p>
      Hello {{name}}!
      {{#if hasCartItems}}
        It looks like you still have some items in your shopping cart.
        Sign back in to continue checking out at any time.
      {{else}}
        Thanks for browsing our site. We hope you'll come back soon.
      {{/if}}
    </p>

    <hr />

    <!-- 2.6 Looping over lists with each -->
    <h2>Order History</h2>
    <ol>
      {{#each user.orderHistory}}
        <li>You ordered: {{this.item}} on: {{this.date}}</li>
      {{/each}}
    </ol>

    <hr />

    <!-- Cheat sheet: generic items list -->
    <h2>Generic Items List (cheat sheet pattern)</h2>
    <ul>
      {{#each items}}
        <li>{{this}}</li>
      {{/each}}
    </ul>

    <!-- Cheat sheet: root context example -->
    <p>
      For help, contact us at: {{@root.supportPhone}}
    </p>

  </body>
</html>
{
  "isPremium": true,
  "hasOrdered": false,

  "name": "Bhaskar",

  "hasFoodPreference": true,
  "hasDrinkPreference": true,

  "isRunner": true,
  "isCyclist": false,
  "hasOutdoorInterest": true,

  "hasCartItems": true,
  "cartItems": [
    "raft",
    "water bottle",
    "sleeping bag"
  ],

  "user": {
    "balance": 125000,
    "isHighBalance": true,
    "orderHistory": [
      { "date": "2025-02-01", "item": "NIKE Air Force" },
      { "date": "2025-05-01", "item": "Air Jordans" },
      { "date": "2025-07-01", "item": "Converse All Stars" }
    ]
  },

  "items": [
    "Item A",
    "Item B",
    "Item C"
  ],

  "supportPhone": "+91-9876543210"
}
#

4. Do’s and Don’ts

#

Do:

  • Keep logic simple (if, else, unless, each)

  • Compute complex logic in backend

  • Test with sample JSON

  • Use booleans like isHighBalance, hasItems, etc.

#

Don’t:

  • Don’t use unsupported helpers (or, and, greaterThan, equals, subtract, etc.)

  • Don’t put business logic inside templates

  • Don’t reference variables you don’t send


#

5. Why Use Handlebars in MSG91?

  • Multiple emails flying everywhere — hard to track
    → Always accurate and personalized using live data.

  • Credits wasted for separate email content
    → Save credits — one dynamic template handles all orders.

  • Templates too rigid
    → Handlebars enables dynamic emails at scale.

Compatible with automated workflows and transactional emails.


#

6. How to Create a Template in MSG91

#

1. Log in to your MSG91 Email account

Open your MSG91 dashboard.

#

2. Go to Templates → Create Template

Navigate to Email → Templates → Create Template.

#

3. Choose “Start from Scratch” or Use AI

  • Build a template manually

  • Or generate via AI, then enhance with Handlebars

#

4. Insert Handlebars in the Email Body

Use Handlebars directly in your HTML editor to show dynamic content.

#

5. Test Your Template

Use Preview or provide sample JSON.

#

6. Submit and Launch

Submit for approval → Once approved, use in campaigns or workflows.


#

7. Need Help?

If you’re unsure about your data or template logic, we’re here to help.

Email: support@msg91.com
Live Chat: Available in MSG91 Dashboard


On this page
Personalize Emails with Handlebars
1. What Handlebars features are available in MSG91?
Variables
Conditions (if / else)
Negative condition (unless)
Loops (each)
Root context (advanced use)
1.1 Helpers that are NOT available
2. Common patterns for building templates
2.1 Simple show/hide with if and else
2.2 Negative condition using unless
2.3 “AND” condition (A and B) using nested if
2.4 “OR” condition (A or B) using a boolean flag
2.5 Comparison via boolean flags
2.6 Looping with each
3. Quick cheat sheet
4. Do’s and Don’ts
Do:
Don’t:
5. Why Use Handlebars in MSG91?
6. How to Create a Template in MSG91
1. Log in to your MSG91 Email account
2. Go to Templates → Create Template
3. Choose “Start from Scratch” or Use AI
4. Insert Handlebars in the Email Body
5. Test Your Template
6. Submit and Launch
7. Need Help?