본문 바로가기
AI Agent

[ AI Agent ] 구글 캘린더 연동하기

by 2CHAE._.EUN 2026. 6. 20.

구글 캘린더에서 일정을 확인하고 해당 날짜에 미리 지정된 일정이 없다면 새로운 일정을 만드는 AI Agent 생성하기

 

구글 캘린더 사용하기

 

https://console.cloud.google.com/agent-platform/overview?hl=ko

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

1. OAuth 생성하기

 

① 구글 캘린더는 OAuth 2.0 클라이언트 ID로만 사용이 가능하다. 

* API 키 & 서비스 계정 : 구글이 제공하는 서비스를 사용할 때

* OAuth 2.0 클라이언트 ID : 구글이 제공하는 서비스에서 사용자가 입력한 데이터에 접근할 때 OAuth를 통과해야함

 

② 승인된 리디렉션 URI에는 Google Calendar Tool의 Credential 설정 시 확인되는 URL 추가하기

* URL과 URI의 차이

- URL (Uniform Resource Locator): 자원의 위치. 어떻게 접근해야 하는지(프로토콜)와 파일의 경로를 포함합니다. (예: https://2chaechae.tistory.com)

- URI (Uniform Resource Identifier): 자원을 식별하기 위한 고유한 문자열. 특정 위치나 접근 방법과 관계없이 해당 자원 자체를 가리킨다.

 

1) Google Calendar Tool 에는 생성된 OAuth 클라이언트 ID와 비밀번호 추가하기

 

2) Sign in with Google을 하면 엑세스가 차단되어 생성이 불가능함 → OAuth에 대해 사용자를 추가해주기

 


2. Calendar Read Tool 설정하기 : 캘린더의 정보를 읽는 Tool

* PIN을 사용하면 마지막으로 실행한 결과값을 계속해서 이후 노드들에서 실행이 가능하다. 

 

① 구글 캘린더에서 테스트용 n8n_test 캘린더 생성하기

https://calendar.google.com/calendar/u/0/r

 

Google Calendar - Easier Time Management, Appointments & Scheduling

Learn how Google Calendar helps you stay on top of your plans - at home, at work and everywhere in between.

calendar.google.com

 

② Google Calendar Tool에서 새로 생성한 Calendar인 n8n_test를 확인 가능하다.

1) Operation : Get Many

* Get Many : 외부 서비스(예: Notion, Gmail, Slack 등)로부터 여러 개의 데이터를 한 번에 조회(가져오기)하는 작업(Operation)

2) Return All : 활성화하면 모든 데이터를 가져오는 것 ( 비활성화 시 Limit 50개 )

3) After & Before : 언제부터 언제까지의 데이터를 가져올지 설정하는 것
→ 기한은 AI가 스스로 판단할 수 있도록 값을 설정하지 않는다. 


3. Calendar Write Tool 설정하기 : 캘린더에 일정을 생성하는 Tool

1) Operation : Create 

2) After & Before : 언제부터 언제까지의 데이터를 작성할지 설정하는 것
→ 기한은 AI가 스스로 판단하고 일정을 생성할 수 있도록 날짜를 별도로 설정하지 않는다.


4. AI Agent에 구글 캘린더에 일정을 등록하게 만드는 프롬프트 작성하기

① Gmail Fields와 Mail Data 수정하기

 

② AI Agent 프롬프트 작성하기

 

1) Open AI가 금일을 2023년으로 알고 있는 대참사 발생 → Open AI에게 오늘 날짜를 전달해줘야함.

 

2) Date & Time - Get Current Date 노드를 추가하기

Timezone의 디폴트 값이 GMT 기준이기 때문에 KST로 설정해줘야함

 

3) Mail Data와 AI Agent 사이에 Date & Time 노드가 추가되므로 AI Agent 프롬프트 내용을 수정해주기

 

4) Date & Time 노드를 추가했음에 불구하고 날짜 계산이 이상함.

