google-apps-script - Gmail 附加组件 onTriggerFunction 仅在每封电子邮件中运行一次,即使再次打开电子邮件也是如此
问题描述
我们正在构建一个GmailonTriggerFunction
插件,但是我们希望在调用插件时根据某些业务逻辑显示不同的卡片。当电子邮件打开时,该功能第一次运行时效果很好。
我们有条件逻辑,但 Gmail 似乎缓存了返回第一张卡片的初始调用的结果。转到另一封电子邮件并返回原始电子邮件,onTriggerFunction
不会再次调用,因此不会运行条件逻辑来更改呈现的初始卡片。
无论如何要让 onTriggerFunction 在每次打开电子邮件时运行,而不仅仅是第一次打开电子邮件?
这是一个带有触发函数的示例插件,该函数返回显示当前时间的单张卡片:
代码.js
function buildAddOn(e) {
var card = CardService.newCardBuilder();
card.setHeader(CardService.newCardHeader().setTitle(new Date().toLocaleTimeString()));
return [card.build()];
}
应用脚本.json
{
"timeZone": "GMT",
"dependencies": {
},
"oauthScopes": ["https://www.googleapis.com/auth/gmail.addons.execute"],
"gmail": {
"name": "Minimal example",
"logoUrl": "https://www.gstatic.com/images/icons/material/system/2x/bookmark_black_24dp.png",
"contextualTriggers": [{
"unconditional": {
},
"onTriggerFunction": "buildAddOn"
}],
"primaryColor": "#4285F4",
"secondaryColor": "#4285F4",
"openLinkUrlPrefixes": ["https://mail.google.com/"],
"version": "TRUSTED_TESTER_V2"
}
}
导航到较旧的对话时,会显示一个微调器,然后显示当前时间。但是,当导航回以前显示的对话时,时间的旧值会立即显示,这表明正在发生一些缓存:
插件内的操作或我们应用程序中的其他活动可能会影响重新打开先前显示的对话时应显示的内容。这意味着重新显示卡片的旧副本会导致用户出现意外行为。
解决方案
不幸的是,目前(2019 年 7 月)无法强制触发器在每次打开电子邮件时运行。您可以将ActionResponseBuilder.setStateChanged(true)
其用作对按钮单击的响应,以指示 Gmail 清除缓存,但它不能与正常的卡片响应一起发送。
推荐阅读
- python - AttributeError:“NoneType”对象没有“读取”属性?
- python-3.9 - 将 Python 添加到 PATH
- javascript - 未捕获的 TypeError:data.reduce 不是函数
- elasticsearch - 在elasticsearch中按某个字段分组时,我们如何获得每个组的计数?
- reactjs - 文本不会填充到 React Grid 中
- python - 简单子查询的混淆 SQLAlchemy 转换
- javascript - 如何从 flask_view_counter 获取视图列表?
- tsql - TSQL比较相似和重复项的集合
- c - fork既没有失败也没有指定加载程序?
- spring - 如何 Spring Cache JPA 嵌套对象?