从Google Docs分配的Google Tasks无法通过API查询的求助
Google Docs分配的任务无法通过Tasks API拉取的问题
近期Google Workspace推出了Google Docs内分配任务的功能,这些任务能在Google Tasks应用里正常显示,但通过API(甚至Zapier)查询时完全找不到。有没有开发者碰到过这个问题?我想通过API拉取这些任务并同步到我的Things3收件箱,附上我当前使用的代码:
function listTasks(taskListId) { try { // List the task items of specified tasklist using taskList id. Tasks.Tasks.list(taskListId,{state:"1"}) const tasks = Tasks.Tasks.list(taskListId); // If tasks are available then print all task of given tasklists. if (!tasks.items) { Logger.log('No tasks found.'); return; } // Print the task title and task id of specified tasklist. for (let i = 0; i < tasks.items.length; i++) { const task = tasks.items[i]; if (task.status != "completed"){ Logger.log(task.title) //Logger.log('Task with title "%s" and ID "%s" was found and status %s.', task.title, task.id, task.completed); } } } catch (err) { // TODO (developer) - Handle exception from Task API Logger.log('Failed with an error %s', err.message); } }
问题分析及解决建议
- 隐藏任务列表问题:Docs中创建的任务默认属于隐藏的系统任务列表,常规API调用不会返回这类列表。你需要先枚举所有任务列表(包括标记为
hidden的),才能找到对应任务所在的列表。 - 代码参数错误:你代码里第一次调用
Tasks.Tasks.list时用了{state:"1"},这个参数无效——Tasks API的state参数只能是completed、needsAction或all,而且这次调用的结果没被使用,属于冗余代码,会干扰逻辑。 - 任务识别:Docs生成的任务通常会在
notes或links字段里包含对应的文档链接,你可以通过这个特征识别出这类任务。
修改后的代码示例
function listAllTasksIncludingHiddenLists() { try { // 获取所有任务列表(包括隐藏的) const taskLists = Tasks.Tasklists.list(); if (!taskLists.items) { Logger.log('未找到任何任务列表'); return; } // 遍历每个任务列表拉取任务 for (const list of taskLists.items) { Logger.log(`--- 任务列表: ${list.title} (ID: ${list.id}) ---`); // 拉取所有状态的任务 const tasks = Tasks.Tasks.list(list.id, { state: 'all' }); if (!tasks.items) { Logger.log('此列表无任务'); continue; } // 筛选未完成任务并标记Docs来源 for (const task of tasks.items) { if (task.status !== 'completed') { const isDocTask = task.notes?.includes('docs.google.com') || task.links?.some(link => link.url.includes('docs.google.com')); Logger.log(`任务标题: ${task.title} ${isDocTask ? '(来自Google Docs)' : ''}`); } } } } catch (err) { Logger.log('请求失败: %s', err.message); } }
后续步骤
- 运行修改后的代码,查看输出里是否出现标记为“来自Google Docs”的任务,同时记录对应的任务列表ID。
- 后续同步时,可以直接针对这个特定的任务列表ID拉取任务,不用再遍历所有列表。
- 确认你的API授权范围包含
tasks.readonly或tasks,避免因权限不足导致无法读取隐藏列表。
内容的提问来源于stack exchange,提问作者Álvaro
相关产品推荐
相关产品推荐

