Todoist 작업을 공개 Google 캘린더 이벤트로 변환하기 (Google Apps Script + Sync Tokens 사용)
Source: Dev.to
Todoist의 기본 Google Calendar 연동은 빠르고 양방향이며 캘린더에서 바로 작업을 관리할 수 있습니다.
한 가지 제한점: Todoist가 만든 이벤트가 Google Calendar에서 비공개로 표시됩니다. 캘린더를 공유하면 다른 사람들은 일반적인 “바쁨” 블록만 보게 됩니다.
Full working script:
Todoist 이벤트를 공개하는 이유
- 공유 캘린더 – 동료나 가족이 당신이 무엇을 하는지, 단순히 바쁜 것만이 아니라 확인할 수 있어야 합니다.
- 다중 계정 설정 – 비공개 이벤트는 업무와 개인 캘린더 간에 잘 병합되지 않으며, 공개 이벤트는 더 많은 맥락을 제공합니다.
- 캘린더 위임 – 비서나 파트너가 실제 작업 및 시간 블록을 기준으로 계획을 세울 수 있습니다.
이 스크립트는 Todoist가 만든 이벤트의 가시성을 비공개에서 공개로 자동으로 전환합니다.
iCal 피드를 바로 사용하지 않는 이유
Todoist는 iCal 피드도 제공하는데, 이는 다음과 같습니다:
- 설정이 더 간단함
- 가시성이 이미 공개와 비슷함
하지만 iCal 피드에는 큰 단점이 있습니다:
- 단방향(읽기 전용): Google Calendar에서의 변경 사항이 Todoist에 동기화되지 않음.
- 느린 동기화: 업데이트가 몇 시간 지연될 수 있음.
- 작업 완료/편집 불가 Google Calendar에서.
기본 연동은 다음을 제공합니다:
- 양방향 동기화 (Google Calendar에서 편집하면 Todoist에 반영됨)
- 실시간에 가까운 업데이트
- Google Calendar에서 직접 작업을 완료/조정할 수 있는 기능
이 스크립트를 사용하면 이러한 장점을 유지하면서 이벤트를 공개할 수 있습니다.
스크립트 작동 방식
스크립트(예제 Gist 참조)는 Google의 Calendar Advanced Service와 sync tokens를 사용합니다:
- 자동으로 “Todoist” 캘린더를 찾습니다.
- 첫 실행: 지난 30일의 이벤트를 가져와 비공개 → 공개로 변경합니다.
- 이후 실행: sync 토큰을 사용해 새 이벤트 또는 수정된 이벤트만 가져옵니다.
- 효율적: 초기 실행 이후 전체 캘린더 스캔이 없습니다.
- 미래 날짜 작업: 몇 년 뒤에 예약된 이벤트도 생성 시 즉시 처리됩니다.
빠른 설정 (≈5분)
- New project 로 이동합니다.
- 서비스 추가: Resources → Advanced Google services → Google Calendar API를 활성화합니다.
- Gist에서 스크립트를 복사하여
Code.gs에 붙여넣습니다. - 스크립트를 승인하기 위해
updateTodoistEvents()를 한 번 실행합니다. - 트리거를 추가합니다: 시간 기반, 10‑15분마다.
이제 새로운 Todoist 이벤트가 자동으로 공개됩니다.
문제 해결
| 문제 | 해결책 |
|---|---|
| “Todoist 캘린더를 찾을 수 없음” | 스크립트에서 캘린더 이름을 업데이트하세요: cal.summary === 'YourCalendarName'. |
| “API 호출 실패” | Advanced services에서 Google Calendar API가 활성화되어 있는지 확인하세요. |
| Sync 토큰 오류 | 스크립트가 자동으로 잘못된 토큰을 재설정합니다; 필요하면 함수를 다시 실행하세요. |
이 방법이 적합한 경우
Use this solution if:
✓ You use the native Todoist ↔ Google Calendar integration
✓ You share your calendar and want visible task details
✓ You need bi‑directional, real‑time sync
✓ You prefer a set‑and‑forget Apps Script solution
전체 스크립트 및 업데이트
전체 스크립트와 향후 업데이트는 다음에서 확인할 수 있습니다:
별표를 달거나 포크하고, 댓글에 튜닝(예: 프로젝트별 필터링 또는 사용자 지정 캘린더 이름) 공유를 자유롭게 하세요.