有人能准确描述Gmail附加脚本的触发条件吗?显然,每次用户在Gmail对话之间导航时都不会调用触发器.
我能找到的唯一文档是https://developers.google.com/gmail/add-ons/how-tos/building#note1,其中说明
唯一可用的上下文触发器类型是无条件的,无论内容如何,都会触发所有电子邮件.
我将此解释为每次用户导航到不同的gmail对话时都会调用触发器,但事实并非如此:
我第一次导航到某个Gmail对话时,会触发加载项触发器.当我使用"较新"或"较旧"角括号按钮导航到另一个对话时,再次为新对话调用触发器.但是,当我浏览回用尖括号按钮,第一页,附加上触发器也不会触发.(很容易通过在创建每个UI卡时显示时间戳来显示这一点.)似乎有某种内部缓存正在进行 - 有没有办法禁用它,或者每次用户运行我的附加脚本在Gmail对话之间导航?
我一直在阅读gmail 插件。它们具有在您打开电子邮件时触发的上下文触发器。
当我收到电子邮件时是否可以触发服务?我能找到的最好的是unconditional但只有在打开电子邮件时才会触发。
我们正在构建Gmail附加组件,但是我们希望在onTriggerFunction调用附加组件时根据某些业务逻辑显示不同的卡.这在电子邮件打开时第一次运行该功能时工作正常.
我们有条件逻辑,但Gmail似乎缓存了返回第一张卡的初始调用的结果.转到另一封电子邮件并返回原始电子邮件,onTriggerFunction不会再次调用,因此不运行条件逻辑来更改呈现的初始卡.
无论如何,每次打开电子邮件时都要运行onTriggerFunction,而不是只在第一次打开电子邮件时运行?
这是一个带有触发器功能的附加组件,它返回一张显示当前时间的卡片:
Code.js
function buildAddOn(e) {
var card = CardService.newCardBuilder();
card.setHeader(CardService.newCardHeader().setTitle(new Date().toLocaleTimeString()));
return [card.build()];
}
Run Code Online (Sandbox Code Playgroud)
appsscript.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"
}
}
Run Code Online (Sandbox Code Playgroud)
导航到较旧的对话时,将显示微调器,然后显示当前时间.但是,当导航回以前显示的对话时,会立即显示旧的时间值,表明正在进行一些缓存:

