# Message content

## Message content

This flow allows you to create your own message in Postman using an editor and can be used by both admin portal and API users.

{% hint style="info" %}
For API users who do not want to manage your message templates within Postman, click [here](https://postman-v2.guides.gov.sg/postman-v2-admin-portal-for-api-users/create-message#api-users-who-do-not-want-to-manage-your-message-templates-within-postman) for more information.
{% endhint %}

### **Message parameters (variables)**

You can create multiple `{{variables}}` when typing out your message content. You can then input the values of each `{{variable}}`when you send the message from the admin portal or via API.

<figure><img src="/files/t13HXzy6DYwOsZuvHGeU" alt=""><figcaption></figcaption></figure>

Variables have to fulfil the following in order to be successfully created

* Can only contain lowercase letters, numbers and `_`
* Must start with a lowercase letter
* If multiple languages are selected, the same variables must be present in all `language` tabs.
* Characters are within the GSM-7 character set. See section below on unsupported characters for more info.

### Additional notes to message content

#### **Unsupported characters**

{% hint style="warning" %}
It is recommended to NOT paste message content into Postman from another editor/MS word/Outlook etc., as this may convert characters into unsupported (non-GSM-7) characters. Please type the message content directly into Postman.
{% endhint %}

#### Postman message segment calculator

You may make use of [Postman's message segment calculator](https://message-segment-calculator.postman.gov.sg/) to

* identify unsupported characters within your message content
* identify non GSM characters within your message content
* check the number of message segments

#### This is what happens if you include unsupported characters in your messages:

1. unsupported characters changes the message encoding and therefore, **significantly increases the number of message segments** per SMS.
2. besides cost, long messages with multiple segments will jam the send queue, affecting even the campaigns of other agencies besides your own.
3. Reliability of sending messages cannot be guaranteed beyond 7 message segments per SMS, a limitation imposed by telcos. Hence, we advise you to keep your messages below 7 segments.

**Blocking unsupported characters at the UI and API layers \[English language only]**

{% hint style="danger" %}
Messages containing avoidable unsupported characters **will be blocked** from sending. **Please use the** [**message segment calculator**](https://message-segment-calculator.postman.gov.sg/) **to check your message before sending.**
{% endhint %}

Message content containing unsupported characters will be blocked from sending.&#x20;

1. On the UI:

Campaign templates that contain unsupported characters cannot be created on the UI/Postman admin portal. This blocking has been implemented since June 2024.

2. On the API:

If your message content is created only at the API layer, we will implement blocking on the Postman production environment from **5 May 2025.** This blocking will be available on the Postman test environment from **17 February 2025.**&#x20;

Details have been sent to you via email on 7 February 2025, and also available on the policy guide [here](https://docs.developer.tech.gov.sg/docs/postman-sgdp-guide/advisory_implementing_blocking_for_expensive_and_avoidable_characters_on_the_API_layer).

Error message if your message contains unsupported characters at the API layer:

```
{
	"error": {
		"code": "parameter_invalid",
		"message": "Parameter values cannot contain avoidable expensive characters. Please refer to the guide (https://postman-v2.guides.gov.sg) to learn more.",
		"type": "domain_error",
		"id": "8758298681140894082"
	}
}
```

#### Trailing white spaces in variables

Note that the content within your variables should not start nor end with a space, as this will trigger an error where your message will not be created (400 Bad Request).

eg. "Please report to    *<mark style="background-color:purple;">Clinic A</mark>*  ."&#x20;

In this example, contents in the variable are coloured, and the trailing spaces at the start/end of the variable content are highlighted in blue. The additional spaces will trigger an error where your message will not be created in Postman.&#x20;

### Possible replacements to unsupported characters

{% hint style="warning" %}
Note that this unsupported character list below is not exhaustive. Please use the [message segment calculator ](https://message-segment-calculator.postman.gov.sg/)to check your message for unsupported characters.
{% endhint %}

<table><thead><tr><th width="199">Excluded/unsupported Characters</th><th width="182">Description</th><th>Possible Replacements that Postman supports</th><th data-hidden>Unsupported Unicode Character(s)</th></tr></thead><tbody><tr><td><code>|</code> </td><td>vertical line and variants</td><td>I (uppercase i)</td><td>U+FF5C<br>U+23B8<br>U+23B9<br>U+23D0<br>U+239C<br>U+239F<br>U+2223<br>U+20D3<br>U+20D2</td></tr><tr><td><code>€</code></td><td>euro</td><td><code>EUR</code></td><td>U+20AC</td></tr><tr><td><code>{</code></td><td>left curly bracket and variants</td><td><code>(</code></td><td>U+2774<br>U+FE5B<br>U+FF5B</td></tr><tr><td><code>}</code></td><td>right curly bracket and variants</td><td><code>)</code></td><td>U+2775<br>U+FE5C<br>U+FF5D</td></tr><tr><td><code>[</code></td><td>left square bracket</td><td><code>(</code></td><td>U+FF3B</td></tr><tr><td><code>]</code></td><td>right square bracket</td><td><code>)</code></td><td>U+FF3D</td></tr><tr><td><code>~</code></td><td>tilde and variants</td><td><code>-</code></td><td>U+02DC<br>U+02F7<br>U+0303<br>U+0330<br>U+0334<br>U+223C<br>U+FF5E</td></tr><tr><td><code>\</code></td><td>backslash and variants</td><td><code>'</code></td><td>U+29F9<br>U+29F5<br>U+20E5<br>U+FE68<br>U+FF3C</td></tr><tr><td><code>`</code>  </td><td>backtick (note that this is not an apostrophe <code>'</code> . You can find it to the left of the "1" on your keyboard) and variants</td><td><code>"</code></td><td>U+0060<br>U+02CB<br>U+0314<br>U+FE11<br>U+02BD<br>U+201B<br>U+0314<br>U+FE11</td></tr><tr><td><code>‘</code></td><td>acute accent and variants</td><td><code>'</code></td><td>U+2018<br>U+2019<br>U+02BB<br>U+02C8<br>U+02BC<br>U+02B9<br>U+00B4<br>U+02CA<br>U+0313<br>U+FE10</td></tr><tr><td><code>“</code></td><td>double prime quotation mark and variants</td><td><code>"</code></td><td>U+301E<br>U+02BA<br>U+201F</td></tr><tr><td><code>”</code></td><td>reversed double prime quotation mark and variants</td><td><code>"</code></td><td>U+301D<br>U+02EE</td></tr><tr><td><code>¬</code></td><td>logical negation</td><td><code>-</code></td><td>U+00AC</td></tr><tr><td><code>«</code></td><td>left-pointing double angle quotation mark</td><td><code>"</code></td><td>U+00AB</td></tr><tr><td><code>»</code></td><td>right-pointing double angle quotation mark</td><td><code>"</code></td><td>U+00BB</td></tr><tr><td>❝ or ❛</td><td>heavy double/single turned comma quotation mark ornament</td><td><code>"</code></td><td>U+275D<br>U+275B</td></tr><tr><td>❞ or ❜</td><td>heavy double/single comma quotation mark ornament</td><td><code>"</code></td><td>U+275E<br>U+275C</td></tr><tr><td><code>÷</code></td><td>division sign</td><td><code>/</code></td><td>U+00F7</td></tr><tr><td>¼, ½</td><td>vulgar fractions and variants</td><td>1/4, 1/2 etc.</td><td>U+00BC<br>U+00BD<br>U+00BE</td></tr><tr><td>•</td><td>bullet point</td><td><code>-</code></td><td>U+2022</td></tr><tr><td>⊛, ✢, ✣, ✤, ✥, ✺, ❃, ⧆ etc</td><td>asterisk and variants</td><td><code>*</code></td><td>U+204E<br>U+2217<br>U+229B<br>U+2722<br>U+2723<br>U+2724<br>U+2725<br>U+2731<br>U+2732<br>U+2733<br>U+273A<br>U+273B<br>U+273C<br>U+273D<br>U+2743<br>U+2749<br>U+274A<br>U+274B<br>U+29C6<br>U+FE61<br>U+FF0A</td></tr></tbody></table>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://postman-v2.guides.gov.sg/postman-v2-general-user-guide-mop/create-campaign/message-content.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
