> For the complete documentation index, see [llms.txt](https://developers-apps-in-toss.toss.im/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developers-apps-in-toss.toss.im/guide/en/marketing/smart-message.md).

# Smart Sending

### What Smart Send is

Smart Send is a push and notification sending tool that automatically optimizes delivery by considering both the target audience (segment) and the send time. It is not just a one-time send; AI automatically runs campaigns by predicting the two things below.

* Highly engaged users: We predict users who are highly engaged with the service by using the pCTR (predicted click-through rate) of the set segment.
* High-click send time: We predict the time slots when clicks are more likely to happen by using user patterns.

#### How it works

**1) Test send**

This is not a partner company's test, but an automatic send carried out internally for AI training.

* We predict highly engaged users based on pCTR.
* Based on the prediction results, we look for the optimal users and send time.
* The test send can run for up to 7 days.
* The main send starts as soon as either 25 clicks or 2,500 sends are reached.

**2) Main send**

We automatically optimize and send the campaign based on the test results.

#### The concepts of push and notification

* Push: An OS notification you receive even when the app is not open. The app name and logo are shown together.
* Notification: A message inside the app that you can check by tapping the bell icon at the top right of the Toss app.

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FyL7gYaNc3oBWxYwBlK80%2Fimage.png?alt=media&#x26;token=cdc5c74c-6bf1-43be-af7a-819c360f57d1" alt=""><figcaption></figcaption></figure>

#### Message types

Depending on the message content, you can choose and send either a promotional message or a functional message.

* **Promotional message:** This is a marketing message such as a discount, event, or new product announcement.
* **Functional message:** This is a message that delivers essential information arising during the service use process, such as orders, payments, shipping, or post registration.

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FcpHX5nMpjuRogLzdWFVV%2Fimage.png?alt=media&#x26;token=eea3a942-0de4-471f-8d2c-f0f83ee68260" alt=""><figcaption></figcaption></figure>

{% hint style="warning" %}
If it contains marketing elements such as purchase prompts, service usage prompts, benefit notices, or retention purposes, it cannot be sent as a functional message.&#x20;

If you're struggling with the wording [UX writing guide](https://developers-apps-in-toss.toss.im/design/consumer-ux-guide#ux)and the message writing guide below.
{% endhint %}

***

### The benefits of Smart Send

* You can automatically deliver messages users truly need.
* You can use it appropriately for your purpose, from functional notices to marketing messages.
* You can make sure users don't miss important information even if they don't open the mini app.
* You can naturally continue the service usage flow with messages sent at the right time.
* You can keep improving the message content based on sending results.

#### Please note

* To send push and notification messages, the message template wording must be reviewed. (Promotional messages are reviewed automatically.)
* If you write the push content, it will be automatically reflected in the notification message.
* Up to 100,000 sends per workspace (business) are allowed.
* If a functional message contains promotional content such as service prompts, benefit notices, or retention, it must be sent as a promotional message.
* To send a functional message, you must obtain notification consent from the user in advance for that purpose.
* We recommend providing a feature that lets users withdraw notification reception consent and clearly explaining how to do so.

<details>

<summary>You can directly control notification reception in Toss app → All tab → Settings button → Notifications → Service notifications.</summary>

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FeR5t52wqNrftZBu4DHj7%2Fimage.png?alt=media&#x26;token=d8668c28-2385-4e27-a0b0-cc9d845c935c" alt=""><figcaption></figcaption></figure>

</details>

***

### Set it up in Console

How to access: App in Toss console → Select workspace → Select mini app → Select 'Smart Send' from the left menu

#### 1. Promotional campaign

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2F0UStKoLELQWf1dLL4AZR%2Fimage.png?alt=media&#x26;token=36115944-da3c-49cd-a8d3-716f7a40c203" alt=""><figcaption></figcaption></figure>

Promotional campaigns are made up of groups with two purposes.

* Encourage new users: Prompt first-time visits from users who have not yet used the mini app. The default target is all users who have not used the mini app. You can narrow the target further by adding conditions.
* Encourage repeat visits: Prompt users whose usage has recently declined to return. The default target is all users whose usage has recently declined. You can narrow the target further by adding conditions.

**Creative**

* You can register up to 2 creatives (option A, option B) per group.
* Promotional campaigns cannot use dynamic variables (e.g. `#{name}`, `#{amount}`values that are replaced at send time).
* Please refer to the message writing guide for detailed instructions.

**Screen URL to open on click**

