答案:
我可以确认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。
难以捉摸的触发器:
然后按保存。
你就完成了!这个创建的机器人现在将每分钟发布到当前时间的所有房间。
参考资料: