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 的每个教程。
chat.bot范围不再存在:
chat.bot范围:
chat范围(即googleapis.com/auth/chat),但该范围也不存在:
综上所述
如何使用Google Chat REST API将消息从Google Apps Script发送到Google Chat ?
Google 的文档似乎已经过时,截至 2020 年 8 月,此 API 的所有示例都没有工作。他们要么不知道他们的 REST API 不起作用,要么在没有告诉任何人的情况下弃用了 REST API。
我可以确认chat.bot范围确实存在。要使用 REST API 设置聊天机器人,您 必须 使用服务帐户。
根据您在使用 Apps 脚本开发机器人上链接的文档,用于在触发器上发送异步消息:
...目前实现此目的的唯一方法是通过外部 HTTP API(请参阅文档)。这需要通过OAuth2 for Apps 脚本库使用云服务帐户(请参阅文档)。
这意味着,您必须首先在 GCP 控制台中设置一个服务帐户,以便可以将chat.bot范围用于这些消息。整个过程对于初学者来说可能会非常艰巨,所以我将在这里提供从头到尾的步骤。
创建服务帐户:
Select a project页面顶部并点击NEW PROJECT。
Project name,其他字段应自动为您填写。CREATE- 屏幕右上角将出现一个新的弹出窗口,确认正在创建一个新项目。加载后,您可以单击VIEW。?左上角的图标,然后按照APIs & Services > Credentials菜单项进行操作。+ CREATE CREDENTIALS > Service Account。
CREATE,然后按CONTINUE,最后按DONE。您的服务帐户现已创建。
创建服务帐户凭据:
使用应用脚本开发机器人页面的示例中提供的代码将需要这些。
Service Accounts部分下,单击您新创建的服务帐户。这将被称为service-account-name@project-name-XXXXXX.iam.gserviceaccount.comADD KEY > Create new keyJSON选中状态,然后按CREATE。
启用 Hangouts Chat API:
? > APIs & Services,然后选择Library。Hangouts Chat API并单击唯一的结果。ENABLE。这将为您的项目启用 API。注意:不要关闭此选项卡!我们稍后仍需要使用 GCP 控制台。
设置 Apps 脚本项目:
private_key值(以 开头的值-----BEGIN PRIVATE KEY-----并将其粘贴到SERVICE_ACCOUNT_PRIVATE_KEYApps 脚本项目中的值中。client_email从凭证文件中复制该值,并将其粘贴到SERVICE_ACCOUNT_EMAILApps 脚本项目中。为了像示例中一样使用 Google Apps Script OAuth2 库,您需要使用库的脚本 ID 将该库添加到项目中。
Resources > Libraries...菜单项,将 OAuth2 脚本 ID 复制粘贴到Add a library框中
1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDFSave。接下来,您需要将 Apps 脚本项目链接到您之前创建的 GCP 项目。
? > IAM & Admin > Settings菜单项进行操作。Project number此页面上的定义。Resources > Cloud Platform project...菜单项操作,然后将项目编号粘贴到Enter Project Number here对话框中。Set Project。设置项目清单:
为了在 Apps 脚本中使用聊天机器人,您必须chat在项目的清单中包含密钥。
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 中设置配置并设置将进行实际调用的触发器。
部署机器人:
Publish > Deploy from manifest...并点击Create新打开的对话框。
Save。Get ID您刚创建的部署旁边的 ,然后复制Deployment ID.设置 GCP 配置:
? > APIs & Services > Dashboard。Hangouts Chat API.Configuration。Bot name,Avatar URL和Description。设置功能设置,使其在房间内工作。Connection Settings,选择Apps Script project并粘贴上一节中的部署 ID。Save。难以捉摸的触发器:
您现在唯一需要做的就是设置触发器。这就像一个普通的 Apps 脚本触发器 - 从 Apps 脚本中的Edit > Current project's triggers菜单项完成。要完成示例,请单击右下角的 + 添加触发器按钮,并设置触发器设置如下:
选择要运行的函数: onTrigger
选择应该运行的部署:Head
选择事件源:时间驱动
选择基于时间的触发器类型: Minutes timer
选择分钟间隔: Every minute
然后按保存。
你完成了!这个创建的机器人现在将每分钟发布到它在当前时间的所有房间。
我希望这个解释对你有帮助!
| 归档时间: |
|
| 查看次数: |
4069 次 |
| 最近记录: |