【问题标题】: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 nameAvatar URLDescription。设置功能设置,使其适用于房间。
    • 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
      相关资源
      最近更新 更多