将 Todoist 任务转换为公开的 Google Calendar 事件(使用 Google Apps Script + Sync Tokens)
发布: (2026年1月15日 GMT+8 22:35)
4 min read
原文: Dev.to
Source: Dev.to
Todoist 与 Google 日历的原生集成快速、双向,并且可以直接在日历中管理任务。
唯一的限制是:Todoist 创建的事件在 Google 日历中显示为私有。当你共享日历时,其他人只能看到通用的“忙碌”块。
完整可用脚本:
为什么要将 Todoist 事件设为公开?
- 共享日历 – 同事或家人需要看到你在做什么,而不仅仅是你忙碌。
- 多账户设置 – 私有事件在工作日历和个人日历之间合并不佳;公开事件提供更多上下文。
- 日历委派 – 助理或伴侣可以根据实际任务和时间块进行安排。
该脚本会自动将 Todoist 创建的事件的可见性从 私有 切换为 公开。
为什么不直接使用 iCal Feed?
Todoist 也提供 iCal 订阅,优势在于:
- 设置更简单
- 可见性通常已经类似公开
然而,iCal Feed 存在重大缺点:
- 单向(只读): 在 Google 日历中的更改不会同步回 Todoist。
- 同步慢: 更新可能会延迟数小时。
- 无法在 Google 日历完成/编辑任务。
原生集成 提供:
- 双向同步(在 Google 日历中的编辑会反映到 Todoist)
- 近实时 更新
- 能够直接在 Google 日历中 完成/调整任务
该脚本让你在保持这些优势的同时,将事件设为公开。
脚本工作原理
脚本(见 Gist)使用 Google 的 Calendar Advanced Service 和 sync tokens:
- 自动查找 你的 “Todoist” 日历。
- 首次运行: 获取最近 30 天的事件并将私有 → 公开。
- 后续运行: 使用 sync token 只检索新建或已修改的事件。
- 高效: 初始运行后不再进行完整日历扫描。
- 未来日期任务: 即使是几年后的任务,也会在创建时立即处理。
快速设置(≈5 分钟)
- 前往 New project。
- 添加服务: Resources → Advanced Google services → 启用 Google Calendar API。
- 从 Gist 复制脚本并粘贴到
Code.gs。 - 运行
updateTodoistEvents()一次以授权脚本。 - 添加触发器:Time‑driven,每 10‑15 分钟一次。
现在,新的 Todoist 事件会自动变为公开。
故障排除
| 问题 | 解决方案 |
|---|---|
| “未找到 Todoist 日历” | 在脚本中更新日历名称:cal.summary === 'YourCalendarName'。 |
| “API 调用失败” | 确保在 Advanced services 中已启用 Google Calendar API。 |
| 同步令牌错误 | 脚本会自动重置无效令牌;如有需要,重新运行函数。 |
何时适合使用此方案
如果符合以下条件,请使用此解决方案:
✓ 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
完整脚本及更新
完整脚本及后续更新可在以下地址获取:
欢迎在评论中点赞、fork 或分享你的改进(例如按项目或自定义日历名称进行过滤)。