LLM은 생각하거나 수학 계산을 직접 수행하는 프로그램이 아니고 단어와 단어 사이의 패턴과 확률을 보고 다음에 올 말을 예측하는 시스템이다. 그래서 AI Agent 프롬프트에 날짜를 계산할 수 있는 방법을 제시해줘야한다.

* 다음 주 수요일 같은 자연어 날짜를 메일로 받았을 경우를 대비해 각각의 요일별 계산 원칙을 적용해줘야할 듯 싶다;

저렴한 모델을 사용하다보니 날짜 계산을 못한다.

당신은 메일 회신 전문 에이전트 입니다.
다음의 메일의 제목과 내용을 보고 어떤 처리를 할지 충분히 이해하고 판단하세요.

----------------------------

메일 제목 :
{{ $('Mail Data').item.json.subject }}

메일 내용 :
{{ $('Mail Data').item.json.text }}

보낸 사람 이메일 주소 :
{{ $('Mail Data').item.json.from }}

보낸 사람 이름 :
{{ $('Mail Data').item.json.name }}

금일 날짜 : 
{{ $json.currentDate.substring(0, 10) }}

----------------------------

- 반드시 금일 날짜를 먼저 확인하기.

- 일정, 미팅 약속을 요청하는 경우 반드시 Calender Read 툴을 사용해서 일정 확인 후,
해당 날짜와 시간에 일정이 없는 경우에만 새로운 약속을 잡아야 한다.

- 반드시 상대방이 요구하는 날짜를 정확하게 확인할 것.

- 일정에 대한 내용이 메일에 있다면 Calendar Write 툴을 사용하여 일정을 등록해야 한다. 

- 일정 등록 시 미팅 대상에 대한 정보(이메일, 이름 등)를 최대한 자세히 함께 기재할 것.

- 일정을 잡았을 경우 답장에 해당 일정에 대한 정보를 함께 발송할 것
ex) 안녕하세요, 메일 확인하였습니다. 6월 20일 오후 3시에 xx룸에서 뵙겠습니다. 

- 회신을 보낼 때 받은 메일의 제목을 쓰게 되면 앞에 [Re]를 붙여서 회신임을 알릴 것.

- 계산된 날짜 결과는 'YYYY-MM-DD' 형식의 문자열로 출력한다.

----------------------------

[ 날짜 계산 지침 ]

- 한 주의 시작은 '월요일(Monday)'이며, 한 주의 끝은 '일요일(Sunday)'이다.

- 날짜 계산은 Asia/Seoul 시간을 기준으로 한다.

- 일정에 약속 시간에 대한 언급이 없을 경우, 오전 9시 이후 && 오후 12~1시 제외 && 오후 6시 이전 중 아무 시간대를 골라서 알아서 약속을 잡을 것.

[규칙 보완: 날짜 계산 절대 원칙]

1. 금일 날짜인 {{ $json.currentDate.substring(0, 10) }} 을 기준으로 계산한다.
2. "다음 주 수요일" 계산 로직:
   - 이번 주 수요일(Wednesday)을 먼저 구한다. (현재 월요일이므로 이번 주 수요일은 오늘+2일인 2026-06-24이다.)
   - '다음 주 수요일'은 이번 주 금요일에 무조건 '7일'을 더해야 한다. (즉, 2026-06-24 + 7일 = 2026-07-01)

 


5. 메일을 회신하는 기능 만들기

 

① Send Email - Send an Email 노드 추가하기 

새로운 Gmail Credential를 설정하기 위한 앱 비밀번호를 생성 후 Password에 넣어주기

SMTP를 사용하기 위해서는 SMTP 서버 주소가 필요하다.

* SMTP : 사용자의 컴퓨터에서 작성된 메일을 다른 사람의 계정으로 전송하는 프로토콜  

 

② AI Agent에 Structured Output Parser를 추가해 output 데이터를 어떤 형태로 반환할지 설정하기

 

③ Send an Email 노드 설정하기

 

④ To를 네이버로 설정해서 네이버 메일을 확인한 결과, Gmail의 내 계정으로부터 메일이 정상적으로 도착한 것을 확인할 수 있다.