* Please enter the URL to move to when the push or notification is tapped.
* You cannot set different URLs for each creative in one campaign. If you want to use a different URL, you need to create a new campaign.
* Please make sure the URL actually opens properly.

**Send time**

Choose when to start sending.

* Send immediately after registration: Sending starts as soon as the review is approved.
* Set a send period: Specify a start date and end date. To keep sending without an end date, you can select 'No end date'.

**Target audience**

You can adjust the sending scope by adding conditions to the default target.

* Users to include: Send to users who satisfy all set conditions.
* Users to exclude: Exclude users who satisfy all set conditions from the sending target.
* **However, for encourage repeat visits sends, sending is only possible if there are at least 100 users who used the service in the 30 days before the send start date.**

#### 2. Functional campaign

A functional campaign is a message that delivers information directly necessary for service use. It must be information requested by the recipient or an essential message for service fulfillment. If it contains promotional content such as service usage prompts, benefit notices, or retention, it must be sent as a promotional campaign.

<details>

<summary>Allowed examples</summary>

* Transaction-related messages such as payment completed, refund, or points credited
* Service progress messages such as shipping started, delivery completed, or reservation confirmed
* Usage period/status alerts such as upcoming subscription payment or upcoming service expiration

</details>

<details>

<summary><mark style="color:$danger;">Disallowed examples</mark></summary>

* "How about this product?" "Discounts only today." — promotional/advertising purpose
* "Recommended products for previous buyers" — additional marketing information
* "Join the event and get benefits." — event promotion message

</details>

**2-1. Send directly via API**

You can send at the desired time from the partner company's server.

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2Fk7om6S42RmDrgXYPQD4M%2Fimage.png?alt=media&#x26;token=0cda12d0-d35e-4ebb-94bb-c2f09af72cd2" alt=""><figcaption></figcaption></figure>

You can send at the desired time from the partner company's server. Detailed specifications for the send API can be found in the 'Sending Functional Messages' document.

* Campaign title: Please name it so it clearly shows what purpose the campaign is sent for.
* Title: Write in noun form within 7 characters (including spaces). If you use a '\~to do' form, it may be misunderstood as being intended to prompt user action.
* Content: Write within 25 characters (including spaces) using the '\~yo.' style. Variables are counted as 2 characters. When sending via API, variables must be implemented by you.
* Move-to URL: Please set the page to open when the push or notification is tapped. Please make sure it opens properly.
* Notification consent text: If the wording review determines that a notification consent text is required and rejects it, please be sure to compose the notification consent text and request a re-review.

**2-2. Request Toss to send it**

You can choose between one-time send and recurring send.

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FPeKBN4f5ZWaW1WjVxkqG%2Fimage.png?alt=media&#x26;token=6c2fbb20-8879-42ba-8a42-533443d39684" alt=""><figcaption></figcaption></figure>

Without a server, you can choose between one-time send and recurring send.

* Campaign title: Please name it so it clearly shows what purpose the campaign is sent for.
* Title: Write in noun form within 7 characters (including spaces).
* Content: Write within 25 characters (including spaces) using the '\~yo.' style. When requesting Toss to send it, only the name variable can be used. Variables are counted as 2 characters.
* Move-to URL: Please set the page to open when the push or notification is tapped. Please make sure it opens properly.
* Notification consent text: If you request Toss to send the message, a notification consent text is required.
* Send type: You can choose between one-time send and recurring send.
  * One-time send: Send only once by specifying a particular date and time.
  * Recurring send: You can set a repeating send interval. (Daily: send every day at the specified time / Weekly: select the desired day and time to send) Set a start date and end date, and if you select 'No end date', it will keep sending until you stop it manually.

**Notification consent text**

To send a functional message, a notification consent text may be required. A notification consent text is guidance provided so that users can agree to receive notifications during the service usage process. If you are obtaining user consent to receive notifications at a specific time, you must use a notification consent text.

<details>

<summary>When notification consent text is required</summary>

Restock alert subscription, event start alert subscription, price change alert subscription, reservation open alert subscription

</details>

<details>

<summary>When notification consent text is not required</summary>

Payment completed, shipping started, delivery completed, refund completed, information change notice, terms change notice

</details>

If the message requires a notification consent text but you do not register one, you cannot save the functional message template.

<figure><img src="https://3177177630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8pQgXiR5QAzduV54W8Om%2Fuploads%2FZiL8M4U1TrIslpw4RTU2%2Fimage.png?alt=media&#x26;token=8210c1a0-cccb-4b03-9880-895ab0992ba9" alt=""><figcaption></figcaption></figure>

**Set notification consent text**

