You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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);
  }
}

后续步骤

  1. 运行修改后的代码,查看输出里是否出现标记为“来自Google Docs”的任务,同时记录对应的任务列表ID。
  2. 后续同步时,可以直接针对这个特定的任务列表ID拉取任务,不用再遍历所有列表。
  3. 确认你的API授权范围包含tasks.readonly或tasks,避免因权限不足导致无法读取隐藏列表。

内容的提问来源于stack exchange,提问作者Álvaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:36:52