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.

```text
(광고)[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.

```text
(광고)[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
<?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);
    }
}
```

```typescript
// 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;
};
```

```python
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
<?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.

```typescript
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
<?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

- [Send a Kakao Brand Message](/en/cookbook/send-brand-message)
- [Scheduled sending](/en/cookbook/scheduled-send)
- [Send SMS, LMS and MMS](/en/cookbook/send-sms)