알림톡 실패 시 SMS 대체 발송 설정하기

알림톡 실패 시 SMS 대체 발송 설정하기

replaceSms 로 카카오 알림톡이 도달하지 못했을 때 자동으로 문자를 보내는 방법. 필수 파라미터와 흔한 실수를 정리했습니다.

POST /api/v2/notices/send

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

필요한 것

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

켜는 법

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

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

Node.js / TypeScript

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

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

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

REST 직접 호출

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} 형태 자리표시자는 각 수신자의 값으로 치환됩니다. 알림톡 템플릿과 같은 변수를 그대로 쓸 수 있어서, 두 본문을 따로 관리할 필요가 없습니다.

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

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

흔한 실수

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

다음 단계

자주 묻는 질문

SMS 대체 발송은 언제 동작하나요?
수신자가 카카오톡을 쓰지 않거나, 채널을 차단했거나, 알림톡이 전달되지 못한 경우입니다. 이때 replaceSms 가 Y 면 지정한 문자 본문이 대신 발송됩니다.
replaceSms 를 Y 로 했는데 아무것도 안 갔습니다.
smsContent 를 함께 넘기지 않았을 가능성이 큽니다. 대체 발송 본문이 비어 있으면 보낼 내용이 없어 조용히 아무것도 나가지 않습니다. smsSubject 와 smsContent, 그리고 문자 발신번호(senderKey)를 모두 채우세요.
대체 발송 요금은 어떻게 되나요?
실제로 나간 채널의 요금이 부과됩니다. 알림톡이 성공하면 알림톡 요금만, 문자로 대체되면 문자 요금이 부과됩니다. 문자가 더 비싸므로 대체 비율이 높으면 비용이 예상보다 올라갑니다.
대체 발송 본문에도 템플릿 변수를 쓸 수 있나요?
쓸 수 있습니다. smsContent 안의 #{var1} 같은 자리표시자가 각 수신자의 값으로 치환됩니다. 다만 문자에는 알림톡 템플릿의 길이 제한이 아니라 SMS/LMS 바이트 제한이 적용됩니다.

이 문서에서 쓰는 패키지

관련 문서