알림톡은 카카오톡을 쓰는 사람에게만 도달합니다. 카카오톡을 안 쓰거나, 채널을 차단했거나, 전달에 실패하면 메시지가 사라집니다. **주문 확인이나 배송 안내처럼 반드시 도달해야 하는 알림**이라면 문자로 대체하도록 켜 두세요.

## 필요한 것

대체 발송에는 **문자 발신번호가 추가로** 필요합니다. 알림톡만 보낼 때는 `kakaoSenderKey` 만 있으면 되지만, 대체 발송을 켜면 `senderKey`(문자 발신번호)도 등록돼 있어야 합니다.

## 켜는 법

세 개를 함께 넘깁니다. **하나라도 빠지면 대체 발송이 조용히 실패합니다.**

| 파라미터 | 값 |
| --- | --- |
| `replaceSms` | `"Y"` |
| `smsSubject` | 문자 제목 (LMS 로 나갈 때 사용) |
| `smsContent` | 문자 본문 |

### Node.js / TypeScript

```typescript
await sendgo.alimtalk.send({
  templateCode: 'DELIVERY_START_001',
  replaceSms:  'Y',
  smsSubject:  '[배송 시작 안내]',
  smsContent:  '주문하신 상품이 출고되었습니다.\n송장번호: #{var2}',
  contacts: [{
    contact: '01012345678',
    var1: 'ORD-001',
    var2: '1234567890',
  }],
});
```

### Python

```python
client.alimtalk.send(
    template_code="DELIVERY_START_001",
    replace_sms="Y",
    sms_subject="[배송 시작 안내]",
    sms_content="주문하신 상품이 출고되었습니다.\n송장번호: #{var2}",
    contacts=[{"contact": "01012345678", "var1": "ORD-001", "var2": "1234567890"}],
)
```

### PHP · Laravel

```php
<?php

$sendgo->alimtalk->send([
    'templateCode' => 'DELIVERY_START_001',
    'replaceSms'   => 'Y',
    'smsSubject'   => '[배송 시작 안내]',
    'smsContent'   => "주문하신 상품이 출고되었습니다.\n송장번호: #{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": "[배송 시작 안내]",
    "smsContent": "주문하신 상품이 출고되었습니다.\n송장번호: #{var2}",
    "kakaoSenderKey": "your_kakao_sender_key",
    "senderKey": "your_sms_sender_key",
    "contacts": [{ "contact": "01012345678", "var1": "ORD-001", "var2": "1234567890" }]
  }'
```

## 대체 본문에서 변수 쓰기

`smsContent` 안의 `#{var1}` 형태 자리표시자는 각 수신자의 값으로 치환됩니다. 알림톡 템플릿과 같은 변수를 그대로 쓸 수 있어서, 두 본문을 따로 관리할 필요가 없습니다.

```text
알림톡 템플릿: [#{var2}] 주문 #{var1} 이 출고되었습니다.
smsContent:    [#{var2}] 주문 #{var1} 출고. 송장 #{var3}
```

다만 문자에는 **바이트 제한**이 적용됩니다. 90바이트를 넘으면 LMS 로 나가고 요금이 달라집니다.

## 흔한 실수

- **`smsContent` 를 빠뜨림.** `replaceSms: 'Y'` 만 켜고 본문을 안 넣으면 대체할 내용이 없어서 아무것도 나가지 않습니다. 알림톡도 실패했는데 문자도 안 가는 최악의 조합이라, 실제로 가장 자주 나오는 사고입니다.
- **문자 발신번호 미등록.** 알림톡만 테스트할 때는 문제가 없다가, 실제 대체가 발생하는 순간 실패합니다.
- **비용 예측 누락.** 문자는 알림톡보다 단가가 높습니다. 대체 비율이 10%만 돼도 예상 비용이 눈에 띄게 올라갑니다.
- **광고성 메시지에 대체 발송.** 알림톡은 정보성만 나가므로 이 조합이 나올 일이 거의 없지만, 브랜드메시지에서 대체 발송을 켤 때는 문자 쪽에 `(광고)` 표기와 수신거부 안내가 필요합니다.

## 다음 단계

- [SMS · LMS · MMS 보내기](/ko/cookbook/send-sms)
- [오류 코드와 재시도 전략](/ko/cookbook/error-handling)