발송 시각을 지정하려면 `scheduleType` 을 `SCHEDULED` 로 두고 `at` 에 시각을 넣습니다. 기본값은 `DIRECTLY`(즉시)입니다.

## 형식

| 파라미터 | 값 |
| --- | --- |
| `scheduleType` | `"SCHEDULED"` |
| `at` | `"2026-09-01 09:00:00"` — `Y-m-d H:i:s`, **한국 표준시(KST)** |

ISO 8601(`2026-09-01T09:00:00Z`)이나 유닉스 타임스탬프는 받지 않습니다.

## 예제

### Node.js / TypeScript

```typescript
await sendgo.alimtalk.send({
  templateCode: 'PROMO_SUMMER_2026',
  scheduleType: 'SCHEDULED',
  at: '2026-09-01 09:00:00',
  contacts: [{ contact: '01012345678', var1: '가을 한정 30% 할인' }],
});
```

### Python

```python
client.alimtalk.send(
    template_code="PROMO_SUMMER_2026",
    schedule_type="SCHEDULED",
    at="2026-09-01 09:00:00",
    contacts=[{"contact": "01012345678", "var1": "가을 한정 30% 할인"}],
)
```

### PHP · Laravel

```php
<?php

$sendgo->alimtalk->send([
    'templateCode' => 'PROMO_SUMMER_2026',
    'scheduleType' => 'SCHEDULED',
    'at'           => '2026-09-01 09:00:00',
    'contacts'     => [['contact' => '01012345678', 'var1' => '가을 한정 30% 할인']],
]);
```

### 문자 예약

같은 파라미터가 문자에도 적용됩니다.

```bash
curl -X POST https://sendgo.io/api/v2/messages/send \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "campaignType": "MESSAGE",
    "messageType": "LMS",
    "scheduleType": "SCHEDULED",
    "at": "2026-09-01 09:00:00",
    "subject": "[공지] 서비스 점검 안내",
    "content": "9월 1일 02:00~06:00 점검이 예정되어 있습니다.",
    "contacts": [{ "contact": "01012345678" }],
    "senderKey": "your_sms_sender_key"
  }'
```

## 시간대 함정

서버가 UTC 로 동작하는 경우(도커 컨테이너, AWS 기본 설정 등)가 흔합니다. **날짜를 만드는 코드가 KST 를 쓰는지 확인하세요.** UTC 시각을 그대로 넘기면 9시간 이른 시각에 발송됩니다.

```php
<?php

// 잘못된 예 — 서버가 UTC 면 실제 발송은 KST 18:00 이 된다.
'at' => now()->addDay()->setTime(9, 0)->format('Y-m-d H:i:s'),

// 올바른 예
'at' => now('Asia/Seoul')->addDay()->setTime(9, 0)->format('Y-m-d H:i:s'),
```

```python
from datetime import datetime, time
from zoneinfo import ZoneInfo

at = datetime.now(ZoneInfo("Asia/Seoul")).replace(hour=9, minute=0, second=0)
client.alimtalk.send(
    template_code="PROMO_001",
    schedule_type="SCHEDULED",
    at=at.strftime("%Y-%m-%d %H:%M:%S"),
    contacts=[...],
)
```

```typescript
// Node.js — 서버 시간대에 의존하지 말고 명시적으로 KST 로 포맷한다.
const at = new Intl.DateTimeFormat('sv-SE', {
  timeZone: 'Asia/Seoul',
  year: 'numeric', month: '2-digit', day: '2-digit',
  hour: '2-digit', minute: '2-digit', second: '2-digit',
  hour12: false,
}).format(target).replace('T', ' ');
```

## 야간 광고 제한과의 관계

광고성 메시지는 **실제 발송 시각** 기준으로 21시~익일 08시에 나갈 수 없습니다. 예약을 그 구간으로 잡으면 안 됩니다.

주의할 조합: 저녁에 배치를 돌리면서 예약 시각을 "지금부터 3시간 뒤"로 계산하면, 실행 시각에 따라 제한 구간에 들어갈 수 있습니다. 절대 시각으로 잡거나, 제한 구간이면 다음 날 08시로 밀어내세요.

```php
<?php

$at = now('Asia/Seoul')->addHours(3);

// 21시~08시 구간이면 다음 날 아침으로 미룬다.
if ($at->hour >= 21 || $at->hour < 8) {
    $at = $at->copy()->addDay()->setTime(8, 0);
}
```

자세한 규칙은 [광고성 메시지 규칙](/ko/cookbook/ad-message-rules)에 있습니다.

## 다음 단계

- [대량 발송과 치환 변수](/ko/cookbook/bulk-send)
- [광고성 메시지 규칙](/ko/cookbook/ad-message-rules)