Liquid Tags Setup Guide

A step-by-step guide to writing your first Liquid-enabled campaign in Netcore CE. Covers App Push Notifications and WhatsApp.

📘

Prerequisites

  • Liquid Tags must be enabled for your workspace. Contact [email protected] to activate it. Existing campaigns are not affected.
  • Liquid Tags applies only to newly created campaigns and journeys.

Attributes on your user profiles. Liquid Tags reads from the same user attributes you already use for segmentation. At minimum, first_name and one custom attribute (like loyalty_tier or city) will get you through this guide.

  • Two or three test user profiles with different attribute values, so you can preview how the message renders for different customers.
  • For WhatsApp: Liquid maps into the template's positional variables ({{1}}, {{2}}). It does not create new templates on the fly.
  • For APN: An app configured for push notifications, with active tokens.

To learn how Liquid Tags work and how to use them effectively refer here.

Set up Liquid Tags in App Push Notification

Liquid Tags can be used in campaigns or Journey. To use a liquid tags in a campaign start by creating a template. Follow the steps below to do so.

  1. On the Netcore CE dashboard, navigate to CREATE > Create template > App Push.
  2. Set up your template by giving below details.
    Field NameDescriptionSample Value
    Template NameName of the template that you are creatingLiquidtagtest
    Select OS typeSelect between Android or iOS or both.Android , iOS
    Add TagsAdd the tag for the template. You can select from the existing or create a new one.AppPushTest
  3. Click NEXT to continue, then select the layout of the template. Refer here for layout selection in App Push.
  4. On the layout setup page, start by setting up the template content. This is where Liquid Tags is available. Each field is evaluated independently.

Set up App Push Template

The APN template editor accept Liquid in the following fields:

FieldWhat it does
TitleThe headline shown on the device
DescriptionThe main notification text
Media URLThe image shown in the rich notification
Button: Deep LinkWhere the app opens when the user taps the notification
Icon URLThe small icon shown alongside the notification
Summary TextA one-line summary shown under the description on Android

Title

In Title field and click Add personalization text and select the personalization payload between

  • USER ATTRIBUTE
  • User Activity Payload
  • Business Activity Payload

Personlization of Title with Liquid Tags

APN title with fallback Liquid
Hi {{ first_name | default: "there" }}, your offer is ready

Output

  • {{ first_name }} is the Liquid tag. It reads the user's first name from their profile.

  • | default: "there" is a fallback. If a user doesn't have a first name on file, the message renders as "Hi there, your offer is ready" instead of "Hi , your offer is ready".

The editor validates Liquid syntax as you type. If the format of the liquid tag is incorrect like a missing bracket, an unknown attribute, the tag wont be accepted.

Description with Conditional Logic

In Description field and click Add personalization text and select the personalization payload.

Tier-based offer Liquid
{% if loyalty_tier == "Gold" %}
20% off on your next order. Code: GOLD20
{% elsif loyalty_tier == "Silver" %}

10% off this week. Code: SILVER10
{% else %}

Free shipping on your next order, no minimum.
{% endif %}

Output

  • This shows a different message depending on the user's loyalty_tier attribute.
  • Gold members see one offer, Silver members see another, and everyone else sees the default free-shipping line.

Personalize Image and Deep Link

If you want each tier to see a different banner image and land on a different in-app screen, add Liquid to the Image URL and Deep Link fields:

Dynamic image & deep link Liquid
Image URL: https://cdn.brand.com/push/{{ loyalty_tier | downcase | default: "member" }}.jpg
Deep Link: app://offers/{{ loyalty_tier | downcase | default: "member" }}

Liquid Output

  • A gold member sees gold.jpg and lands on the Gold offers screen.
  • A user with no tier sees member.jpg and lands on the general member screen.

If {{ loyalty_tier }} is missing and you have not set a default, the URL will resolve to https://cdn.brand.com/push/.jpg a broken image.

  • Before you schedule, it is recommended to run Personalised Preview from the top-right of the editor and check the message renders correctly.
  • If it looks right for all three, send yourself a test push using Send Test to verify the visual on a real device.

Set up Liquid Tags in WhatsApp

📘

Prerequisites

  • WhatsApp messages must use a template that Meta has approved.
  • Approved templates contain positional variables {{1}}, {{2}}, {{3}} and Liquid maps into those.

WhatsApp Template Workflow

  1. When you use Liquid in the Netcore WhatsApp editor like {{ first_name | default: "Customer" }}.
  2. If first name is Ravi, Netcore resolves the Liquid: Ravi.
  3. The resolved string is bound to the template's positional variable: {{1}} = Ravi. Then Meta delivers the final message.
