광고성 문자·메시지 규칙 — (광고) 표기, 수신거부, 야간 발송 금지
정보통신망법상 광고성 메시지에 지켜야 하는 규칙과 코드에서 강제하는 방법. 21시~08시 발송 금지, 무료 수신거부, 사전 동의.
홍보·마케팅 메시지에는 정보통신망법이 적용됩니다. 지키지 않으면 과태료 대상이고, 반복되면 발신 채널 자체가 제재를 받습니다.
정보성 메시지(주문 확인, 배송 안내, 인증번호)에는 적용되지 않습니다. 알림톡은 정보성만 승인되므로 실질적으로 이 규칙은 광고 문자와 브랜드메시지의 문제입니다.
지켜야 할 네 가지
1. 사전 수신 동의
수신자에게 미리 동의를 받은 경우에만 보낼 수 있습니다. 회원가입 시 마케팅 수신 동의 체크박스가 그것입니다. 동의는 기본 선택 상태로 두면 안 되고, 동의 시점과 내역을 보관해야 합니다.
2. (광고) 표기
본문 맨 앞에 붙입니다.
(광고)[브랜드명] 가을 세일 최대 50%
...
LMS 처럼 제목이 있으면 제목 맨 앞에 넣습니다. 중간이나 끝에 넣으면 인정되지 않습니다.
3. 무료 수신거부 방법
수신자가 비용을 부담하지 않고 거부할 수 있어야 합니다. 080 무료 수신거부 번호가 일반적입니다.
(광고)[브랜드명] 가을 세일 최대 50%
자세히 보기 https://sendgo.io/s/k7Rm2xQ
무료수신거부 080-000-0000
4. 야간 발송 금지 (21:00 ~ 08:00)
21시부터 익일 08시까지 광고성 메시지를 보낼 수 없습니다. 이 시간대에 보내려면 야간 수신에 대한 별도 동의를 따로 받아야 합니다.
샌드고는 이 구간의 광고성 발송 요청을 검증합니다. 다만 코드 쪽에서도 막아 두는 편이 안전합니다 — 배치 작업이 예정보다 늦게 실행돼 21시를 넘기는 일이 흔합니다.
코드에서 강제하기
발송 시각 가드
<?php
use Carbon\CarbonImmutable;
final class AdSendWindow
{
// 광고성 메시지는 21시~익일 08시에 나갈 수 없다.
public static function isAllowed(?CarbonImmutable $at = null): bool
{
$at ??= CarbonImmutable::now('Asia/Seoul');
return $at->hour >= 8 && $at->hour < 21;
}
/** 제한 구간이면 다음 허용 시각(익일 08:00)으로 미룬다. */
public static function nextAllowed(CarbonImmutable $at): CarbonImmutable
{
if (self::isAllowed($at)) {
return $at;
}
return $at->hour >= 21
? $at->addDay()->setTime(8, 0)
: $at->setTime(8, 0);
}
}
// 서버 시간대에 의존하지 않고 KST 기준으로 판단한다.
function kstHour(date = new Date()): number {
return Number(
new Intl.DateTimeFormat('en-GB', {
timeZone: 'Asia/Seoul', hour: '2-digit', hour12: false,
}).format(date),
);
}
const canSendAd = () => {
const h = kstHour();
return h >= 8 && h < 21;
};
from datetime import datetime
from zoneinfo import ZoneInfo
def can_send_ad(at: datetime | None = None) -> bool:
at = at or datetime.now(ZoneInfo("Asia/Seoul"))
return 8 <= at.hour < 21
본문 검증
<?php
function assertAdFormat(string $content, string $optOut): void
{
if (! str_starts_with($content, '(광고)')) {
throw new InvalidArgumentException('광고성 메시지는 (광고) 로 시작해야 합니다.');
}
if (! str_contains($content, $optOut)) {
throw new InvalidArgumentException('무료 수신거부 안내가 본문에 없습니다.');
}
}
브랜드메시지의 adFlag
브랜드메시지와 친구톡에는 광고 여부를 표시하는 adFlag 가 있습니다.
await sendgo.brandMessage.send({
targeting: 'M',
messageType: 'FL',
friendTemplateUuid: '...',
adFlag: 'Y', // 광고성 메시지임을 표시
contacts: [...],
});
adFlag: 'Y' 로 두면 카카오 쪽에서 광고 메시지 규칙(수신거부 버튼 등)이 적용됩니다. 광고인데 N 으로 보내는 것은 위반입니다.
예약 발송의 함정
야간 제한은 실제 발송 시각 기준입니다. "지금부터 3시간 뒤"처럼 상대 시각으로 예약하면, 배치 실행 시각에 따라 제한 구간에 들어갈 수 있습니다.
<?php
$at = AdSendWindow::nextAllowed(CarbonImmutable::now('Asia/Seoul')->addHours(3));
$sendgo->brandMessage->send([
'targeting' => 'M',
'scheduleType' => 'SCHEDULED',
'at' => $at->format('Y-m-d H:i:s'),
'adFlag' => 'Y',
// ...
]);
다음 단계
자주 묻는 질문
- 광고성 메시지를 밤에 보내면 어떻게 되나요?
- 정보통신망법상 21시부터 익일 08시까지는 수신자의 별도 사전 동의 없이 광고성 메시지를 전송할 수 없습니다. 위반 시 과태료 대상입니다. 야간 발송이 꼭 필요하면 그 시간대 수신에 대한 별도 동의를 따로 받아야 합니다.
- (광고) 표기는 어디에 넣나요?
- 본문 맨 앞입니다. 제목이 있는 LMS 라면 제목 맨 앞에 넣습니다. 중간이나 끝에 넣으면 표기 의무를 충족하지 않습니다.
- 알림톡에도 광고 규칙이 적용되나요?
- 알림톡은 정보성만 승인되므로 원칙적으로 광고성 발송이 불가능합니다. 광고는 브랜드메시지나 광고 문자로 보내야 하고, 그때 이 규칙이 적용됩니다.
- 수신거부는 어떻게 제공해야 하나요?
- 수신자가 비용을 부담하지 않는 방법이어야 합니다. 080 무료 수신거부 번호가 일반적입니다. 본문에 그 번호나 수신거부 방법을 명시해야 합니다.