加载项中的操作或我们应用中的其他活动可能会影响重新打开以前显示的对话时应显示的内容.这意味着重新显示卡的旧副本会导致用户意外行为.
我刚刚开始尝试构建新的Gmail加载项,并且遇到以下错误消息:
"你没有权限调用fetch"
在脚本编辑器中测试加载项时,以及在Gmail中部署时,会发生这种情况.以下是代码示例:
function getContextualAddOn(e) {
var API_KEY = 'TESTKEY';
var URL = 'https://[REDACTED]';
var options = {
'method' : 'post',
'contentType': 'application/json',
'headers': {
'x-api-key': API_KEY
},
'payload' : JSON.stringify({ 'foo': 'bar' })
};
var response = UrlFetchApp.fetch(URL, options);
[more code that builds a card]
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它是一个非常直接的用法UrlFetchApp.fetch.我是Apps Script的新手,所以也许我在清单中缺少一些权限声明或范围.我尝试了一个更简单的例子UrlFetchApp.getRequest,但是也失败了"你没有权限调用getRequest".
插件的清单与示例中的清单相同:
{
"timeZone": "America/New_York",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": [
"https://www.googleapis.com/auth/gmail.addons.execute",
"https://www.googleapis.com/auth/gmail.addons.current.message.readonly",
"https://www.googleapis.com/auth/userinfo.email"
],
"urlFetchWhitelist": [
"https://[REDACTED]"
],
"gmail": {
"name": "Test …Run Code Online (Sandbox Code Playgroud) google-apps-script gmail-contextual-gadgets gmail-api gmail-addons
我开发了一个Google Apps脚本来自动处理一些电子邮件(连接到Gmail),或多或少像机器人一样,并且它按预期工作.它使用Time-driven触发器每分钟运行一次Minutes timer > Every minute:
是否可以为其他用户(包括商业用户)分发此"脚本",还是必须是开源的?(注意:Google Apps脚本在内部使用Javascript)
我看到Deploy as web app,Deploy as API executable,Register in Chrome Web Store,Deploy as web add-on,Deploy from manifest,但我不知道用它来提供给其他用户此项服务之一.
此外,它是否必须在Chrome网上应用店中,还是有其他方式向客户商业分发/授予对此类应用的访问权限?
TL; DR:如何向客户分发处理Gmail电子邮件的Google Apps脚本?(需要每分钟自动运行).
注意:似乎可以在此处获取Gmail插件:https://gsuite.google.com/marketplace/category/works-with-gmail.但似乎我们不能在商业上出售附加产品.Gmail附加组件必须免费吗?
注意:该脚本未链接到精确的浏览器或计算机(因此无法在特定计算机上安装浏览器扩展程序),它每分钟都会在Gmail服务器上安静地运行.
deployment gmail google-apps-script chrome-web-store gmail-addons
我正在构建一个 Gmail 插件,它允许用户将模板插入撰写窗口。
它工作正常,但我想获取他们正在编辑的草稿的 ID,但我不知道如何获取。
假设它是最新的草稿是不安全的,因为我不是以编程方式创建草稿。
在下面的代码中,“测试”按钮触发一个函数,该函数调用外部端点以加载数据。但是,单击该按钮时什么也没有发生,并且400在控制台区域显示错误消息Invalid Argument。
代码
function buildAddOn(e) {
// Create a section for that contains all user Labels.
var section = CardService.newCardSection()
var action = CardService.newAction()
.setFunctionName("testCall");
var button = CardService.newTextButton().setText('Test').setOnClickAction(action);
section.addWidget(CardService.newButtonSet().addButton(button));
// section.addWidget(CardService.newTextParagraph()
// .setText("This is a text paragraph widget. Multiple lines are allowed if needed.");)
// Build the main card after adding the section.
var card = CardService.newCardBuilder()
.setHeader(CardService.newCardHeader()
.setTitle('Authentication Card')
.setImageUrl('https://www.gstatic.com/images/icons/material/system/1x/label_googblue_48dp.png'))
.addSection(section)
.build();
return [card];
}
function testCall(){
console.log("test");
var data = accessProtectedResource('https://api.ssdf.io/v1.0/asd/4/174203','get');
return CardService.newActionResponseBuilder() …Run Code Online (Sandbox Code Playgroud) 我正在快速启动Gmail插件.
https://developers.google.com/gmail/add-ons/guides/quickstart
当我尝试安装我的开发人员插件时
但是没有复选框......
这个版本有限吗?我们是否需要做其他事情才能实现这一目标?
谢谢你的帮助,保罗C.
我将用一个例子来展示我的问题:
我有一个按钮.单击时,它会根据TextInputFields加载项中的内容创建邮件草稿.我有一个验证功能,可以说明字段填写是否正确.
如果我想以某种方式通知用户有关错误的字段,我必须创建一个通知或重建带有错误信息的卡.这些操作可以正常返回Action,但不能返回composeAction(因为composeAction必须使用构建的草稿返回),所以我必须向composeAction按钮注册一个简单的操作.
当我点击这种按钮时,只有一个动作执行而另一个动作无效.
关于我如何尝试实现的一些代码:
section.addWidget(CardService.newTextButton()
.setText('Validate and Create')
.setComposeAction(CardService.newAction().setFunction('doIt'), CardService.ComposedEmailType.STANDALONE_DRAFT)
.setOnClickAction(CardService.newAction().setFunction('notify')));
Run Code Online (Sandbox Code Playgroud)
ActionFunctions:
function doIt(event){
validate the event['formInput'] object;
if(valid the formInput)
create andr return the draft;
else
return null;
}
function notify(event){
validate the event['formInput'] object;
if(valid the formInput)
return null;
else
return notify or rebuilded card with error info;
}
Run Code Online (Sandbox Code Playgroud)
主要是简单的动作运行,而compose什么都不做.如果我将Logger.log()函数放在回调函数中,则只有一个出现在api日志中.
有人在验证之前尝试过并在同一次点击中创建草稿吗?