ConceptReviewed 2026-09-29

Message templates

The reusable wording of the emails that workflow rules, record-page buttons and campaigns send: a code, a channel, a subject and body with merge fields, an optional rich HTML body and up to five generated-document attachments, rendered against the record that triggered it.

Message templates

A message template is the reusable wording of a message the system sends on your behalf: a subject and a body written once, with merge fields such as {{ contact.first_name }} or {{ entity.payable_amount | inr }} that are filled in from the record the message is about. A workflow rule's Send email action, the manual buttons on record pages and CRM campaigns can all pick a template instead of carrying their own text, so the office reviews the wording in one place and every reminder, acknowledgement or confirmation reads the same.

How it works in NirmaanOne

Where templates live

Templates are kept under Settings > Workflows > Message templates, one list for the whole organization. Seeing the list needs the View permission on Message Templates; adding, changing and deleting need Create, Edit and Delete on the same module. In the default roles the Administrator and the Sales Manager can create and edit templates; most other roles can only view them.

Each template has:

  • Code: capital letters, digits and underscores, up to 50 characters, unique in the organization. A code already in use is refused ("A template with this code already exists (codes are never reused).").
  • Name, an optional Description and a Sort order (the order in pickers).
  • Channel: Email, WhatsApp, SMS or In-App. The channel is fixed once the template is created.
  • Record type: which kind of record the template renders against (an estimate, a demand, a booking, a payment, a term sheet and so on), or Any record. Choosing one lists that record's fields in the Variables reference beside the editor.
  • Subject: required for Email ("Email templates need a subject"); merge fields work here too.
  • Plain-text version (1 to 20 000 characters) and, for Email only, a rich Email body designed in the editor. The HTML is sent with the plain text as its alternative; leave the HTML empty to send plain text alone.
  • Attachments (Email only, up to five): published document templates of the same record type.
  • Active: inactive templates stay on the actions that already use them but are not offered for new ones.

Who sends them

  • A rule's Send email action set to "Use a message template" lists the Active Email templates. The action adds the recipients (up to 20 addresses, merge fields allowed) and may add up to five more document attachments.
  • The manual buttons on record pages (Send payment reminder on a demand, Resend cost sheet on an estimate) are Manual rules whose one action is Send email with a system template.
  • A campaign picks an Email template whose record type is Contact or Any record.

Only Email is delivered today. WhatsApp, SMS and In-App templates can be saved, but the Send WhatsApp and Send SMS actions are "Not available on this server" and the Notify users action carries its own inline title and body, so nothing sends those channels.

Merge fields and filters

