Google 应用程序脚本执行 API 的正确范围?

Correct scope for Google App Script Execution API?

我希望通过 运行 通过 Execution API 设置 Google 应用程序脚本来自动化一些 HR 工作。在不深入细节的情况下,我想将员工评估数据作为参数传递到 App 脚本中。然后该脚本将使用此数据来编译 "Employee Review" GDoc。

到目前为止,我有 运行 个使用 Execution API 的简单测试应用程序脚本。例如,我可以成功 运行 一个记录字符串或与电子表格交互的简单函数。到目前为止,一切都很好。

但是我 运行 在尝试写入 GDoc 时遇到了问题(不幸的是,这对我的任务来说是不可或缺的)。这是我的配对脚本:

// TODO: Eventually, we'll pass these variables as arguments
var docId = "MY-DOC-ID";

// Find the team member review doc
var doc = DocumentApp.openById(docId);

// Replace placeholder text
var docBody = doc.getActiveSection();
docBody.replaceText('{{DATE}}', "Date set by App Script!!!");
doc.saveAndClose();

当我在 App Scripts web UI 中按下 "Run" 按钮时,此脚本有效。但是当我尝试通过 Execution API 运行 时,我得到:

{
  "error": "unauthorized_client",
  "error_description": "Unauthorized client or scope in request."
}

显然我没有提供正确的范围?按照文档,我可以在 Project Properties > Scopes 中找到必要的范围,它说:

但是当我尝试添加该范围时,它不起作用。正如我所说,其他范围(例如 https://www.googleapis.com/auth/spreadsheets)工作得很好。也许 auth/documents 范围不再受支持,或者他们的 API?

中存在错误

问题

  1. 正确的范围是什么?我能看到a big list here but I don't see https://www.googleapis.com/auth/documents,所以?
  2. 还有其他建议吗?例如,是否可以直接使用 Google 客户端 API 写入 Google 文档(即不使用 App 脚本)?

呵呵。我想出了解决问题的办法。虽然这是一个愚蠢的错误,但它仍然值得发布,因为它可能会在未来避免其他人的困惑。

首先,简单介绍一下我的设置。我正在使用 Service Account 向 Google 客户端 API 进行身份验证。此外,在使用服务帐户设置时很常见,我冒充了我们组织内的用户(特别是我自己的帐户)。

我遗漏的步骤(事后看来很明显)...

  1. 以您正在模拟的人的身份登录到应用程序脚本网站 UI。
  2. 通过按播放按钮手动 运行 脚本
  3. 如果模拟用户尚未授予访问所需范围的权限,系统将提示您这样做。
  4. 授予访问权限后(特别针对 https://www.googleapis.com/auth/documents 范围),我的授权错误消失了。

所以教训:确保您模拟的帐户已授予您脚本所需的所有范围的访问权限。