问题标签 [google-apps-script-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1455 浏览

google-apps-script - 通过邮递员向 Google Apps Script API 发出请求

我正在尝试通过邮递员请求使用应用程序脚本 api 远程执行谷歌应用程序脚本功能。

我首先从Google API Playground获得凭据

然后将它们作为 OAuth2 凭据输入邮递员,并在标题中输入如下: 在此处输入图像描述

然后请求适当的链接: 在此处输入图像描述

然后身体准备: 在此处输入图像描述

然后发出请求后的响应: 在此处输入图像描述

根据Google 的文档,邮递员返回错误 403

表示“用于授权请求的云平台项目与脚本使用的项目不一样”。错误 403 是一个授权错误,可能意味着很多事情,但我们假设该错误是谷歌所宣称的。

我可以完全控制我的脚本使用的 GCP 项目,但我不知道在哪里可以找到用于授权请求的项目。

我在哪里可以访问这个 GCP 项目,以便我可以将我的脚本分配给这个项目,从而消除 403 错误?

谢谢!

0 投票
0 回答
91 浏览

google-apps-script - 向 Apps Script API 发出请求时,将 Apps 脚本部署为具有给定版本的 API Executable 会引发错误?

在详细介绍之前,基本错误是邮递员发出的用于向 Apps Script API 发出请求的 json 响应返回成功或失败,这完全取决于我选择作为 API 可执行文件的脚本版本。

以下是详细信息:

我正在尝试通过邮递员通过 API 远程执行谷歌应用程序脚本功能。在发布我用来测试我们的 API 功能的测试脚本时,作为某个版本的 API 可执行文件,如下所示:

在此处输入图像描述

当发出发布请求以执行从该版本的脚本中不返回任何内容的函数时,我得到以下响应: 在此处输入图像描述

此响应不包含 ExecutionResponse 对象,大概是因为我的函数不返回任何内容。不过,我想看看我是否可以返回数据,所以我更新了这个函数以返回一个简单的“helloWorld!”。在脚本的第二版中。当作为 API 可执行文件重新发布时,这次发布的是第二版:

在此处输入图像描述

邮递员的回复是这样的:

在此处输入图像描述

我可以仅通过在我的脚本版本之间切换来确认该错误是可重现的(以及我是否已生成新凭据以反映 API 可执行更改不会更改响应);这是两个响应之间唯一变化的变量;无论我是否在更改版本后创建新凭据,都会产生相同的响应差异。是什么导致了这里的错误?

0 投票
0 回答
107 浏览

rest - 将 GAS 脚本部署为 API 可执行延迟以供 GAS API 使用?

尝试通过 API 远程执行 GAS 脚本函数时,我注意到一些异常行为。返回 404 错误,但我已完成以下所有步骤:

我有一个像这样的测试功能:

在此处输入图像描述

这是脚本文件中唯一的函数,如您所见,脚本不需要运行范围。

我已将脚本与 GCP 项目相关联:

在此处输入图像描述

我还部署为具有已发布版本的 API 可执行文件: 在此处输入图像描述

我有在与脚本关联的同一项目中创建的 OAuth2 客户端 ID 凭据,并且我有从Google Developer Playground创建的 authtoken 凭据,它使用来自 GCP 项目的客户端 ID 和机密,在此范围内获得授权:https:// www.googleapis.com/auth/drive和这个范围:https ://www.googleapis.com/auth/script.external_request并被授权为我,用户是谷歌脚本和 GCP 项目的所有者。

当使用正确的标头、授权凭据和请求正文从邮递员发出请求时,我收到以下错误:

在此处输入图像描述

这在我遵循相同过程的多个其他脚本之前已经发生过,但是通过某种方式,错误似乎可以自行解决,并且我能够成功执行。

我错过了什么,还是有延迟?无论如何,我怎样才能避免这个 404?

0 投票
2 回答
190 浏览

google-apps-script - UrlFetchapp 响应错误 {"success":false,"error":"org.json.simple.JSONArray 无法转换为 org.json.simple.JSONObject"}

当我使用 UrlFetchapp 方法在 Google appscript 中调用 API 时出现错误,因为 org.json.simple.JSONArray 无法转换为 org.json.simple.JSONObject

Google appscript 使用 UrlFetchapp 方法获取错误,因为 org.json.simple.JSONArray 无法转换为 org.json.simple.JSONObject

0 投票
1 回答
500 浏览

security - 这种使用 webapp 和 api 可执行文件的设置是否安全合理?

问题

我们(我和一位同事)有一些代码非常适合 webapp 的用例,除了对我们域之外的用户进行身份验证。如果不是因为这个问题,我们本来希望使用以下配置(在清单文件的顶层)。

对于我们域内的用户,我们可以使用Session.getActiveUser()。然后,我们可以将其与我们的数据库进行比较,并显示仅对该帐户可见的敏感数据。

然而,对于我们域外的用户,Session.getActiveUser()给出空字符串'',所以我们不能用它来查询我们数据库中的信息,所以我们需要一些不同的东西。我们想出的是以下设置。

替代设置

"executeAs": "USER_ACCESSING"我们使用和部署 webapp "oauthScopes": ["https://www.googleapis.com/auth/userinfo.email"]。我们使用特权帐户将另一个脚本部署为 API 可执行文件(并按照此处的说明进行操作)。webapp 的主 Code.gs 文件如下所示。

这个想法是,这允许我们以retrieveData(activeUserEmail)特权用户的身份在我们的 API 可执行文件中执行该函数,同时使用 webapp 来找出访问该应用程序的用户的电子邮件地址。Session.getActiveUser()现在适用于我们域之外的用户的原因是我们部署为"executeAs": "USER_ACCESSING".

问题)

