구글 캘린ë”ì— í…”ë ˆê·¸ëž¨ìœ¼ë¡œ ì¼ì • 추가하기
í…”ë ˆê·¸ëž¨ 채팅으로 구글 ìº˜ë¦°ë” ì¼ì • 추가하기
스마트í°ì„ 꺼내서 ìº˜ë¦°ë” ì•±ì„ ì—´ê³ , ë‚ ì§œë¥¼ ì°¾ê³ , 새 ì¼ì • ë²„íŠ¼ì„ ëˆ„ë¥´ê³ , ì œëª© ìž…ë ¥í•˜ê³ … ì´ ê³¼ì •ì´ ê·€ì°®ë‹¤ê³ ëŠë‚€ ì 있는가? OpenClaw를 í
œìš©í•˜ë©´ í…”ë ˆê·¸ëž¨ì—서 “다ìŒì£¼ í
”ìš”ì¼ 6시 팀 회옔ë¼ê³ 타ì´í•‘하는 것만으로 구글 캘린ë”ì— ì¼ì •ì´ ìžë
추가ëœë‹¤. AIê°€ ìžì—°ì–´ë¥¼ 파싱해서 ì§ì ‘ 처리하기 ë•Œë¬¸ì— ë‚ ì§œ 형ì‹ì„ ë§žì¶œ í•„ìš”ë„ ì—†ë‹¤.
ì
œ ì´ ë°©ì‹ì´ ìœ ìš©í•œê°€
기존 ìº˜ë¦°ë” ì•±ì˜ ë¬¸ì œëŠ” ì¸í„°íŽ˜ì´ìФ ì „í
˜ 비용ì´ë‹¤. 업무 ì¤‘ì— ì¼ì •ì´ ìƒê¸°ë©´ í•˜ë˜ ì¼ì„ ë©ˆì¶”ê³ ì•±ì„ ì—´ì–´ì•¼ 한다. í…”ë ˆê·¸ëž¨ 기반 ì¼ì • 추가는 ì´ë¯¸ 대í
”ê°€ ì´ë£¨ì–´ì§€ëŠ” 공간ì—서 바로 처리하기 ë•Œë¬¸ì— ì»¨í…스트 ì „í
˜ì´ 없다. íšŒì˜ ì¤‘ 메모하듯ì´, ì´ë
중 ë– ì˜¤ë¥¸ 약ì†ì„ 바로 ì €ìž¥í• ìˆ˜ 있다.
OpenClaw는 Claude AI를 비서 엔진으로 사용하기 ë•Œë¬¸ì— “다다ìŒì£¼ ê¸ˆìš”ì¼ ì˜¤ì „ 중으로 치과 예약”처럼 모호한 í‘œí˜„ë„ ì •í
•히 í•´ì„한다. ë˜í•œ Google Calendar APIì
€ ì§ì ‘ ì—°ë
하므로 ë³„ë„ ì•± ì—†ì´ ìž‘ë
한다.
준비물
- OpenClaw ì„¤ì¹˜ëœ ì„œë²„ ë˜ëŠ” Mac (Node.js 18+)
- í…”ë ˆê·¸ëž¨ ê³„ì • ë° ë´‡ í† í°
- Google Cloud 프로ì 트 (Calendar API í
ϓ㱒
”) - Google OAuth2 ìžê²©ì¦ëª… (credentials.json)
OpenClaw 설치
npm install -g openclaw
openclaw setup
setup ê³¼ì •ì—서 í…”ë ˆê·¸ëž¨ ë´‡ í† í°ê³¼ 채팅 ID를 ìž…ë ¥í•œë‹¤. ë´‡ í† í°ì€ í…”ë ˆê·¸ëž¨ @BotFatherì—서 발급받는다.
단계별 구현
1단계: Google Calendar API ì„¤ì •
Google Cloud Consoleì—서 프로ì 트를 ìƒì„±í•˜ê³ Google Calendar API를 í
ϓ㱒
”한다.
- console.cloud.google.com ì ‘ì†
- 새 프로ì 트 ìƒì„±
- API ë° ì„œë¹„ìŠ¤ > ë¼ì´ë¸ŒëŸ¬ë¦¬ì—서 “Google Calendar API” 검색 후 í
ϓ㱒
” - ì‚¬ìš©ìž ì¸ì¦ ì •ë³´ > OAuth 2.0 í´ë¼ì´ì–¸íЏ ID ìƒì„± (ë°ìФí¬í†± 앱 ì„ íƒ)
- credentials.json 다운로드
mkdir -p ~/.openclaw/workspace/gcal
mv ~/Downloads/credentials.json ~/.openclaw/workspace/gcal/
2단계: ì¸ì¦ 스í¬ë¦½íЏ 작성
Google Calendar OAuth ì¸ì¦ì„ 처리하는 스í¬ë¦½íŠ¸ë¥¼ 작성한다.
// ~/.openclaw/workspace/gcal/auth.js
const { google } = require('googleapis');
const fs = require('fs');
const readline = require('readline');
const SCOPES = ['https://www.googleapis.com/auth/calendar'];
const TOKEN_PATH = './token.json';
const CREDS_PATH = './credentials.json';
async function authorize() {
const credentials = JSON.parse(fs.readFileSync(CREDS_PATH));
const { client_secret, client_id, redirect_uris } = credentials.installed;
const oAuth2Client = new google.auth.OAuth2(
client_id, client_secret, redirect_uris[0]
);
const authUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',
scope: SCOPES,
});
console.log('ì´ URLì„ ë¸Œë¼ìš°ì €ì—서 ì—´ê³ ì½”ë“œë¥¼ ìž…ë ¥í•˜ì„¸ìš”:', authUrl);
const rl = readline.createInterface({ input: process.stdin });
rl.question('코드 ìž…ë ¥: ', async (code) => {
const { tokens } = await oAuth2Client.getToken(code);
fs.writeFileSync(TOKEN_PATH, JSON.stringify(tokens));
console.log('token.json ì €ìž¥ 완료');
rl.close();
});
}
authorize();
cd ~/.openclaw/workspace/gcal
npm init -y
npm install googleapis
node auth.js
3단계: ì¼ì • 추가 스í¬ë¦½íЏ 작성
OpenClawì—서 í˜¸ì¶œí• ìˆ˜ 있는 ì¼ì • 추가 스í¬ë¦½íŠ¸ë¥¼ ë§Œë“ ë‹¤.
// ~/.openclaw/workspace/gcal/add_event.js
const { google } = require('googleapis');
const fs = require('fs');
async function addEvent(title, startDateTime, endDateTime, description = '') {
const credentials = JSON.parse(fs.readFileSync('./credentials.json'));
const tokens = JSON.parse(fs.readFileSync('./token.json'));
const { client_secret, client_id, redirect_uris } = credentials.installed;
const oAuth2Client = new google.auth.OAuth2(
client_id, client_secret, redirect_uris[0]
);
oAuth2Client.setCredentials(tokens);
const calendar = google.calendar({ version: 'v3', auth: oAuth2Client });
const event = {
summary: title,
description: description,
start: { dateTime: startDateTime, timeZone: 'Asia/Seoul' },
end: { dateTime: endDateTime, timeZone: 'Asia/Seoul' },
};
const response = await calendar.events.insert({
calendarId: 'primary',
resource: event,
});
return response.data;
}
const args = process.argv.slice(2);
addEvent(args[0], args[1], args[2], args[3] || '')
.then(event => console.log('추가ë¨:', event.htmlLink))
.catch(err => console.error('오류:', err.message));
4단계: OpenClaw ë©”ëª¨ë¦¬ì— ë„구 등ë¡
OpenClawê°€ í…”ë ˆê·¸ëž¨ 메시지를 받으면 ìžë
으로 ì´ ìŠ¤í¬ë¦½íŠ¸ë¥¼ í
œìš©í• 수 있ë„ë¡ TOOLS.mdì— ë“±ë¡í•œë‹¤.
### Google Calendar
- 스í¬ë¦½íЏ: ~/.openclaw/workspace/gcal/add_event.js
- 실행: node add_event.js "ì œëª©" "2026-04-05T14:00:00" "2026-04-05T15:00:00"
- 타임존: Asia/Seoul
5단계: cron으로 ì •ê¸° ì¼ì • í
•ì¸ ì¶”ê°€
ë§¤ì¼ ì•„ì¹¨ ì˜¤ëŠ˜ì˜ ì¼ì •ì„ í…”ë ˆê·¸ëž¨ìœ¼ë¡œ 받는 cronë„ í•¨ê»˜ ì„¤ì •í• ìˆ˜ 있다.
openclaw cron add
--cron "0 8 * * *"
--tz Asia/Seoul
--session isolated
--agent main
--message "오늘 ë‚ ì§œ 기준으로 Google Calendarì—서 오늘 ì¼ì •ì„ ì¡°íšŒí•´ì„œ í…”ë ˆê·¸ëž¨ìœ¼ë¡œ ì•Œë ¤ì¤˜"
ì‹¤ì œ í
œìš© 예시
í…”ë ˆê·¸ëž¨ì—서 다ìŒê³¼ ê°
ì´ ë©”ì‹œì§€ë¥¼ ë³´ë‚´ë©´ AIê°€ 파싱해서 처리한다.
사용ìž: ì´ë²ˆì£¼ í† ìš”ì¼ ì˜¤í›„ 3ì‹œì— ë…서 모임 2시간
AI: 구글 캘린ë”ì— ì¶”ê°€í–ˆì–´.
- ì œëª©: ë…서 모임
- 시작: 2026-04-04 15:00
- 종료: 2026-04-04 17:00
ë§í¬: https://calendar.google.com/...
사용ìž: 다ìŒë‹¬ 첫째 주 ì›”ìš”ì¼ 9ì‹œì— ì›”ë¡€ 회ì˜, 반복 ì¼ì •으로
AI: 2026-05-04 09:00 월례 íšŒì˜ ì¶”ê°€ 완료.
매월 첫째 주 ì›”ìš”ì¼ ë°˜ë³µìœ¼ë¡œ ì„¤ì •í–ˆì–´.
ì‘ìš© ì•„ì´ë””ì–´
- 팀 ê³µìœ ìº˜ë¦°ë” ì—°ë
: calendarId를 팀 ê³µìœ ìº˜ë¦°ë” ID로 변경하면 íŒ€ì› ì „ì²´ ì¼ì •ì„ í…”ë ˆê·¸ëž¨ì—서 관리 가능 - ì´ë©”ì¼ ìžë
파싱: 예약 í
•ì¸ ì´ë©”ì¼ì´ 오면 ìžë
으로 ì¼ì •ì„ ì¶”ì¶œí•´ì„œ 캘린ë”ì— ì¶”ê°€ - DB ì—°ë
: ê°•ì˜ ì˜ˆì•½ 시스템 DBì— ìƒˆ ì˜ˆì•½ì´ ìƒê¸°ë©´ ìžë
으로 캘린ë”ì— ë¸”ë¡ ì¶”ê°€ - 알림 ì—ìŠ¤ì»¬ë ˆì´ì…˜: 중요 ì¼ì • 1시간 ì „ì— í…”ë ˆê·¸ëž¨ìœ¼ë¡œ 준비 ì²´í¬ë¦¬ìŠ¤íŠ¸ë¥¼ 함께 ì „ì†¡
- ì¼ì • ì¶©ëŒ ê°ì§€: 새 ì¼ì • 추가 ì „ì— ê¸°ì¡´ ì¼ì •ê³¼ 겹치는지 ìžë
í
•ì¸ í›„ ê²½ê³
OpenClawì˜ í•µì‹¬ì€ AIê°€ 중간 통ì—사 ì—í• ì„ í•œë‹¤ëŠ” ì ì´ë‹¤. 사용ìžëŠ” ìžì—°ì–´ë¡œ ì˜ë„ë§Œ ì „ë‹¬í•˜ë©´ ë˜ê³ , 나머지 API 호출과 ë°ì´í„° 처리는 AIê°€ 알아서 처리한다. ìº˜ë¦°ë” ì
¸ì—ë„ ê°
ì€ ë°©ì‹ìœ¼ë¡œ Notion, Trello, Airtable 등 다양한 서비스ì
€ í…”ë ˆê·¸ëž¨ì„ ì—°ê²°í• ìˆ˜ 있다.
원문: 두온교육 AI 블로그
댓글
댓글 쓰기