📘

Important Points to Remember

  • Meta never sees the Liquid syntax only the final rendered values. This means your fallbacks matter more here than anywhere else.
  • If a positional variable comes through as empty, Meta rejects the message.

efore you start, ensure the WhatsApp template you want to use is available in Netcore and has been approved by Meta. You can create a template directly in Netcore and submit it for Meta approval from WhatsApp > Create Template, then wait for approval before continuing. Refer here to know more about WhatsApp template creation.

Follow the step below to use liquid tags in a WhatsApp Template

  1. Create a new template in Netcore and submit it for Meta's approval.
  2. Once approved, to use the template in a campaign, navigate to WhatsApp template section and select the approved template and click edit.

Note: the number of positional variables in the body, header, and buttons. You need to map Liquid into each of these.

In the template editor shows each positional variable as a mapping field. This is where Liquid goes.

Liquid Tag Query

The Meta approved template body reads:

Hi {{1}}, your order #{{2}} has been confirmed. Expected delivery: {{3}}.

The editor will show an Add variable option, one per variable. You can click this option and enter the Liquid code within the variable section.

VariableWhat to enter
{{1}}{{ first_name | default: "Customer" }}
{{2}}{{ payload.order_id }}
{{3}}{{ payload.delivery_date | date: "%d %B" }}

Setting up variables for liquid tags in WhatsApp

Guard Critical Variables

  1. For any variable that Meta cannot accept as empty like order IDs, delivery dates, policy numbers, add a guard at the top of the campaign so the user is skipped cleanly if the data is missing.

In the guard field at the top of the campaign editor (or the first line of the body variable, depending on your workspace setup), enter:

{% if payload.order_id == blank or payload.delivery_date == blank %}
  {% abort_message "Order or delivery data missing" %}
{% endif %}

If either value is missing when the campaign runs, the user is skipped and the reason is logged in the Skipped Users report. Meta never sees a broken message.

⚠️

When to use abort_message vs default

Use default for cosmetic fields (first name, product name) — the message is still useful with a generic substitute. Use abort_message for functional fields (order ID, policy number, delivery date) — the message is misleading without the real value.

  1. Map Liquid for Headers or Buttons

If your template has a header image or a CTA button with a dynamic URL, Liquid works there too.

Header media URL:

Dynamic header media URL Liquid
https://cdn.brand.com/whatsapp/{{ recommended_category | default: "default" }}.jpg

Button URL Parameter:

Button URL with encoding Liquid
https://brand.com/track?id={{ payload.order_id | url_encode }}

The url_encode filter is important on button URLs. Special characters in an unencoded value will break the link.

  1. Cap Variable Length

Meta enforces a per-variable character limit. Long fallbacks or Content Fetch responses can push your output over the limit and fail delivery. Use truncate on any variable that could contain long text:

{{ payload.product_name | truncate: 40 }}
  1. Check Personalised Preview for the rendered output. Send a test to a real WhatsApp number on your account, since only a live test confirms that Meta accepts the resolved variables.

Common Use Cases

Three ready-to-use snippets that cover the campaigns most teams run first.

  1. Greet by name with a safe fallback

Works in APN Title and Body, and in WhatsApp body variables.

Pattern 1 · Greet by name with fallback Liquid
Hi {{ first_name | default: "there" }}, your weekend pick is in.
  1. Tier-based offer in a single campaign

Works in APN Body and WhatsApp body variables.

Pattern 2 · Tier-based offer Liquid
{% if loyalty_tier == "Gold" %}
Your 20% Gold discount is live. Code: GOLD20
{% elsif loyalty_tier == "Silver" %}

10% off this week for Silver members.
{% else %}

Free shipping on your next order, no minimum.
{% endif %}
  1. Skip the user if critical data is missing

Works at the top of any campaign to protect against broken sends.

Pattern 3 · Skip on missing data Liquid
{% if payload.order_id == blank %}
  {% abort_message "Missing order_id" %}
{% endif %}

Your order {{ payload.order_id }} ships tomorrow.

Checklist

Run through these before scheduling any Liquid-enabled campaign:

  • Every user attribute has a default. Every {{ variable }} used in Title, Body, URLs, or WhatsApp variables should have a fallback, unless it's guarded with abort_message.
  • Preview renders correctly for at least three sample users. Include one user with missing data.
  • For APN: rendered Title and Body fit within iOS and Android character limits (~178 and ~65 characters respectively).
  • For WhatsApp: every positional variable has a Liquid mapping, and any variable that could be empty is guarded.
  • Test send received on your device. Both channels support test sends.