메시지 이해하기
이 페이지는 커뮤니케이션 API의 세부 규격을 보기 전에, 메시지 업무에서 먼저 이해해두면 좋은 핵심 개념을 정리한 안내 페이지입니다.
채널별 규격(SMS/LMS/MMS/RCS/비즈메시지)은 각각 필드가 다르지만, 실제 운영에서는 동보발송, 대체발송(Fallback), 치환메시지, 멱등성 키, 발신 식별코드 같은 공통 개념을 함께 이해해야 안정적으로 연동할 수 있습니다.
아래 항목은 실무에서 자주 묻는 기준을 중심으로 정리되어 있으며, 각 세부 규격 페이지에서 같은 용어를 만났을 때 바로 맥락을 이해할 수 있도록 구성했습니다.
동보발송(여러건 발송)
동보발송은 동일한 메시지를 다수 수신자에게 한 번에 발송하는 방식입니다.
- 요청 단위와 운영 정책에 맞게 분할합니다.
- 수신자 목록은
destinations필드로 전달합니다. - 스팸 방지 정책이나 개별 수신자 상태에 따라 분리 처리합니다.
- 한 번의 요청으로 최대 200개의 수신자 번호를 전달할 수 있습니다.
- 과도하게 빠른 연속 요청은 피하고, 운영 환경에 맞는 요청 간격을 두는 것을 권장합니다.
- 치환메시지를 사용하는 경우 수신자 번호별로 치환값이 각각 적용됩니다.
- 접수 응답도 수신자 번호별 결과로 분리되어 전달됩니다.
동보발송 요청
POST /api/omni
destinations: [{ to: "01000000000" }]
결과: 1건 접수 응답POST /api/omni
destinations: [{ to: "01000000001" }, { to: "01000000002" }, ..., { to: "01000000200" }]
결과: 수신번호별 접수 응답(최대 200건)Fallback 메시지(대체발송)
Fallback은 발송 요청의 messageFlow 순서에 따라 자동 대체 발송을 수행하는 기능입니다.
messageFlow는 Array 형태로 메시지를 순서대로 담습니다.- 앞 순서 메시지가 실패하면 다음 순서 메시지로 자동 전환됩니다.
- 채널별 메시지는
messageFlow안에서 구분되므로 발송 요청 경로는/api/omni로 동일합니다.
Fallback 동작 예시
요청 예시
{
"destinations": [{ "to": "01000000000" }],
"messageFlow": [
{ "alimtalk": { "msgType": "AT", "text": "주문 안내 메시지입니다." } },
{ "sms": { "from": "01000000000", "text": "알림톡 대체 문자입니다." } }
]
}요청 예시
{
"destinations": [{ "to": "01000000000" }],
"messageFlow": [
{ "alimtalk": { "msgType": "AT", "text": "안내 메시지입니다." } },
{ "rcs": { "serviceType": "RCS", "msgType": "RS", "content": { "description": "RCS 대체 메시지입니다." } } },
{ "mms": { "from": "01000000000", "subject": "대체 안내", "text": "RCS 실패 시 LMS 대체 발송입니다." } }
]
}통합 RCS와 안드로이드 RCS
RCS는 크게 통합 RCS와 안드로이드 RCS 규격으로 나뉩니다. 별도 요구가 없다면 iOS와 안드로이드를 함께 지원하는 통합 RCS를 먼저 검토하는 것을 권장합니다.
| 비교 항목 | 통합 RCS | 안드로이드 RCS |
|---|---|---|
| 수신 가능 단말 | 국내 이통사와 RCS로 연동된 단말을 대상으로 합니다. | 안드로이드 채팅+ 지원 단말을 대상으로 합니다. |
| 광고 표기 | 메시지 제목 또는 본문에 직접 표기하며 글자 수에 포함됩니다. | header 필드 설정으로 표기합니다. |
| 무료수신거부 표기 | 메시지 본문 끝에 직접 표기하며 글자 수에 포함됩니다. | footer 필드 설정으로 표기합니다. |
| 복사 허용 여부 | 단말 정책에 따라 복사 기능이 제공됩니다. | 지원 메시지별로 copyAllowed 설정을 사용할 수 있습니다. |
| KISA 안심마크 | 삼성 단말에 한해 표시됩니다. | 삼성 단말에 한해 표시됩니다. |
| 대화방 메뉴 | 삼성 단말을 중심으로 제공되며 제조사 정책에 따라 확대될 수 있습니다. | 지원합니다. |
| 오픈리치카드 | 지원하지 않습니다. | 지원합니다. |
카카오 요청 응답방식(responseMethod)
카카오 비즈메시지는 responseMethod 설정에 따라 발송 요청에 대한 성공 판단 기준이 달라집니다.
Push 방식 (권장)
활성 사용자 조건에 해당하는 경우 ACK 수신 여부를 확인하지 않고 발송 성공으로 처리하는 방식입니다.
- 발송 성공 여부를 빠르게 판단할 수 있어 대체 발송에 따른 메시지 중복 수신 문제를 줄일 수 있습니다.
- 활성 사용자 조건을 만족하지 않는 경우
NoSendAvailableException오류를 결과로 응답합니다.
활성 사용자 조건
- 서버와 연결되어 있는 카카오톡 사용자
- 발송 당일 가입한 사용자를 제외한 최근 7일(168시간) 내에 카카오톡을 사용한 사용자
Polling 방식
메시지 발송 요청을 하고, 결과는 별도로 실제 단말까지 도착하였는지 확인하는 방식입니다.
- 메시지 발송 시스템에서
timeout내에 수신 결과가 도착한 메시지에 대해 성공(MS03) 처리하고, 나머지는 성공불확실(ME09)로 처리합니다. - 이후 발송 결과는 발송 결과 요청으로 일정한 시간 간격으로 요청하여 확인합니다.
timeout은 메시지 발송 요청 시 설정할 수 있으며, 범위는 10초 ~ 86,400초(1일)입니다. 기본값은 180초(3분)입니다.
국제메시지 운영 개념
국제메시지는 국가별 통신사 정책이 크게 다르기 때문에, 국내 문자와 달리 발신자 표기 방식, 메시지 서명, 단말 전달 결과 수집 방식까지 함께 검토해야 합니다.
메시지 서명
해외로 메시지를 전송하는 경우 타 서비스 사칭이나 스팸 메시지를 차단하기 위해, 메시지 내용 안에 전송자의 서비스명이나 회사명을 식별할 수 있는 내용을 반드시 삽입해야 하는 국가가 있습니다. 이를 메시지 서명이라고 하며, 사전 등록이 필요할 수 있습니다.
- 대표적인 예로 중국은
【INFO中国】과 같은 형태의 서명을 문자 내용 맨 앞에 삽입해야 합니다. - 국가/통신사 정책에 따라 서명 형식이 다를 수 있으므로 운영 전에 등록 여부와 삽입 규칙을 확인해야 합니다.
Sender ID
Sender ID는 메시지 발신자 정보로서, 단말기에서 메시지 수신 시 보내는 사람 영역에 표시되는 숫자 또는 문자열입니다.
- 일부 국가/통신사는
15882460과 같은 숫자뿐 아니라Korea같은 문자열 Sender ID도 허용합니다. - 타 서비스 사칭이나 스팸 메시지를 차단하기 위해 기업 또는 서비스 고유 문자열을 해외 통신사에 사전 등록한 뒤 발송해야 하는 국가가 있습니다.
- 대표적인 예로 인도네시아, 인도, 필리핀, 태국 등은 Sender ID 사전 등록 여부가 중요합니다.
- 상세 정보는 영업 담당자를 통해 확인할 수 있으며, 통상 등록에는 2주~4주 정도가 소요됩니다.
DLR(Delivery Report)
DLR은 실제 단말기 전송 결과를 의미합니다.
- 국내 리포트와 개념은 같지만, 국제메시지는 국제 중계사 접수 결과를 기본 리포트로 처리합니다. 이 접수 결과가 과금 기준이 됩니다.
- 요청에 따라 단말 전달 결과(DLR)를 추가로 수신할 수 있습니다.
- 메시지 1건당 기존 리포트(접수 결과)와 DLR(전송 결과)이 각각 1건씩, 총 2건 수집될 수 있습니다.
치환메시지
치환메시지는 메시지 본문/제목에 치환 예약어를 지정하고, 수신자별 값으로 치환해 발송하는 방식입니다.
- 메시지 내용(text) 또는 제목(title) 안에
#{key}형태의 치환 예약어를 지정합니다. - 수신정보(
destinations)의replaceWords에 치환값을 JSON 형태로 입력합니다. - 실제 단말에는
replaceWords값으로 치환된 최종 문장이 전달됩니다.
메시지 내용(text)
안녕하세요 #{name}님,
#{orderName} 주문이 #{status} 상태입니다.
치환 변수(replaceWords)
{
"name": "홍길동",
"orderName": "무선 키보드",
"status": "배송중"
}
최종 단말 메시지
안녕하세요 홍길동님,
무선 키보드 주문이 배송중 상태입니다.
멱등성 키
멱등성 키는 동일 요청의 중복 처리를 방지하기 위한 식별값입니다.
- 멱등성 키 필드:
idempotencyKey - 유효시간 필드:
idempotencyTtl(초) - 네트워크 재시도/타임아웃 상황에서도 같은 키로 재요청하면 중복 발송을 줄일 수 있습니다.
- 업무 단위(주문번호, 인증 트랜잭션 번호) 기반 키 생성을 권장합니다.
최초 발신사업자 식별코드
originCID는 인터넷 문자 전송 시 최초 발신사업자를 특정하기 위해 삽입하는 식별코드이며, 특수한 유형의 부가통신사업자 등록번호(9자리 숫자)를 사용합니다.
- 적용 위치:
messageFlow[].sms.originCID,messageFlow[].mms.originCID - 형식:
length: 9 - 최초 발신사업자가 재판매사업자이면 최초 재판매사업자 등록번호가 수록됩니다.
- 재판매사업자를 통하지 않고 문자중계사로 발송하면 문자중계사 등록번호가 수록됩니다.
예1) 기업 → 재판매사업자1 → 재판매사업자2 → 문자중계사 → 이동통신사
재판매사업자1의 등록번호가 삽입됩니다.
예2) 기업 → 문자중계사 → 이동통신사
문자중계사의 등록번호가 삽입됩니다.