我们担心的是 1) 有一种更简单/更好的方法来做到这一点,以及 2) 访问 webapp 的用户可以以某种方式检索用于调用 api 可执行文件中的函数的令牌,我们担心这可能会被用来窃取私人数据。

此问答涉及关注点 2。不幸的是,答案没有引用任何官方文档/资源(并且并不都同意)。此外,在那里,秘密库密钥不存在于 webapp 的源代码中(它在清单文件中),而在我们的例子中,秘密令牌源代码中。

问题:这种替代设置是否安全合理?

更新:我刚刚找到了这个答案,由一个看起来可信的用户撰写。答案是网络应用程序的用户将无法看到网络应用程序的代码,即使应用程序部署为“任何人,甚至匿名”。不过,这种说法是用“我知道的”来对冲的。

0 投票
0 回答
2061 浏览

angular - 如何修复“错误 TS2345:类型的参数”不能分配给“Params$Resources$Scripts$Run”类型的参数

我正在尝试利用 google apps-script API 来运行预制的 google apps 脚本。不幸的是,所有示例文档都不是为 Angular 制作的,但 node.js 是相似的,我一直在尝试用 Angular 重做它。我不断收到此错误并且不明白这里出了什么问题,因为我似乎正在给 API 函数 script.run 它应该要求的参数。

我得到的完整错误是

node_modules/google-auth-library/build/src/auth/oauth2client.d.ts(298,55) 中的错误:错误 TS1039:>环境上下文中不允许使用初始化程序。src/app/app.component.ts(98,3): error TS2345: Argument of type '{ auth: >any; 资源:{函数:字符串;}; 脚本ID:字符串;}' 不能>分配给“Params$Resource$Scripts$Run”类型的参数。对象字面量只能指定已知属性,并且“资源”不存在于类型“Params$Resource$Scripts$Run”中。

我尝试更改资源的类型:{function : string } 以查看是否有帮助,但无济于事。这里的文档:https ://developers.google.com/apps-script/api/reference/rest/v1/scripts/run

似乎暗示这些是它想要的参数。

这是 app.component.ts 中的代码

预期的结果应该是被调用和运行的函数。相反,我收到了错误:

0 投票
0 回答
726 浏览

javascript - Google 数据工作室的自定义社区连接器出错

我正在为 Google 数据工作室创建自定义社区连接器。

我做了以下代码,所以请告诉我这段代码有什么问题。

(1) TypeError: Cannot call method "map" of undefined in function responseToRows(requestedFields, response)

(2) TypeError: Cannot read property "fields" from undefined at var requestedFieldIds = request.fields.map(function(field).

提前致谢。

0 投票
1 回答
277 浏览

google-apps-script - 如何使用范围“https://www.googleapis.com/auth/script.webapp.deploy”

当您在文件oauthScopes的部分内添加此范围时appscript.json

当您尝试使用插件时,您会看到如下内容:

在此处输入图像描述

据我了解,此范围将允许开发人员将插件部署为网络应用程序(每个插件用户的单独网络应用程序,而不是我们在脚本编辑器中手动时唯一的网络应用程序)Deploy as web app


我的问题是如何实际使用这个范围来“将此应用程序发布为网络应用程序”

我的意思是在代码中它必须是ScriptApp.deployWebApp(...)或类似的,对吧?

但我在这里找不到任何东西https://developers.google.com/apps-script/reference/script/script-app

0 投票
1 回答
804 浏览

google-apps-script - 如何将 Google Apps 脚本项目 ID 链接/绑定到 Google 电子表格

我的任务是使用 Google REST API 更新链接到某些电子表格的 Apps 脚本。如果我有脚本 ID,我知道如何更新脚本,但问题是我只有电子表格 ID,我需要更新链接/绑定脚本。

我没有在 Apps Script REST API 中找到任何允许列出链接到电子表格的脚本的方法https://developers.google.com/apps-script/api/reference/rest/

我还尝试了 Google Drive REST API https://developers.google.com/drive/api/v2/reference/children/listhttps://developers.google.com/drive/api/v2/reference/files/list没有运气。

0 投票
1 回答
196 浏览

google-apps-script - 使用 Execution API 在用户授权的附加组件中调用函数

我们正在寻找一种方法来在我们的网络应用程序的用户上下文(授权)中触发插件中的功能。我们尝试使用 Apps Script Execution API 来触发它。流程是附加组件(应用程序脚本)在我们的 Web 应用程序中注册访问令牌,并且 Web 应用程序使用访问令牌触发执行 API。这是第一次。但问题是,访问令牌的有效期只有几分钟。之后,由于授权失败,Web 应用程序无法通过执行 API 启动功能。

问题:

我们使用执行 API 从用户上下文中的另一个 Web 应用程序触发插件/应用程序脚本功能的方法是否正确?

如果是这样,我们如何避免访问令牌过期?显然,应用程序脚本中没有 API 来“获取刷新令牌”/“刷新令牌”。我们如何刷新令牌以使令牌永远有效(直到用户取消)?

在这种情况下,有什么完全不同的方法会有所帮助吗?

我看到像“PearDeck”、“Form Approvals”、“Form Publisher”等附加组件正在成功地做到这一点(通过用户授权从网络应用程序触发附加功能)。

希望在这个论坛得到一些专家的建议。谢谢

使用的执行 API - 令牌过期的问题


函数 doSomeWorkFromUserContext 应该在调用的所有时间都被调用,但在一段时间后会出现授权错误。