7

新的 google hangouts chat 的文档说你需要授权范围https://www.googleapis.com/auth/chat.bot来做几乎任何事情。

这是错误:

在此处输入图像描述

使用他们的OAuth2 客户端生成身份验证 URL 时,我收到范围无效的消息。如果我使用https://www.googleapis.com/auth/chat或其他类似google plus的范围,我就没有这个问题。

当我尝试在API Explorer中搜索内容时,URL 或部分 URL 的组合也不起作用。

这是我获取 URL 的代码,似乎适用于其他所有内容:

var {google} = require('googleapis');
var OAuth2 = google.auth.OAuth2;

var oauth2Client = new OAuth2(
  "clientid-idididid.apps.googleusercontent.com",
  "_secretsuff",
  "http://localhost:3000/auth/google/callback"
);

var scopes = [
    "https://www.googleapis.com/auth/chat", //Works
    "https://www.googleapis.com/auth/chat.bot"  // Does not work
];

var url = oauth2Client.generateAuthUrl({
  access_type: 'offline',
  scope:  scopes,
});

console.log(url);

4

2 回答 2

3

它可能与以下情​​况之一有关:

  1. 范围是为服务帐户创建的。确保您使用服务帐户访问 REST API。
  2. 确保机器人已添加到房间或空间,并且可以访问您希望它执行的操作。
  3. 确保服务帐户是您用于机器人的机器人项目的一部分。
于 2018-04-05T17:41:04.923 回答
3

万一其他人遇到这个问题,我想我已经弄清楚了。Google 似乎不需要域用户启用此身份验证范围,因为在您测试机器人时,它已经在域上获得授权。这些范围的“授权”由域中的用户在空间中添加/删除机器人来决定。

如果您感到困惑,我会详细介绍一下。

云控制台映像

当您在控制台中为组织https://console.cloud.google.com/apis/api/chat.googleapis.com/创建机器人时,您的机器人将添加到域中,并且用户可以将其添加到空间中。如果然后转到凭据并创建一个服务帐户,您可以使用该 json 文件凭据作为您的机器人访问 API。下面的代码获取空间中人员的列表。

var { google } = require('googleapis');
var chat = google.chat("v1");

var key = require('./google_service-account-credentials.json');

var jwtClient = new google.auth.JWT(
  key.client_email,
  null,
  key.private_key,
  ['https://www.googleapis.com/auth/chat.bot'], // an array of auth scopes
  null
);

jwtClient.authorize(function (err, tokens) {
  chat.spaces.members.list({
    auth: jwtClient,
    parent: "spaces/AAAAD4xtKcE"
  }, function (err, resp) {
    console.log(resp.data);
  });
});

如果您尝试获取其他空间(和其他域)上的成员列表,机器人将失败并显示完全相同的错误消息:

“Bot 不是空间的成员。”

我假设如果您在市场上列出您的机器人并将其添加到不同的域和空间,谷歌的 API 会确保您的机器人可以在逐个空间的基础上做它想做的事情。在已经添加机器人以完成其工作之后,必须设置一些身份验证流程会很烦人。这也可能是当前 REST api 不允许您在域下列出空间的原因,这不是该 API 工作的范例。

于 2018-03-24T17:28:41.497 回答