我刚刚开始尝试构建新的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]
}
正如您所看到的,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 Add-On",
"logoUrl": "some url",
"primaryColor": "#4285F4",
"secondaryColor": "#4285F4",
"contextualTriggers": [{
"unconditional": {},
"onTriggerFunction": "getContextualAddOn"
}],
"version": "TRUSTED_TESTER_V2"
}
}
Gmail附加组件中是否允许UrlFetchApp
,或者这只是一个错误?我是否需要在清单中添加内容或在脚本编辑器中启用其他选项?
答案 0 :(得分:20)
UrlFetchApp
服务需要额外的范围https://www.googleapis.com/auth/script.external_request
。将其添加到您的范围列表中,代码应该可以正常工作。
每个Apps Script方法所需的范围列在"授权"参考文档(example)中的部分。或者,您可以通过暂时删除清单的oauthScopes
部分并在文件>中查看代码的自动确定范围来发现脚本所需的范围。项目属性>范围即可。 (如果您在清单中定义了任何范围,则会禁用"自动范围检测" Apps脚本的行为。)
参考
答案 1 :(得分:1)
可接受的答案是从2017年开始的。我不知道Google从那以后是否更改了其授权政策,但是仅在 Project Properties 设置中添加新作用域是行不通的。>
如何触发调用fetch
的函数?您不能使用简单的触发器来做到这一点。它们会自动触发,因此无法访问需要授权的服务。 UrlFetchApp
绝对需要许可。无法通过简单的触发器打开对话框来询问用户的内容。
作为脚本所有者,您可以添加新的授权范围,但是当与最终用户一起部署此脚本时会发生什么?他们将如何授予对脚本的权限,以便对一些不熟悉的服务器进行API调用?
要解决此问题,您需要使用可安装的触发器。无论简单触发器中可用的是什么,可安装触发器中都具有相同的含义。
假设您要在打开电子表格时调用API。
在脚本编辑器中,转到编辑>>当前项目的触发器并设置一个新触发器。
在运行下,选择要触发的功能的名称。在OP的情况下,它是getContextualAddOn(e)
函数。
在选择事件源下,选择来自电子表格。
在事件类型下,选择“打开时”。
根据需要配置其他设置并保存。
答案 2 :(得分:0)
改为使用可安装触发器,并编写绑定到可安装触发器的自己的函数。
https://developers.google.com/apps-script/guides/triggers/installable#g_suite_application_triggers
这为我解决了这个问题。