Alimtalk reaches KakaoTalk users only. If someone does not use it, blocked your channel, or delivery fails, the message disappears. For notifications that **must** arrive — order confirmations, delivery updates — turn on fallback.

## What you need

Fallback needs an **SMS sending number on top of the Kakao one**. Alimtalk alone works with just `kakaoSenderKey`, but enabling fallback also requires a registered `senderKey`.

## Turning it on

Three fields together. **Miss one and the fallback fails silently.**

| Field | Value |
| --- | --- |
| `replaceSms` | `"Y"` |
| `smsSubject` | Text subject, used when it goes out as LMS |
| `smsContent` | Text body |

### Node.js / TypeScript

```typescript
await sendgo.alimtalk.send({
  templateCode: 'DELIVERY_START_001',
  replaceSms:  'Y',
  smsSubject:  '[Shipment started]',
  smsContent:  'Your order has shipped.\nTracking: #{var2}',
  contacts: [{
    contact: '01012345678',
    var1: 'ORD-001',
    var2: '1234567890',
  }],
});
```

### Python

```python
client.alimtalk.send(
    template_code="DELIVERY_START_001",
    replace_sms="Y",
    sms_subject="[Shipment started]",
    sms_content="Your order has shipped.\nTracking: #{var2}",
    contacts=[{"contact": "01012345678", "var1": "ORD-001", "var2": "1234567890"}],
)
```

### PHP · Laravel

```php
<?php

$sendgo->alimtalk->send([
    'templateCode' => 'DELIVERY_START_001',
    'replaceSms'   => 'Y',
    'smsSubject'   => '[Shipment started]',
    'smsContent'   => "Your order has shipped.\nTracking: #{var2}",
    'contacts'     => [
        ['contact' => '01012345678', 'var1' => 'ORD-001', 'var2' => '1234567890'],
    ],
]);
```

### REST

```bash
curl -X POST https://sendgo.io/api/v2/notices/send \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "templateCode": "DELIVERY_001",
    "scheduleType": "DIRECTLY",
    "replaceSms": "Y",
    "smsSubject": "[Shipment started]",
    "smsContent": "Your order has shipped.\nTracking: #{var2}",
    "kakaoSenderKey": "your_kakao_sender_key",
    "senderKey": "your_sms_sender_key",
    "contacts": [{ "contact": "01012345678", "var1": "ORD-001", "var2": "1234567890" }]
  }'
```

## Variables in the fallback body

Placeholders like `#{var1}` inside `smsContent` are substituted per recipient, using the same variables as the Alimtalk template. You do not maintain two separate content sets.

```text
Alimtalk template: [#{var2}] Order #{var1} has shipped.
smsContent:        [#{var2}] Order #{var1} shipped. Tracking #{var3}
```

Text messages are subject to **byte limits**, though. Over 90 bytes it goes out as LMS and the price changes.

## Common mistakes

- **Omitting `smsContent`.** Setting `replaceSms: 'Y'` with no body means there is nothing to fall back to, so nothing is sent. The Alimtalk failed *and* no text arrived — the worst combination, and the single most common incident here.
- **Unregistered SMS sending number.** Everything looks fine while you test Alimtalk, then fails the first time a real fallback happens.
- **Unbudgeted cost.** Text costs more than Alimtalk. Even a 10% fallback rate moves the bill visibly.
- **Advertising content.** Alimtalk is informational so this rarely arises, but when enabling fallback on a Brand Message the text side needs the `(광고)` prefix and an opt-out notice.

## Next

- [Send SMS, LMS and MMS](/en/cookbook/send-sms)
- [Error codes and retry strategy](/en/cookbook/error-handling)