Alimtalk is a channel where **the body is reviewed in advance**. However good your code is, nothing sends without an approved template. Alongside [sender number registration](/en/cookbook/sender-number), this is the thing to start first.

## Informational only

The premise of Alimtalk is a message **the recipient is already expecting**.

| Approved | Not approved |
| --- | --- |
| Order and payment confirmation | Sales and discount announcements |
| Delivery status changes | New product launches |
| Booking confirm / change / cancel | Event participation prompts |
| Verification codes | Coupon promotions |
| Payment failure and overdue notices | Repeat-purchase nudges |
| Signup and account closure notices | App install prompts |

Some cases sit on the line. "The item in your cart is almost sold out" reads like a fact but functions as a purchase prompt, so it is treated as promotional.

**If you want to advertise**, use [Brand Message](/en/cookbook/send-brand-message) or an [advertising SMS](/en/cookbook/send-sms) instead. Dressing promotion up as an Alimtalk template gets rejected, and repeated attempts put the channel itself at risk.

## Designing variables

Only the values that change become variables; everything else stays fixed in the body.

```text
[#{var2}] Your order is confirmed.

- Order number: #{var1}
- Total: #{var3}
- Expected delivery: #{var4}

We will let you know when it ships.
```

- `#{var1}` through `#{var8}`, eight maximum
- **Do not make the body entirely variables.** A template that is just `#{var1}` has nothing to review and gets rejected.
- Each slot should always hold the same kind of value. `#{var3}` cannot be an amount in one send and an address in another.
- **Fill every variable the template defines.** Omit one and the recipient sees `#{var4}` literally.

## The registration flow

1. Sendgo console → **Kakao Alimtalk templates** → Register
2. Choose the Kakao sender profile to attach
3. Set a template name and **template code** — the code is the identifier your code uses (`ORDER_CONFIRM_001`)
4. Pick a category that matches the real use (order, delivery, booking, …)
5. Write the body and place the variables
6. Optionally add buttons — add channel, web link, delivery tracking
7. Submit for review

The status must reach **approved** before sending. Calling with a template code still under review returns `INVALID_TEMPLATE_CODE`.

## Rejected wordings and how to fix them

| Rejected | Why | Fix |
| --- | --- | --- |
| `Buy now and get 20% off!` | Promotional | Move it to Brand Message |
| `#{var1}` | Nothing to review | Rewrite with fixed wording plus variables |
| `Hello, valued customer` | Purpose unclear | State what the notification is about |
| `Message us on KakaoTalk` | Drives to an outside channel | Use the official support number or a button |
| `#{var1}, join the event` | Participation prompt = promotional | Move it to Brand Message |

## Editing a template in production

A body change means **re-review**, and editing a live template can block sending until it clears.

Version instead:

```text
ORDER_CONFIRM_001   ← live
ORDER_CONFIRM_002   ← new wording, under review
```

When `002` is approved, switch the template code, watch it for a while, then retire `001`. Keeping the code in configuration means the switch needs no deploy.

```php
<?php

// Configuration, not a literal — then swapping templates needs no release.
'templateCode' => config('sendgo.templates.order_confirm'),
```

## Next

- [Send a Kakao Alimtalk](/en/cookbook/send-alimtalk)
- [Registering a sending number](/en/cookbook/sender-number)