【问题标题】:Send message to Google Chat using the REST API (Google example not working in 2020)使用 REST API 向 Google Chat 发送消息(Google 示例在 2020 年不起作用)
【发布时间】:2020-12-09 05:59:19
【问题描述】:

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

背景信息

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

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

问题

Google Chat REST API有一个create a message asynchronously的方法,但是这个方法(spaces.messages.create)不起作用!从 2020 年开始,没有这种方法的工作示例。

这是 Google 的 example code,用于使用 REST API 创建消息。

问题在于,在他们的示例中,SCOPE 设置为 a URL that no longer exits:

var SCOPE = 'https://www.googleapis.com/auth/chat.bot';

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

Not Found
Error 404

此外,如果您查看list of available OAuth2 scopes,您会注意到没有与环聊或聊天相关的范围,并且没有提及chat.bot中使用的范围示例代码。

我尝试了什么?

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

总结

如何使用Google Chat REST API 将消息从 Google Apps 脚本发送到 Google Chat?

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

【问题讨论】:

    标签: google-apps-script google-api chatbot service-accounts hangout


    【解决方案1】:

    答案:

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

    更多信息:

    根据您在 Developing bots with Apps Script 上链接的文档,用于在触发器上发送异步消息:

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

    这意味着,您必须首先在 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。

    您的服务帐户现已创建。

    创建服务帐户凭据:

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

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

    启用环聊聊天 API:

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

    注意:暂时不要关闭此标签!以后我们仍然需要使用 GCP 控制台。

    设置 Apps 脚本项目:

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

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

    • 在 Apps 脚本项目 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!"
      }
    

    您的完整清单文件现在将如下所示:

    {
      "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!"
      }
    }
    
    • 保存您的项目。

    最后的步骤:

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

    部署机器人:

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

    设置 GCP 配置:

    • 返回 Cloud 控制台,您现在需要导航到 ☰ > APIs & Services > Dashboard。
    • 在此页面底部的已启用 API 列表中,选择 Hangouts Chat API。
    • 在左侧菜单中,选择Configuration。
    • 设置您的机器人配置。您需要提供Bot name、Avatar URL 和Description。设置功能设置,使其适用于房间。
    • 在 Connection Settings 下,选择 Apps Script project,然后粘贴上一部分中的部署 ID。
    • 为您的 Apps 脚本机器人授予相关权限,然后按 Save。

    难以捉摸的触发器:

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

    • 选择要运行的函数:onTrigger

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

    • 选择事件源:时间驱动

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

    • 选择分钟间隔:Every minute

    然后按保存。

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

    参考资料:


    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2015-11-18
      • 2014-02-07
      • 2021-01-03
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多