* Notification consent text name: Please name it so that you can tell in what situation this consent text is used in the mini app service.
* Notification send time: Please write when it will be sent upon consent.
  * If sending via API: Please write when it will be sent. (e.g. when the price of a saved item drops, when a daily weather update is subscribed to, when a disabled feature in the service is reactivated, etc.)
  * If requesting Toss to send it: Please clearly state the send time along with when it is sent. (e.g. when telling the weather for the next day every Tuesday at 5:00 PM, etc.)

<details>

<summary>What is included in the notification consent text</summary>

* Service name and service description (automatically reflected from mini app info)
* Notification send time (trigger conditions entered when creating the template)
* Notification consent withdrawal path
* Customer center contact (automatically reflected from mini app info)

</details>

**How notifications are sent**

* Specific condition met: Please enter what condition must be met for the notification to be sent. (e.g. price drop on a saved item, reactivation of a disabled feature, etc.)
* Fixed day and time: Please enter the send frequency and type. (e.g. daily weather updates, attendance notifications, etc.)

To display the notification reception consent UI to users in the mini app [Please refer to the notification consent text request document](https://developers-apps-in-toss.toss.im/documentation/common/growth/smart-message#id-4.-requestnotificationagreement).

{% hint style="info" %}
templateCode when calling the notification consent text

The `templateCode`used when calling the notification consent text in the mini app is the send code for the functional message linked to that notification consent text. You can check it in Console → Smart Send → 'Functional' tab.
{% endhint %}

***

### Message writing guide

Please write as if you are introducing my app to every Toss user for the first time. Users receive this push within the context of Toss as a financial app. Please write it so that it feels like Toss and is naturally understandable.

#### Basic rules

* All push and notification messages should be written in the informal polite style. The body should be written as full sentences ('\~yo.') and end with a period. This is a rule to keep a consistent voice and tone.
* Use periods only in the body. Do not use periods in the title.
* Write the title in the '\~to do' form or noun form. (Functional messages should use noun form.)
* The format of writing 'Toss + service name' cannot be used.
* The character limit is 7 characters for the title and 25 characters for the body (including spaces). This is the 기준 so that text does not get cut off even when enlarged. (On Android, text enlarged to 1.3x or more accounts for 24% of the total.)
* Please be sure to check spelling and spacing.

#### 1) The title and content should connect naturally.

<details>

<summary><mark style="color:$danger;">Bad</mark> example</summary>

* \[With tteokbokki?] Take a MBTI psychology test on Toss. → The title is about food, but the content is about MBTI, so they are not connected
* \[Overdraft account] You can use it for IPO subscriptions. → It's unclear whether you're telling them to create an account or announcing a subscription.

</details>

<details>

<summary>Good example</summary>

* \[Puzzle Challenge] Solve puzzles on Toss and get points.
* \[Attendance gift] If you attend the block game for 3 days, we'll give you 20 won.
* \[Money luck arrived] Check your fortune for free on Toss.

</details>

#### 2) The title should be a complete word or sentence by itself.

<details>

<summary><mark style="color:$danger;">Bad</mark> example</summary>

* \[As a sentence card] Choose from 39 card types on Toss.
* \[Rather than short-form] Choose from 39 card types on Toss.

</details>

<details>

<summary>Good example</summary>

* \[Sentence card] Choose a quote and select the design you want on Toss.
* \[Block game] Take on a game that's so fun you lose track of time.

</details>

#### 3) For game services, make sure to say 'game'.

Users should know before clicking that it is a game. If you only use the service name or in-game terms, they may not know.

* <mark style="color:$danger;">Bad</mark> Example: \[Competitive puzzle] Solve puzzles and decorate my home.
* Good example: \[Puzzle game] Solve puzzles and decorate my home.

#### 4) The expressions below cannot be used.

**Slang, memes, or buzzwords that only some people can understand**

<details>

<summary><mark style="color:$danger;">Bad</mark> example</summary>

* \[Emblem appears] This is newly released equipment content today.
* \[Athleisure hot spot] If you pay with Toss at J.ximix, you'll get a 4,000 won discount.

</details>

<details>

<summary>Good example</summary>

* \[New item] There is a new game item released today.
* \[J.ximix discount] Pay with Toss Pay and get up to a 4,000 won discount.

</details>

**Specific person's name**

* <mark style="color:$danger;">Bad</mark> Example: \[My ideal type] Is it Jang Wonyoung or Ahn Yujin?
* Good example: \[Ideal Type World Cup] Choose the idol closest to your ideal type on Toss.

**Exaggerated promotional expressions**

* Promotional expressions: Right now!, Super special price!, Best ever, Urgent!, Amazing
* Creating anxiety: You'll regret it if you miss this, You can't do it if you don't act now
* Excessive symbols: exclamation marks, emojis

**Provocative material**

Avoid sensitive topics such as politics, crime, and death.

Do not create anxiety. Do not use wording that implies users will regret missing out or words that make users excessively anxious. Just calmly convey the situation.

<details>

<summary><mark style="color:$danger;">Bad</mark> example</summary>

* \[Affair index] Try it for fun on Toss.
* \[Today's tip] If the husband dies during pregnancy, what is the inheritance order?
* \[Still haven't tried it?] Is it okay to always go over budget?
* \[The expiration date is about to end] Are you really going to miss the benefit?

</details>

**Omitting spaces**

Do not omit spaces just to fit the character limit.

* <mark style="color:$danger;">Bad</mark> Example: \[Mytypingaccuracyis] Try typing a sentence with your eyes closed
* Good example: \[My typing skill] Try the typing test with your eyes closed on Toss.

**Awkward expression**

It is grammatically correct, but it sounds unnatural. You can tell immediately if you read it out loud.

* <mark style="color:$danger;">Bad</mark> Example: \[My own novel] Choose another genre too. Toss is free. → It feels awkward because a particle is missing. It reads as if using the 'Toss' service is free.
* Good example: \[My own novel] You can make it for free on Toss.

#### 5) Please refer to this when using game genres.

* Genres derived from specific game names cannot be used. (e.g. roguelike, metroidvania, soulslike, vampire-survivor-like, etc.)
* Use genre names that users can understand intuitively.

| Genre                        | Do                            |
| ---------------------------- | ----------------------------- |
| **Idle RPG**                 | **Idle game or RPG game**     |
| **Casual MMORPG**            | **Casual game**               |
| **Open-world action**        | **Action game**               |
| **Three-match puzzle**       | **Puzzle game**               |
| **Turn-based strategy RPG**  | **Strategy game or RPG game** |
| **2D side-scrolling action** | **Action game**               |

<details>

<summary>Do not combine or subdivide genres.</summary>

<table data-search="false"><thead><tr><th>Genre</th><th>Meaning</th><th>Alternative direction</th></tr></thead><tbody><tr><td><strong>MMORPG</strong></td><td>Massively Multiplayer Online RPG</td><td><strong>RPG game</strong></td></tr><tr><td><strong>ARPG</strong></td><td>Action RPG</td><td><strong>RPG game or action game</strong></td></tr><tr><td><strong>SRPG</strong></td><td>Simulation/Strategy RPG</td><td><strong>RPG game or strategy game</strong></td></tr><tr><td><strong>JRPG</strong></td><td>Japanese RPG</td><td><strong>Japanese RPG game</strong></td></tr><tr><td><strong>FPS</strong></td><td>First-Person Shooter</td><td><strong>Shooter game</strong></td></tr><tr><td><strong>TPS</strong></td><td>Third-Person Shooter</td><td><strong>Shooter game</strong></td></tr><tr><td><strong>MOBA</strong></td><td>Multiplayer Online Battle Arena</td><td><strong>Strategy game</strong></td></tr><tr><td><strong>RTS</strong></td><td>Real-Time Strategy</td><td><strong>Strategy game</strong></td></tr></tbody></table>

</details>

<details>

<summary>Game-related technical terms cannot be used.</summary>

<table data-search="false"><thead><tr><th>Genre</th><th>Meaning</th><th>Alternative direction</th></tr></thead><tbody><tr><td><strong>Hack and Slash</strong></td><td>Hack and Slash</td><td><strong>Action game</strong></td></tr><tr><td><strong>Deck building</strong></td><td>Deck Building</td><td><strong>Card game</strong></td></tr><tr><td><strong>Auto-battler</strong></td><td>Auto Battler</td><td><strong>Strategy game</strong></td></tr><tr><td><strong>Bullet hell</strong></td><td>Bullet Hell</td><td><strong>Shooter game</strong></td></tr><tr><td><strong>Run and gun</strong></td><td>Run and Gun</td><td><strong>Action game &#x26; sports game</strong></td></tr><tr><td><strong>Hyper-casual</strong></td><td>Hyper Casual</td><td><strong>Casual game</strong></td></tr><tr><td><strong>Sandbox</strong></td><td>Sandbox (game context)</td><td><strong>Simulation game</strong></td></tr></tbody></table>

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://developers-apps-in-toss.toss.im/guide/en/marketing/smart-message.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
