使用Apps Script API scripts.run执行函数遇404及403权限错误求助
问题描述
已完成以下操作:
- 创建Google Cloud Project并启用Apps Script API
- 编写Apps Script函数:
function remoteEXE() { return "Ok Google." }
- 将该Apps Script项目与上述GCP绑定
- 通过OAuth2.0 Playground选择作用域
https://www.googleapis.com/auth/script.external_request,获取授权码、访问令牌及刷新令牌 - 构造POST请求,URL包含scriptID,请求体如下:
{ "function": "remoteEXE", "parameters": [] }
遇到的报错情况:
- 发送请求后收到404错误:请求的实体未找到
- 创建API可执行部署后仍报404
- 添加
"devMode": true后出现403错误:调用者无权限 - 替换URL中scriptID为deploymentID仍报404
- 移除
devMode又回到403错误 - 尝试在GAS清单文件添加相同OAuth作用域、重新执行OAuth步骤均无效
更新(2023/03/01)
- 尝试部署为Web应用无变化,确认API Executable部署提供带
:run后缀的URL - 添加Cloud Functions IAM角色(未找到Apps Script API Execute角色),自身为所有者角色
- 错误报告和执行选项卡均无错误信息
解决方案
确认请求URL格式
调用API可执行部署的正确URL必须是:https://script.googleapis.com/v1/scripts/{你的脚本ID}:run注意要保留
:run后缀,且使用脚本ID而非部署ID——部署ID仅适用于Web应用部署,不适用于scripts.run接口。更换OAuth作用域
scripts.run接口需要的作用域是https://www.googleapis.com/auth/script.scriptapp,不是你之前用的script.external_request。去OAuth2.0 Playground换用这个作用域,重新获取授权令牌。配置正确的IAM角色
在绑定的GCP项目中,给授权账号添加Apps Script API Executor角色:- 进入GCP控制台的「IAM与管理员 → IAM」页面
- 点击「添加成员」,输入授权账号邮箱
- 在角色列表中选择「Cloud Platform → Apps Script API Executor」
若找不到该角色,可临时用Editor角色测试(生产环境不建议)。
检查部署配置
创建API可执行部署时,确认:- 部署类型选「API可执行」
- 访问权限根据需求设置(测试阶段可设为「任何人,甚至匿名」)
- 部署完成后,复制脚本ID(不是部署ID)用于请求URL
修正清单文件的作用域
打开Apps Script的appsscript.json清单文件,添加正确的OAuth作用域:{ "oauthScopes": [ "https://www.googleapis.com/auth/script.scriptapp" ] }保存后重新部署项目。
验证devMode的使用条件
当设置"devMode": true时,只有脚本的所有者能调用接口,此时要确保OAuth令牌对应的账号就是脚本所有者。如果用其他账号调用,必须关闭devMode,同时确保部署的访问权限配置正确。
内容的提问来源于stack exchange,提问作者Lucas Sandre
相关产品推荐
相关产品推荐

