使用 REST API 向 Google Chat 发送消息(Google 示例在 2020 年不起作用)

Kyl*_*ura 3 google-api chatbot google-apps-script hangout service-accounts

我什至从哪里开始......(谷歌,你为什么要这样伤害我?)

背景信息

使用 Google Apps Script创建了一个新的聊天机器人,它接收来自Google Chat 中用户的消息并以一条消息同步响应(每条消息只能有一个来自聊天机器人的响应)。

现在我需要一种发送异步消息的方法,以便机器人可以自己发送消息,或者一次发送多个单独的响应。

问题

谷歌聊天REST API有一个方法,以异步方式创建消息但这种方法(spaces.messages.create)不工作!从 2020 年开始,没有此方法的工作示例。

这是使用 REST API 创建消息的Google示例代码

问题在于,在他们的示例中,SCOPE设置为不再存在的 URL

var SCOPE = 'https://www.googleapis.com/auth/chat.bot';
Run Code Online (Sandbox Code Playgroud)

如果您导航到该 URL,您将看到此 404 错误:

Not Found
Error 404
Run Code Online (Sandbox Code Playgroud)

此外,如果您检查可用 OAuth2 范围列表,您会注意到没有与环聊聊天相关的范围,并且没有提及chat.bot示例代码中使用的范围。

我尝试了什么?

我已经通读了 StackOverflow 上与此聊天 API 相关的每个问题,以及 REST API 的每个教程。

综上所述

如何使用Google Chat REST API将消息Google Apps Script发送Google Chat ?

Google 的文档似乎已经过时,截至 2020 年 8 月,此 API 的所有示例都没有工作。他们要么不知道他们的 REST API 不起作用,要么在没有告诉任何人的情况下弃用了 REST API。

Raf*_*rmo 8

回答:

我可以确认chat.bot范围确实存在。要使用 REST API 设置聊天机器人,您 必须 使用服务帐户

更多信息:

根据您在使用 Apps 脚本开发机器人上链接的文档,用于在触发器上发送异步消息:

...目前实现此目的的唯一方法是通过外部 HTTP API(请参阅文档)。这需要通过OAuth2 for Apps 脚本库使用云服务帐户(请参阅文档)。

这意味着,您必须首先在 GCP 控制台中设置一个服务帐户,以便可以将chat.bot范围用于这些消息。整个过程对于初学者来说可能会非常艰巨,所以我将在这里提供从头到尾的步骤。

过程:

创建服务帐户:

  • 导航到Google Cloud Console并创建一个新的 GCP 项目。点击Select a project页面顶部并点击NEW PROJECT
    • 您需要提供Project name,其他字段应自动为您填写。
  • 按下CREATE- 屏幕右上角将出现一个新的弹出窗口,确认正在创建一个新项目。加载后,您可以单击VIEW
  • 单击?左上角的图标,然后按照APIs & Services > Credentials菜单项进行操作。
  • 在此页面顶部,单击+ CREATE CREDENTIALS > Service Account
    • 为服务帐户指定名称和描述,然后按CREATE,然后按CONTINUE,最后按DONE

您的服务帐户现已创建。

创建服务帐户凭据:

使用应用脚本开发机器人页面的示例中提供的代码将需要这些。

  • 创建服务帐户后,您将被重定向回可用于 GCP 项目的凭据列表。在该Service Accounts部分下,单击您新创建的服务帐户。这将被称为service-account-name@project-name-XXXXXX.iam.gserviceaccount.com
  • 点击 ADD KEY > Create new key
  • 保持JSON选中状态,然后按CREATE
    • 这将启动凭据文件的下载,您需要使用该文件以该服务帐户的身份访问 API。不要丢失或共享此文件。如果丢失,您将需要为此帐户删除并创建新凭据。

启用 Hangouts Chat API:

  • 返回? > APIs & Services,然后选择Library
  • 搜索Hangouts Chat API并单击唯一的结果。
  • 单击ENABLE。这将为您的项目启用 API。

