Advertising message rules in Korea — (광고) prefix, opt-out, night ban
What Korean law requires of promotional SMS and Kakao messages, and how to enforce it in code: the (광고) prefix, a free opt-out, and no sending between 21:00 and 08:00 KST.
Promotional and marketing messages fall under the Network Act (정보통신망법). Ignoring it means fines, and repeated violations put the sending channel itself at risk.
Informational messages — order confirmations, delivery updates, verification codes — are exempt. Since Alimtalk is approved for informational content only, in practice these rules govern advertising SMS and Brand Message.
The four requirements
1. Prior consent
You may only send to people who agreed in advance. That is the marketing opt-in checkbox at signup. It must not be pre-ticked, and you have to retain the record of when consent was given.
2. The (광고) prefix
At the very start of the body.
(광고)[Brand] Autumn sale, up to 50% off
...
For an LMS with a subject line, it goes at the start of the subject. Mid-body or trailing placement does not count.
3. A free opt-out
The recipient must be able to opt out at no cost to them. A toll-free 080 number is standard.
(광고)[Brand] Autumn sale, up to 50% off
Details https://sendgo.io/s/k7Rm2xQ
Free opt-out 080-000-0000
4. No sending 21:00–08:00
Advertising messages may not be sent between 21:00 and 08:00 KST. Sending in that window requires separate consent specifically for night-time delivery.
Sendgo validates promotional sends against this window. Guard it in your own code too — batch jobs running later than planned and slipping past 21:00 is a routine occurrence.
Enforcing it in code
A send-window guard
<?php
use Carbon\CarbonImmutable;
final class AdSendWindow
{
// Advertising messages cannot go out between 21:00 and 08:00 KST.
public static function isAllowed(?CarbonImmutable $at = null): bool
{
$at ??= CarbonImmutable::now('Asia/Seoul');
return $at->hour >= 8 && $at->hour < 21;
}
/** Inside the restricted window, push to the next permitted time (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);
}
}
// Decide in KST rather than trusting the server timezone.
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
Body validation
<?php
function assertAdFormat(string $content, string $optOut): void
{
if (! str_starts_with($content, '(광고)')) {
throw new InvalidArgumentException('Advertising messages must start with (광고).');
}
if (! str_contains($content, $optOut)) {
throw new InvalidArgumentException('The body is missing the free opt-out notice.');
}
}
adFlag on Brand Message
Brand Message and Friendtalk carry an adFlag marking the message as advertising.
await sendgo.brandMessage.send({
targeting: 'M',
messageType: 'FL',
friendTemplateUuid: '...',
adFlag: 'Y', // marks this as an advertising message
contacts: [...],
});
With adFlag: 'Y', Kakao applies its advertising rules (opt-out button and so on). Sending advertising content with N is a violation.
The scheduling trap
The night ban is judged on actual delivery time. Scheduling relatively — "three hours from now" — can land inside the restricted window depending on when the batch ran.
<?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',
// ...
]);
Next
자주 묻는 질문
- What happens if I send a promotional message at night?
- Korean law (정보통신망법) prohibits sending advertising messages between 21:00 and 08:00 without separate prior consent for that window. Violations carry fines.
- Where does the (광고) prefix go?
- At the very beginning of the body. For an LMS with a subject, at the beginning of the subject. Putting it in the middle or at the end does not satisfy the requirement.
- Do these rules apply to Alimtalk?
- Alimtalk is approved for informational content only, so promotional sending is not possible through it in the first place. Advertising goes through Brand Message or advertising SMS, and that is where these rules bite.
- How do I provide opt-out?
- By a method that costs the recipient nothing. A toll-free 080 number is the usual choice, and the number or the method must appear in the body.