
AI 회의 메모를 Google Calendar에 등록하기 전 Python으로 검사하기
요약
AI 회의 메모를 Google Calendar에 자동으로 등록할 때 발생할 수 있는 일정 오등록을 방지하기 위한 Python 검증 로직을 소개합니다. ISO 8601 형식 준수와 시작/종료 시간의 논리적 선후 관계를 체크하여 데이터의 신뢰성을 높이는 방법을 다룹니다.
핵심 포인트
- Calendar API는 형식만 맞으면 논리적 오류(종료가 시작보다 빠름)도 수락함
- ISO 8601 형식을 사용하여 타임존 해석 오류를 방지해야 함
- 추출 단계에서 JSON 스키마를 엄격히 제한하여 검증 효율을 높임
- 자동 등록 전 검증 단계를 두는 것이 오등록 수정 비용보다 저렴함
회의 메모로부터 일정을 만든다면, 등록 처리보다 먼저 일시를 검사하는 메커니즘을 넣는 것이 좋습니다. Calendar API는 형식이 맞으면 일정을 수락합니다. 시작 시간보다 종료 시간이 빠른 일정이거나, 의도가 다르더라도 멈춰주지 않습니다.
음성으로 회의를 기록하고 그대로 일정 조정까지 진행하는 기능이 늘어났습니다. 편리해질수록 일정의 오등록은 눈에 띄지 않게 남습니다. 영업직이라면 거래처와의 미팅을 30분 미루려다가 사내 리뷰를 덮어썼다 정도의 상황만으로도 충분히 곤란해집니다.
오늘 검사용 JSON을 흘려보냈더니, 시작이 10:00이고 종료가 9:30이라는 데이터가 그대로 걸러졌습니다. 화면으로 읽으면 알아채기 어렵지만, 조건으로 설정하면 단번에 찾아냅니다. 이 부분이 은근히 효과적입니다.
이 기사에서는 회의 메모에서 추출한 일정을 JSON으로 만들고, Google Calendar로 넘기기 전에 Python만으로 차단하는 방법을 다룹니다. 외부 서비스에 쓰기를 수행하지는 않습니다.
회의 메모의 문장을 그대로 등록 대상으로 삼으면 검사하는 쪽이 힘들어집니다. 추출하는 단계에서 다음 4가지 항목만 JSON 배열로 맞춥니다.
[
{
"title": "A사 정기 회의",
...
일시는 YYYY-MM-DDTHH:MM:SS+09:00 형태의 ISO 8601 형식으로 고정합니다. 2026/7/25 10시와 같은 표기를 남겨두면, 월/일이나 타임존 (Timezone) 해석이 후속 단계까지 이어지게 됩니다.
캘린더 일정은 나중에 수정할 수는 있어도 상대방의 시간까지 되돌릴 수는 없습니다. 이 부분만큼은 문장의 자연스러움보다 기계가 읽을 수 있는 형식을 우선합니다.
회의 메모를 요약하는 툴에는 다음과 같은 지시를 추가하고 있습니다.
회의 메모에서 일정만 추출해 주세요.
title, start, end, attendees를 가진 JSON 배열만 반환합니다.
start와 end는 ISO 8601 형식이며, 반드시 UTC 오프셋을 붙여야 합니다.
...
모호한 일정을 자동으로 등록하지 않겠다고 미리 결정하는 것이 핵심입니다. 추출 건수는 조금 줄어들겠지만, 확인을 기다리는 것이 오등록보다 비용이 적게 듭니다.
이 그림의 meeting_guard.py까지를 일정 등록 직전에 끼워 넣습니다.
# meeting_guard.py
import json
import sys
...
예를 들어, 다음 2건을 events.json에 넣고 실행합니다.
[
{"title": "A사 정기 회의", "start": "2026-07-25T10:00:00+09:00", "end": "2026-07-25T09:30:00+09:00", "attendees": ["tanaka@example.com"]},
{"title": "기획 리뷰", "start": "2026-07-25T13:00:00", "end": "2026-07-25T14:00:00", "attendees": []}
...
]
python3 meeting_guard.py events.json
로컬에서의 출력 결과입니다.
등록을 중단했습니다.
- 1건째: 종료 일시가 시작 일시보다 앞서 있습니다
- 2건째: 타임존이 없습니다 (예: +09:00)
1건째와 같은 일정은 Calendar API 측에서 보면 일시 문자열로서 올바르기 때문에 그대로 통과될 수 있습니다. 2건째도 마찬가지입니다. 일본 시간으로 등록했다고 생각해도, 실행 환경이나 연동 대상의 기본 타임존에 따라 다른 시각이 될 여지가 남습니다.
참고로 8시간 상한선은 제 예시입니다. 종일 연수를 등록하는 팀이라면 12시간으로 바꾸거나 이 조건을 제거해 주세요. 업무 규칙을 코드에 둘 때는 정답을 미리 단정 짓지 않는 편이 오래 사용할 수 있습니다.
API가 반환하는 성공은 '받았다'는 의미입니다. '회의 메모의 의도대로'라는 의미는 포함하지 않습니다. 그래서 등록 전의 검사와 등록 후 사람이 확인하는 표시를 나누고 있습니다.
이 스크립트로 차단할 수 있는 것은 필수 항목의 누락, 종료 시각의 역전, 타임존 누락, 너무 긴 일정, 참석자 공란입니다. 기존 일정과의 중복이나 참석자의 이메일 주소가 올바른지까지는 판단하지 않습니다. 그 두 가지는 캘린더의 빈 시간 조회나 사내 연락처 대장과 대조하는 단계에서 추가할 수 있습니다.
처음부터 전부 자동화하려고 하면 예외 처리 (Exception Handling)가 먼저 비대해집니다. 우선은 문제가 생기면 타격이 큰 조건부터 차단합니다. 이 순서가 현장에서 운영하기 쉽습니다.
이 검사를 통과한 JSON만을 GAS나 Zapier, Calendar API로 넘깁니다. 에러라면 알림을 보내고 원래의 회의 메모로 되돌립니다. 일정을 만드는 처리와는 별개의 작은 공정으로 만들어 두면, 나중에 조건을 추가해도 영향 범위가 좁아집니다.
회의 메모 자동화는 요약의 정확도만으로 평가하기 쉽습니다. 하지만 업무에서 실제로 효과를 발휘하는 것은 잘못된 일정을 등록하지 않는 것입니다. 등록 전의 수십 줄의 코드가 있느냐 없느냐에 따라, 안심하고 자동화를 확장할 수 있는 범위가 달라집니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기