OpenClaw v2026.2 적용 | 본 문서는 AI 어시스턴트가 수동 응답이 아닌 능동적으로 동작하길 원하는 사용자에게 적합합니다.
TL;DR: Cron 예약 작업: "cron": [{"id": "daily", "schedule": "0 9 * * *", "message": "..."}]. Webhook 트리거: POST /webhook/your-path. Gmail Pub/Sub로 이메일 자동 처리. Heartbeat로 능동 점검. 설정 예: 일일 아침 브리핑 0 8 * * 1-5, CI 알림 webhook, 이메일 필터 gmail pub/sub.
자동화 개요
자동화 유형
| 유형 | 트리거 방식 | 적용 시나리오 |
|---|---|---|
| Cron | 예약 트리거 | 일일 리포트, 정기 점검 |
| Webhook | HTTP 요청 | 외부 시스템 연동 |
| Gmail Pub/Sub | 새 이메일 | 이메일 자동화 |
| Heartbeat | 주기 점검 | 능동 알림, 제안 |
아키텍처
flowchart TB
subgraph Triggers["트리거 소스"]
CRON[Cron 예약]
WH[Webhook HTTP]
GM[Gmail Pub/Sub]
HB[Heartbeat]
end
subgraph Gateway["Gateway"]
SCHED[스케줄러]
ROUTE[라우터]
AGENT[Agent]
end
subgraph Actions["동작"]
MSG[메시지 전송]
EXEC[작업 실행]
NOTIF[알림 전송]
end
CRON --> SCHED
WH --> ROUTE
GM --> ROUTE
HB --> SCHED
SCHED --> AGENT
ROUTE --> AGENT
AGENT --> MSG
AGENT --> EXEC
AGENT --> NOTIF
Cron 예약 작업
Cron 표현식
┌───────────── 분 (0 - 59)
│ ┌───────────── 시 (0 - 23)
│ │ ┌───────────── 일 (1 - 31)
│ │ │ ┌───────────── 월 (1 - 12)
│ │ │ │ ┌───────────── 요일 (0 - 6, 0 = 일요일)
│ │ │ │ │
* * * * *
자주 쓰는 표현식
| 표현식 | 설명 |
|---|---|
0 9 * * * |
매일 9:00 |
0 18 * * 1-5 |
평일 18:00 |
*/30 * * * * |
30분마다 |
0 0 1 * * |
매월 1일 0:00 |
0 9,18 * * * |
매일 9:00, 18:00 |
0 9 * * 1 |
매주 월요일 9:00 |
Cron 작업 설정
{
"cron": [
{
"id": "daily-briefing",
"schedule": "0 9 * * *",
"session": "main",
"message": "오늘 일정과 할 일을 알려주세요",
"enabled": true
},
{
"id": "weekly-summary",
"schedule": "0 18 * * 5",
"session": "main",
"message": "이번 주 업무 요약 생성",
"enabled": true
},
{
"id": "health-check",
"schedule": "*/15 * * * *",
"session": "main",
"message": "시스템 상태 확인 후 이상 사항 보고",
"enabled": true
}
]
}
Cron 설정 항목
| 필드 | 유형 | 설명 |
|---|---|---|
id |
string | 작업 고유 ID |
schedule |
string | Cron 표현식 |
session |
string | 대상 세션 |
message |
string | 전송할 메시지 |
enabled |
boolean | 활성화 여부 |
timezone |
string | 타임존(기본: 시스템 타임존) |
Cron 작업 관리
# 모든 작업 나열
openclaw cron list
# 출력 예시:
# ID Schedule Status Last Run
# daily-briefing 0 9 * * * enabled 2026-02-26 09:00
# weekly-summary 0 18 * * 5 enabled 2026-02-23 18:00
# health-check */15 * * * * enabled 2026-02-26 10:30
# 수동 실행
openclaw cron run daily-briefing
# 작업 활성화/비활성화
openclaw cron enable daily-briefing
openclaw cron disable daily-briefing
# 작업 로그 확인
openclaw cron logs daily-briefing
Webhook 트리거
Webhook 설정
{
"webhooks": [
{
"id": "github-push",
"path": "/webhook/github",
"secret": "your-webhook-secret",
"session": "main",
"handler": "github-push"
},
{
"id": "custom-alert",
"path": "/webhook/alert",
"secret": "your-webhook-secret",
"session": "main",
"message": "알림 수신: {{data.message}}"
}
]
}
Webhook 엔드포인트
POST http://your-gateway:18789/webhook/github-push
POST http://your-gateway:18789/webhook/alert
GitHub Webhook 예시
{
"webhooks": [
{
"id": "github-push",
"path": "/webhook/github",
"secret": "${GITHUB_WEBHOOK_SECRET}",
"session": "work",
"handler": "github-push"
}
]
}
Handler 스크립트:
// ~/.openclaw/handlers/github-push.js
module.exports = async (payload, session) => {
if (payload.ref === 'refs/heads/main') {
const commits = payload.commits.map(c => c.message).join('\n- ');
return `새 푸시 감지:\n\n브랜치: main\n커밋:\n- ${commits}\n\n무엇을 도와드릴까요?`;
}
return null;
};
커스텀 Webhook 처리
{
"webhooks": [
{
"id": "monitoring-alert",
"path": "/webhook/alert",
"methods": ["POST"],
"session": "main",
"message": "🚨 알림\n\n등급: {{data.level}}\n서비스: {{data.service}}\n메시지: {{data.message}}\n시간: {{data.timestamp}}"
}
]
}
Webhook 전송:
curl -X POST http://localhost:18789/webhook/alert \
-H "Content-Type: application/json" \
-H "X-Webhook-Secret: your-secret" \
-d '{
"level": "critical",
"service": "api-server",
"message": "CPU 사용률 90% 초과",
"timestamp": "2026-02-26T10:30:00Z"
}'
Webhook 보안
{
"webhooks": [
{
"id": "secure-webhook",
"path": "/webhook/secure",
"secret": "your-secret-key",
"signatureHeader": "X-Signature",
"signatureAlgorithm": "sha256",
"ipWhitelist": ["192.168.1.0/24"]
}
]
}
Gmail Pub/Sub 연동
Gmail Pub/Sub 설정
{
"gmail": {
"pubsub": {
"enabled": true,
"projectId": "your-project-id",
"subscription": "gmail-subscription",
"credentials": {
"type": "service_account",
"project_id": "your-project-id",
"private_key_id": "...",
"private_key": "...",
"client_email": "..."
},
"filters": [
{
"from": "[email protected]",
"session": "main",
"message": "중요 이메일 수신:\n발신자: {{sender}}\n제목: {{subject}}"
}
]
}
}
}
Gmail Pub/Sub 설정 절차
- Google Cloud 프로젝트 생성
- Gmail API 활성화
- Pub/Sub 토픽 생성
- 서비스 계정 생성
- Gmail watch 설정
# Gmail watch 설정
openclaw gmail watch --email [email protected]
Gmail 필터
| 필터 조건 | 설명 |
|---|---|
from |
발신자 이메일 |
to |
수신자 이메일 |
subject |
제목 키워드 |
hasAttachment |
첨부파일 여부 |
label |
Gmail 라벨 |
{
"filters": [
{
"from": "[email protected]",
"session": "work",
"message": "GitHub 알림 수신: {{subject}}"
},
{
"from": "[email protected]",
"hasAttachment": true,
"session": "main",
"message": "Stripe 문서 수신, 처리 필요"
}
]
}
Heartbeat 능동 점검
Heartbeat 설정
{
"heartbeat": {
"enabled": true,
"interval": 3600000,
"session": "main",
"message": "Heartbeat: 제가 확인할 사항이 있는지 살펴봐 주세요"
}
}
Heartbeat 용도
| 용도 | 설명 |
|---|---|
| 능동 알림 | 정기 알림 |
| 상태 점검 | 시스템/서비스 상태 확인 |
| 작업 제안 | 컨텍스트 기반 제안 |
| 컨텍스트 유지 | 세션 활성 유지 |
Heartbeat 예시
{
"heartbeat": {
"enabled": true,
"interval": 1800000,
"conditions": [
{
"type": "time",
"start": "09:00",
"end": "18:00"
},
{
"type": "active",
"session": "main"
}
],
"message": "현재 시각 기준으로 다음 사항을 확인해 주세요:\n1. 오늘 할 일\n2. 이메일 알림\n3. 일정"
}
}
자동화 실전 예시
예시 1: 일일 아침 브리핑
{
"cron": [
{
"id": "morning-briefing",
"schedule": "0 8 * * 1-5",
"session": "main",
"message": "좋은 아침! 오늘 아침 브리핑:\n1. 날씨\n2. 오늘 일정\n3. 할 일\n4. 중요 이메일 요약"
}
]
}
예시 2: CI/CD 알림
{
"webhooks": [
{
"id": "ci-failure",
"path": "/webhook/ci",
"session": "dev",
"message": "⚠️ CI 실패\n\n프로젝트: {{data.repository}}\n브랜치: {{data.branch}}\n커밋: {{data.commit}}\n오류: {{data.error}}\n\n분석 도와드릴까요?"
}
]
}
예시 3: 이메일 자동 처리
{
"gmail": {
"pubsub": {
"filters": [
{
"from": "[email protected]",
"hasAttachment": true,
"session": "main",
"message": "인보이스 이메일 수신, 처리 중...\n첨부파일을 재무 폴더에 저장해 주세요"
}
]
}
}
}
예시 4: 시스템 모니터링
{
"cron": [
{
"id": "system-monitor",
"schedule": "*/5 * * * *",
"session": "main",
"message": "시스템 상태 확인",
"skills": ["system-monitor"]
}
]
}
문제 해결
Cron 작업 미실행
# 작업 상태 확인
openclaw cron list
# 로그 확인
openclaw logs --filter cron
# 수동 실행 테스트
openclaw cron run task-id
Webhook 미응답
# Webhook 엔드포인트 확인
curl -X POST http://localhost:18789/webhook/test \
-H "Content-Type: application/json" \
-d '{"test": true}'
# 로그 확인
openclaw logs --filter webhook
Gmail Pub/Sub 미동작
# 구독 상태 확인
openclaw gmail status
# 재설정
openclaw gmail setup
# 권한 확인
openclaw gmail check-permissions
요약
자동화로 OpenClaw가 수동 응답에서 능동 작업으로 전환됩니다:
- Cron: 예약 작업 실행
- Webhook: 외부 이벤트 트리거
- Gmail Pub/Sub: 이메일 자동화
- Heartbeat: 능동 알림 및 제안
업데이트 기록:
- 2026-02-26: 초판 발행
시리즈 네비게이션:
- ← 이전: 모바일 연동
- → 다음: 실전: 개인 지식 관리 어시스턴트 구축