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
),那么也无法向用户显示消息。必须手动完成刷新。
我目前正在使用 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
),那么也无法向用户显示消息。必须手动完成刷新。