GAS 中的 Gmail API:在状态变化时刷新界面?

Gmail API in GAS: Refreshing Interface on State Change?

我目前正在使用 Google-Apps-Scripts 编写来更改线程和消息上的标签。脚本完成后,负载将被移动,但在用户与 Gmail 交互之前,用户前端的显示不会改变。

有没有办法将刷新命令推送到 Gmail?我如何优雅地向用户显示“工作已完成”,以便他们知道消息现在已正确标记?

我直接针对 Gmail API,而不是 GmailApp。我发现了 ActionResponseBuilder.setStateChanged(),但问题是我目前没有使用任何类型的前端界面。这一切都在后台。

这是我用来抓取消息进行修改(根据要求)的一些代码的缩写示例:

function changeLabel(ids,oldLabel,newLabel) {
  Gmail.Users.Messages.batchModify({
    "ids":ids,
    "addLabelIds":oldLabel,
    "removeLabelIds":newLabel
  },"me");
}

function start() {
  // Labels to work with
  const FOO = "Label_5095729546757874255";
  const BAR = "Label_5102306845672214551";

  // API call to retrieve list of messages by Label
  var msgIdsByLabel = new MessageIndex(FOO);  

  // API call to retrieve message contents
  var payloadMessages = new Messages(msgIdsByLabel);

  var manifestMessagesToMove = [];

  for (var i=0;i < Object.keys(payloadMessages.response).length; i++) {
    // Criteria for selecting messages to move goes here
    manifestMessagesToMove[i] = payloadMessages.response[i].id;
  }

  // Change labels of Message Ids
  changeLabel(manifestMessagesToMove,FOO,BAR);

  // ??? Refresh Gmail Interface ???
}

很遗憾,这是不可能的。

Gmail UI 无法从 Apps 脚本刷新,因为它 运行 在云中作为用户在 Web 浏览器中查看的会话的单独会话。两者没有连接 - Gmail 也是如此 API.

如果您没有 front-end 界面(又名 Gmail Add-on 利用 CardService),那么也无法向用户显示消息。必须手动完成刷新。