注意:不要关闭此选项卡!我们稍后仍需要使用 GCP 控制台。

设置 Apps 脚本项目:

  • 创建一个新的 Apps 脚本项目。
  • 现在,您可以将示例从异步消息页面复制并粘贴到新项目中。
  • 打开您从 GCP 控制台下载的凭据文件。
    • 复制private_key值(以 开头的值-----BEGIN PRIVATE KEY-----并将其粘贴到SERVICE_ACCOUNT_PRIVATE_KEYApps 脚本项目中的值中。
    • 同时client_email从凭证文件中复制该值,并将其粘贴到SERVICE_ACCOUNT_EMAILApps 脚本项目中。

为了像示例中一样使用 Google Apps Script OAuth2 库,您需要使用库的脚本 ID 将该库添加到项目中。

  • 在 Apps Script 项目 UI 中,按照Resources > Libraries...菜单项,将 OAuth2 脚本 ID 复制粘贴到Add a library框中
  • 确保选择库的最新稳定版本(在撰写本文时,这是版本 38)
  • Save

接下来,您需要将 Apps 脚本项目链接到您之前创建的 GCP 项目。

  • 返回 GCP Console 选项卡,然后按照? > IAM & Admin > Settings菜单项进行操作。
  • 复制Project number此页面上的定义。
  • 在您的 Apps 脚本项目中,按照Resources > Cloud Platform project...菜单项操作,然后将项目编号粘贴到Enter Project Number here对话框中。
  • 单击Set Project

设置项目清单: 为了在 Apps 脚本中使用聊天机器人,您必须chat在项目的清单中包含密钥。

  • 在 Apps 脚本 UI 中,单击View > Show manifest file
  • 在最后一个键值对之后,添加以下内容:
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }
Run Code Online (Sandbox Code Playgroud)

你的完整清单文件现在看起来像这样:

{
  "timeZone": "Europe/Paris",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Drive",
      "serviceId": "drive",
      "version": "v2"
    }],
    "libraries": [{
      "userSymbol": "OAuth2",
      "libraryId": "1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF",
      "version": "38"
    }]
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "chat": {
    "addToSpaceFallbackMessage": "Thank you for adding me!"
  }
}
Run Code Online (Sandbox Code Playgroud)
  • 保存您的项目。

最后步骤:

你快完成了!现在,您需要从清单中部署机器人,并在 GCP 中设置配置并设置将进行实际调用的触发器。

部署机器人:

  • 在 Apps Script UI 中,转到Publish > Deploy from manifest...并点击Create新打开的对话框。
    • 注意:如果要将 Head 部署用于整个域,则不能使用 Head 部署,因此必须创建新部署。
  • 为部署提供名称和描述,然后按Save
  • 完成保存后,按Get ID您刚创建的部署旁边的 ,然后复制Deployment ID.

设置 GCP 配置:

  • 返回云控制台,您现在需要导航到? > APIs & Services > Dashboard
  • 在此页面底部的已启用 API 列表中,选择Hangouts Chat API.
  • 在左侧菜单中,选择Configuration
  • 设置您的机器人配置。您将需要提供Bot nameAvatar URLDescription。设置功能设置,使其在房间内工作。
  • 在 下Connection Settings,选择Apps Script project并粘贴上一节中的部署 ID。
  • 为您的 Apps 脚本机器人授予相关权限,然后按Save

难以捉摸的触发器:

  • 您现在唯一需要做的就是设置触发器。这就像一个普通的 Apps 脚本触发器 - 从 Apps 脚本中的Edit > Current project's triggers菜单项完成。要完成示例,请单击右下角的 + 添加触发器按钮,并设置触发器设置如下:

  • 选择要运行的函数: onTrigger

  • 选择应该运行的部署:Head

  • 选择事件源:时间驱动

  • 选择基于时间的触发器类型: Minutes timer

  • 选择分钟间隔: Every minute

然后按保存。

你完成了!这个创建的机器人现在将每分钟发布到它在当前时间的所有房间。

我希望这个解释对你有帮助!

参考: