---
title: "Add or edit message template"
description: "Write an SMS, Viber, or Telegram message: its text, merge variables, conditional blocks, and any attachments or buttons the channel supports."
canonical_url: "https://requiply.com/docs/en/guides/automations/message-templates/add-or-edit"
---
# Add or edit message template

> Write an SMS, Viber, or Telegram message: its text, merge variables, conditional blocks, and any attachments or buttons the channel supports.

This page is where you write a message template — the text (and, for Telegram, the attachments and buttons) that workflows send to clients over SMS, Viber, or Telegram.

You reach it from **Settings → Bookings → Message templates** by clicking **Add template**, the empty-state button, or the **edit pencil** on a template card. Workflows also link here through their **Create a template** shortcut.

<warning>

**Admin only.** Non-admins are redirected to the access-denied screen.

</warning>

The form is split in two: the fields on the left, and a sticky **Preview** card on the right that renders the message in a chat bubble using sample booking data.

## Add vs. edit

<table>
<thead>
  <tr>
    <th>
      Mode
    </th>
    
    <th>
      What happens
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Add
      </strong>
    </td>
    
    <td>
      Creates a new template. Saving returns you to the <a href="https://requiply.com/docs/en/guides/automations/message-templates">
        Message templates
      </a>
      
       list — or back to the workflow you came from, when you arrived via <strong>
        Create a template
      </strong>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Edit
      </strong>
    </td>
    
    <td>
      Loads the saved template, shows its name as the page heading, and adds a <strong>
        Delete
      </strong>
      
       action. If the template cannot be loaded, or belongs to another organization, you get an error toast and are sent back to the list.
    </td>
  </tr>
</tbody>
</table>

## Fields

### Name

**Required.** Up to 120 characters. This is what workflow pickers and the client's message log show, so name it after what the message does — *Booking reminder*, *Payment follow-up* — not after the channel.

### Format

**Required**, defaults to **Text**. A three-way picker: **Text**, **Telegram**, **Viber**. The hint under the picker explains what the selected format supports, and the rest of the form changes with it:

<table>
<thead>
  <tr>
    <th>
      Format
    </th>
    
    <th>
      Extra fields shown
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Text
      </strong>
    </td>
    
    <td>
      None — just the message body.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Telegram
      </strong>
    </td>
    
    <td>
      Editor / Markdown toggle, <strong>
        Attach invoice PDF
      </strong>
      
      , <strong>
        Attach documents
      </strong>
      
      , <strong>
        Link buttons
      </strong>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Viber
      </strong>
    </td>
    
    <td>
      Character counter, <strong>
        Image URL
      </strong>
      
      , <strong>
        Action button
      </strong>
      
      .
    </td>
  </tr>
</tbody>
</table>

Attachments and buttons are only saved for the format that supports them: switching a Telegram template to Text before saving drops its attachments and buttons.

### Message text

**Required in practice** — an empty body is simply not sent.

- **Text and Viber** — a plain multi-line box. Viber shows a live character counter against the 1000-character limit, which turns red when you go over.
- **Telegram** — two ways to write the same message, switched with the **Editor / Markdown** toggle:
  - **Editor** — a rich-text toolbar with **bold**, *italic*, underline, strikethrough, link, and code block.
  - **Markdown** — a monospace box where style symbols are converted to Telegram formatting: `**bold**`, `_italic_`, `__underline__`, `~~strikethrough~~`, ``code`` and `[link text](https://...)`.<br />

Switching between the two converts the body, so you can start in the editor and fine-tune in Markdown.

An **Insert variable** dropdown sits above the body and appends the chosen token at the end of the message.

<note>

Telegram supports only a small subset of HTML. Anything the editor produces that Telegram cannot render — headings, lists, images, tables — is stripped when the template is saved and again before sending.

</note>

### Attach invoice PDF *(Telegram only)*

A toggle. When on, Requiply generates the triggering booking's invoice at send time and delivers it as a PDF file after the message. The preview shows it as an `invoice.pdf` chip inside the bubble.

### Attach documents *(Telegram only)*

A multi-select of your [custom export templates](https://requiply.com/docs/en/guides/automations/export-templates). Each selected template is rendered for the triggering booking and sent as its own PDF file — a rental agreement, a handover act, a packing list.

<warning>

Attachments are generated when the message is sent, not when the template is saved. If a document fails to render, Requiply still sends the message text and logs the failure rather than skipping the notification entirely.

</warning>

### Link buttons *(Telegram only)*

Up to **six** buttons, each with a caption and a URL, added with the **+** button and removed with the trash icon. Buttons appear under the message in Telegram and open the link when tapped.

Variables are allowed in both parts, which is what makes them useful — a **Pay now** button pointing at `{{paymentIntegrationLink}}`, or **View booking** pointing at `{{reservationLink}}`. A button whose caption or URL is empty is dropped when saving, and at send time a button is only included if its resolved URL starts with `http://` or `https://`.

### Image URL and Action button *(Viber only)*

- **Image URL** — an optional public image shown above the message text.
- **Action button** — a single caption plus link, shown under the message. Captions are limited by Viber to about 25 Latin or 12 Cyrillic characters. Variables are allowed in the link.

## Variables

Message templates use the **same variable engine** as [email templates](https://requiply.com/docs/en/guides/automations/email-templates#available-variables) and [export templates](https://requiply.com/docs/en/guides/automations/export-templates) — booking, client, and organization tokens such as `{{clientName}}`, `{{bookingStartDateTime}}`, `{{bookingTotal}}`, `{{paymentIntegrationLink}}`, plus every custom field defined on the Client, Booking, or Organization level.

A few are worth calling out for messaging:

<table>
<thead>
  <tr>
    <th>
      Variable
    </th>
    
    <th>
      Replaced with
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        {{telegramConnectLink}}
      </code>
    </td>
    
    <td>
      The client's personal invite link to your Telegram bot (<code>
        https://t.me/yourbot?start=…
      </code>
      
      ). Resolved only when the organization has an active Telegram integration; otherwise it renders as nothing.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{paymentIntegrationLink}}
      </code>
    </td>
    
    <td>
      A payment link for the booking — the usual target for a Telegram or Viber button.
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingItems}}
      </code>
    </td>
    
    <td>
      A numbered list of the booked items, for example <em>
        1. Rode Procaster × 2 — $90.00
      </em>
      
      , with names in bold on Telegram. Each booked <a href="https://requiply.com/docs/en/guides/inventory/bundles">
        bundle
      </a>
      
       adds an unnumbered line at the end, for example <em>
        Podcast duo kit: bundle discount 10% — -$19.20
      </em>
      
      .
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        {{bookingBundleDiscount}}
      </code>
    </td>
    
    <td>
      What the booked bundles save in total, for example <em>
        $19.20
      </em>
      
      . Empty without a bundle, so it works well inside <code>
        {{#if bookingBundleDiscount}}…{{/if}}
      </code>
      
      .
    </td>
  </tr>
</tbody>
</table>

### Conditional blocks

Message bodies support `{{#if variable}}…{{/if}}` blocks, exactly like export templates. The block is kept when the variable has a non-empty value and removed when it does not, and blocks can be nested. Use it for anything optional:

```text
{{#if paymentIntegrationLink}}Pay here: {{paymentIntegrationLink}}{{/if}}
```

Conditionals are resolved in the live preview too, so a block whose variable has no sample value disappears there as well.

## The preview

The right-hand card renders the message as a chat bubble filled with **sample data** — sample booking values, your organization name, email, phone, and currency.

- **Telegram** templates render their formatting; **Text** and **Viber** render as plain text.
- A Viber **Image URL** is shown above the text.
- Attachments appear as file chips (`invoice.pdf`, then one chip per selected document template).
- Buttons appear under the bubble.

## Drafting with AI

Above the body sits a row of AI actions, the same set the email and document editors offer:

<table>
<thead>
  <tr>
    <th>
      Action
    </th>
    
    <th>
      What it does
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Create with Requiply Assistant
      </strong>
    </td>
    
    <td>
      Opens the <a href="https://requiply.com/docs/en/ai/requiply-assistant">
        Requiply Assistant
      </a>
      
       in <strong>
        Message designer
      </strong>
      
       mode, aware of the current format and of the variables available here. Drafts come back as a card with <strong>
        Apply to editor
      </strong>
      
      , which fills in the name and body.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Open prompt in ChatGPT
      </strong>
      
       / <strong>
        Open prompt in Claude
      </strong>
    </td>
    
    <td>
      Opens the external assistant with a prepared prompt.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Copy AI prompt
      </strong>
    </td>
    
    <td>
      Copies that prompt to the clipboard.
    </td>
  </tr>
</tbody>
</table>

The assistant is told which format is selected, so it writes Markdown for Telegram, plain text under 1000 characters for Viber, and the shortest possible text for SMS.

## Saving, cancelling, deleting

- **Save** validates the name and stores the template. A toast confirms *"Template {name} was created/updated"* and you return to the list.
- **Cancel** returns to the list without saving.
- **Delete** (edit mode only) opens a confirmation dialog.

### Deleting a template

Requiply loads every workflow before allowing deletion:

- If **no workflow** uses the template, the dialog asks *"Are you sure you want to delete the template {name}?"* and **Yes** removes it.
- If **any workflow** uses it, the dialog switches to *"The template {name} is used by these workflows. Point them to another template before deleting:"* and lists them. The confirm button stays disabled until you repoint or delete those workflows.

## Common scenarios

### A booking reminder for every channel

Keep the format on **Text**, write two or three short lines with `{{clientName}}` and `{{bookingStartDateTime}}`, and save. The template is now selectable on any channel.

### A Telegram message with the contract attached

Switch the format to **Telegram**, write the message in the editor, select your rental agreement under **Attach documents**, and add a **Sign** button. The client gets the message and the rendered agreement as a PDF in the same chat.

### Translating an existing template

Open the template, click **Create with Requiply Assistant**, and use the **Translate into Ukrainian** starter. The assistant returns the full name and body with every token preserved; **Apply to editor**, review, and save.

## Tips and cautions

<note>

**Tip:** Keep messenger copy short. Telegram cuts messages at 4096 characters and Viber at 1000 — Requiply truncates rather than failing, but a wall of text in a chat bubble is rarely read anyway.

</note>

<warning>

**Heads up:** A **Telegram** template can only be used on the Telegram channel, and a **Viber** template only on Viber channels. If a workflow's channel picker shows no templates, the format is the usual reason.

</warning>

<warning>

**Heads up:** Buttons and attachments are silently dropped on channels that cannot carry them, so a template that relies on a button to convey the call to action should not be used as a fallback for SMS.

</warning>


## Sitemap

See the full [sitemap](https://requiply.com/docs/sitemap.md) for all pages.