Templates use a small, sandboxed template language. Inside {{ … }} you can read:

  • entity.<field>: any field of the record (entity.demand_no, entity.due_date).
  • The record's related rows, which depend on the record type: contact, project, unit, booking, opportunity, tenant, society, tower, milestone and others. The Variables panel lists what each record type offers.
  • organization.name, today (the date the message is rendered) and frontend_url.
  • input.<field> (what the user typed in a manual button's form), event.<key> (details the trigger carries, such as event.days_overdue), changes.<field>.old / .new (for On Update rules) and actions[n].<key> (results of earlier actions in the same run).

{% if … %} … {% endif %} blocks leave optional sentences out, and a field that has no value renders as nothing rather than failing the send. Amounts reach the template as text, so an amount of zero ("0.00") still counts as a value in an {% if … %} test; compare it instead, for example {% if entity.paid_amount | float > 0 %}. Four filters shape values:

Filter What it does 13,00,000 renders as
inr Indian grouping, two decimals, rounded half-up; inr(true) adds the rupee sign 13,00,000.00 / ₹ 13,00,000.00
money two decimals, rounded half-up, international grouping 1,300,000.00
words the amount in words in lakh and crore, paise included when present Rupees Thirteen Lakh Only
date a date as 15 Oct 2026 (or any format you pass) —

The syntax is checked when you save ("subject: … (line 1)" or "body: … (line 3)" names the mistake), and a rendered message is cut off at 20 000 characters.

Preview

The template page renders the saved template against any real record of its type: choose the record, optionally paste an Extra context such as {"input": {"note": "…"}, "event": {"days_overdue": 7}} to stand in for a button's form or an event's details, and press Preview. Unsaved edits must be saved first; a template without a record type asks for one ("Choose an entity to preview the template against.").

Attachments

Each attachment is a document template (Settings > Documents) that must be Published and render the same record type as the message template. Every time the email goes out the document is generated afresh as PDF or Word, filed on the record under its documents with the next number of its series, marked Sent with the recipient addresses, and attached. A template's own attachments are only sent when the rule runs on the same record type; a Send email action can add up to five more of its own.

The six system templates

Every organization starts with six Email templates marked System. Their codes are locked, their wording is yours to edit, and they ship Active:

Code Name Record type Used by
STD_ESTIMATE_SENT Cost sheet sent to buyer Estimate "Estimate sent: email the cost sheet (system)" and the Resend cost sheet button
STD_PAYMENT_REMINDER Payment reminder Demand "Demand overdue: remind the buyer by email (system)" and the Send payment reminder button
STD_BOOKING_WELCOME Booking confirmation Booking "Booking created: welcome mail with allotment letter (system)"
STD_RECEIPT_ACK Receipt acknowledgement Payment "Receipt cleared: acknowledge by email (system)"
STD_BOUNCE_NOTICE Payment returned unpaid Payment "Payment bounced: notify the payer (system)"
STD_MEMBER_OFFER_ISSUED Offer issued to member Termsheet "Member offer issued: email the member (system)"

The customer-facing rules that use them ship switched off so that you review the wording first; the two manual buttons ship on. See System rules and starter templates.

Deleting and changing

  • Used by on the list counts the workflow actions that use a template. While any action uses it, the delete icon is disabled ("Used by workflow actions; remove it from them first"). A template a campaign uses cannot be deleted either ("That conflicts with existing data.").
  • Deleting a template cannot be undone; actions that used it can no longer pick it.
  • Every change to a template is recorded in Settings > Audit log.

When the mail server is not set up

The run still "succeeds": the message is written to the server log instead of being delivered, the run's result notes "MAIL_SERVER is not configured; the message was logged", and any attachments are generated and marked Sent. Ask your administrator before relying on a customer-facing rule.

The point of a template is that the wording is reviewed once and reused everywhere: the same Payment reminder goes out whether someone presses the button today or the overdue rule fires next week, and a change to the text reaches both at once.

Example

Sunrise Developers LLP sells Unit B-1203 in Sunrise Heights, Kandivali West, to Mr Rohan Mehta for a total consideration of ₹1,25,00,000 before GST. The 10% instalment demand DM-2026-27-00042 is dated 30 Sep 2026 and due on 15 Oct 2026:

Line Amount
Instalment (10% of ₹1,25,00,000) ₹12,50,000.00
GST at 5% ₹62,500.00
Demand total ₹13,12,500.00
TDS under section 194-IA, 1% of ₹12,50,000 (the consideration is above ₹50,00,000) ₹12,500.00
Amount payable by the buyer ₹13,00,000.00

On 12 Oct 2026 Priya, the Administrator (in the default roles only an Administrator may start a manual rule), opens the demand, chooses Workflows > Send payment reminder and types in the form's note "Please transfer by NEFT to the collection account." Nothing has been paid yet. The Payment reminder template renders as:

Subject: Payment reminder: demand DM-2026-27-00042 for Unit B-1203

Dear Mr Rohan Mehta,

This is a reminder that demand DM-2026-27-00042 dated 30 Sep 2026 for Unit B-1203, Sunrise Heights is due on 15 Oct 2026.

Amount payable: Rs 13,00,000.00 (received so far: Rs 0.00)

Please transfer by NEFT to the collection account.

Kindly arrange the payment at the earliest and share the transaction details with us. If you have already paid, please ignore this message.

Regards, Sunrise Developers LLP

Three things in the template decided that wording: {{ entity.payable_amount | inr }} printed the payable amount, not the ₹13,12,500 total; the "(received so far …)" clause printed even though nothing is paid, because the standard template tests entity.paid_amount directly and "0.00" counts as a value (edit the template as shown above if you want it left out); and the "was due on … and is overdue by … days" branch stayed out because a manual button carries no event.days_overdue.

The same template sent by the rule "Demand overdue: remind the buyer by email (system)" on 22 Oct 2026, after a payment of ₹5,00,000 cleared on 20 Oct, reads instead: "… was due on 15 Oct 2026 and is overdue by 7 days. Amount payable: Rs 13,00,000.00 (received so far: Rs 5,00,000.00)", and has no note line, because that run has an event but no input.

Had the template used {{ entity.payable_amount | money }} the amount would print as 1,300,000.00; with | inr(true) as ₹ 13,00,000.00; and {{ entity.payable_amount | words }} gives "Rupees Thirteen Lakh Only".

Where you see it

Related

  • Message templatesScreen

    The list of your organization's message templates: the wording that Send email actions and campaigns use, with filters and the actions to create, open or delete one.

  • New message templateScreen

    Write a message template on its own page: code, name, channel, record type, subject, the designed email body and its plain-text version, attachments, and the merge-field reference.

  • Message templateScreen

    One message template's page: change its wording, attachments and settings, and preview it filled in for a real record.

  • New ruleScreen

    Build an automation rule on a full page: which records it watches, what starts it, which records qualify, and the ordered actions it carries out.

  • RuleScreen

    One automation rule's page: read or change its basics, trigger, conditions and actions, test it against a record, clone or delete it, and switch a system rule on or off.

  • RulesScreen

    Every automation rule in your organization, system and custom, with filters, the switch that turns each rule on or off, and shortcuts to edit, test, clone, see the run history of or delete a rule.

  • RunsScreen

    Every time a rule ran: what started it, which record it worked on, how each action went, and the panel from which an errored run is retried.

  • New campaignScreen

    Create an email campaign: name it, choose the email template, tag a project, set the reply-to address and define who receives the mail, with a live count of the audience.

  • Campaign (editor: <campaign name>)Screen

    Finish and send one email campaign: build the recipient list from the audience, preview the merged email, send a test, send now or schedule, cancel, and read the per-recipient log afterwards.

  • Document templatesScreen

    The list of your organization's document templates (demand letters, offer letters, termsheets, agreements, allotment letters, receipts, cost sheets), with filters and the actions to create, duplicate, open or delete one.

  • Document templateScreen

    The template designer: write a template's wording with merge fields, set its letterhead, title and page layout, preview it against a real record, and publish, retire or restore its versions.

  • Generated documentsScreen

    The organization-wide log of every document generated from a template or uploaded against a record, where you preview, download, email, void or delete them.

  • DemandScreen

    One demand: the installments it bills, its amounts with GST, the expected TDS and what is payable in money, the receipts and TDS credits against it and how the money is placed on the charges, with the actions to edit, issue, cancel or delete it.

  • EstimateScreen

    One estimate version: its charges by group, payment plan, approvals, unit and parking hold and validity, with the lifecycle actions to send, finalize, request approval, approve or reject, extend, cancel, version and book.

  • Audit logScreen

    The organization-wide change log: every create, change and delete, every sign-in (including refused ones), sign-out and downloaded file, with who did it, when, from where and what changed.

  • Workflow rules, conditions, actions and the rule ownerConcept

    What a workflow rule is made of (one kind of record, one trigger, conditions, ordered actions, an optional chained event), how conditions and action settings are evaluated, how versions, tests and clones work, and why every rule has an owner whose permissions its runs use.

  • System rules and starter templatesConcept

    The 53 automation rules, six email templates and six draft document templates every organization starts with: which ship switched on, why the customer-facing ones ship off, what is locked, and how to switch, clone or customise them.

  • Workflow runs and the outboxConcept

    How a change becomes automation: the outbox event written with the change, the pick-up that hands it to the engine, one run per listening rule with a recorded result per action, the statuses each passes through, and how Errored runs are retried and Failed events requeued.

  • Triggers and event typesConcept

    The five ways a workflow rule starts (On Create, On Update, On Event, Scheduled, Manual), the catalogue of system event types the app raises, the daily due-date events for instalments and overdue demands, how recurrences are counted, and custom event types that chain rules.

  • Campaign audiences, recipient lists and unsubscribesConcept

    A campaign's audience is a saved filter over contacts or leads; the recipient list is the snapshot built from it, one row per contact, skipping those without a valid email or on the organization's unsubscribe list, which the link in every mail adds to.

  • Demands, demand runs and the GST splitConcept

    A demand is the bill raised on a buyer's installments (or a member's offer charges): numbered by financial year, billing the full total with the buyer's expected 194-IA TDS shown apart, posted as a sales voucher with GST split as CGST + SGST or IGST by place of supply; a demand run raises one demand per buyer for everything due by a date.

  • TDS under section 194-IAConcept

    When a flat's consideration reaches the threshold, the buyer withholds 1% of every installment and deposits it with the Income Tax department instead of paying it to the developer; NirmaanOne bills the buyer the full total, shows the expected TDS and what is payable in money, and books the withheld tax only when the buyer's deposit (Form 16B / 26QB) is recorded as a TDS credit.