3

我正在尝试制作一个小型 Google 脚本,它会TaskList在搜索我的 GMail 电子邮件后自动将 Google 任务添加到“我的列表”中。

一切都很好,除了添加一个链接到Task生成的电子邮件。尝试遵循 API 文档并没有真正的帮助。

这是实际任务生成器功能的代码:

function addTask(taskListId, myTitle, myEmailLink) {
  var task = Tasks.newTask(); // effectively same as "= {}".
  task.title = myTitle
  task.notes = 'blank';

  task.links = [{}]
  task.links[0].description = 'Link to corresponding email';
  task.links[0].type = 'email';
  task.links[0].link = 'myEmailLink';

  task = Tasks.Tasks.insert(task, taskListId);
}

任何想法为什么我收到的任务没有links

4

2 回答 2

3

正如其他人所指出的,根据Google Tasks API 文档,不幸的是,链接集合是只读的。

作为一种潜在的解决方法,您似乎可以将链接添加到任务的注释部分,然后可以直接从 GMail 的任务窗格中单击这些链接。

图片:带有可点击链接的任务

可以修改您的函数以将链接放在注释部分,如下所示:

function addTask(taskListId, myTitle, myEmailLink) {
  var task = Tasks.newTask(); // effectively same as "= {}".
  task.title = myTitle
  task.notes = 'link: ' + myEmailLink;

  task = Tasks.Tasks.insert(task, taskListId);
}

将此与线程对象上的getPermalink()函数相结合,GmailApp可以获取指向您正在查找的电子邮件的深层链接。

图片:带有电子邮件固定链接的任务

除了其他一些事情之外,我正在编写一组脚本来执行您正在谈论的一些事情:https ://github.com/tedsteinmann/gmailAutoUpdate

在我的解决方案中,我有一个函数可以抓取带有特定标签的 GMail 线程(在我的情况下为 @Task),然后创建一个任务,将主题thread.getFirstMessageSubject()和注释设置为thread.getPermalink()

整个函数如下所示:

function processPending_() {

  var label_pending = GmailApp.getUserLabelByName(LABEL_PENDING);
  var label_done = GmailApp.getUserLabelByName(LABEL_DONE);

  // The threads currently assigned to the 'pending' label
  var threads = label_pending.getThreads();

  // Process each one in turn, assuming there's only a single
  // message in each thread
  for (var t in threads) {
    var thread = threads[t];

    // Grab the task data
    var taskTitle = thread.getFirstMessageSubject();
    var taskNote = 'Email: ' + thread.getPermalink();

    // Insert the task
    addTask_(taskTitle, taskNote, getTasklistId_(TASKLIST));

    // Set to 'done' by exchanging labels
    thread.removeLabel(label_pending);
    thread.addLabel(label_done);
  }

  // Increment the processed tasks count
  Logger.log('Processed %s tasks', threads.length);
}
于 2019-04-10T21:10:57.580 回答
2

根据 Google Tasks API 文档:

links[] list
链接的集合。此集合是只读的。

您不能通过修改任务资源(即您的代码)来设置这些链接

task.links = [{}]
task.links[0].description = 'Link to corresponding email';
task.links[0].type = 'email';
task.links[0].link = 'myEmailLink';

只是被服务器忽略。

TaskLinks据我所知,在 Googleplex 之外无法使用且不可配置。对于 API 用户来说,它们也可能不存在。

我能够生成Task具有一个的唯一方法是使用 Gmail UI 并选择“添加到任务”。然后,生成的任务在 Task 项的最后一行中包含此代码段:

在此处输入图像描述

于 2018-04-29T21:14:08.123 回答