到目前为止,我已经成功地将googleapis
和gapitoken
个软件包混合在一起,通过API在Google日历上创建活动。所有这一切的目的是找到一种方法来以编程方式生成Google Hangout链接,据我所知,您无法通过API执行此操作。根据{{3}},您应该能够在创建活动时启用自动创建环聊链接,这是我为该帐户所做的。
我使用的代码只会从Node.js运行,因此没有面向用户的部分。我使用服务帐户技术通过OAuth2.0进行身份验证。除了创建的事件不包含名为“hangoutLink”的属性外,一切似乎都能正常工作。有什么想法吗?
var moment = require('moment');
var googleapis = require('googleapis');
var GoogleToken = require('gapitoken');
var OAuth2Client = googleapis.OAuth2Client;
var token = new GoogleToken({
iss: '*******************@developer.gserviceaccount.com',
scope: 'https://www.googleapis.com/auth/calendar',
keyFile: './*****************.pem'
}, function (err) {
if (err) {
return console.log(err);
}
token.getToken(function (err, token) {
if (err) {
return console.log(err);
}
googleapis.load('calendar', 'v3', function (err, client) {
var oauthClient = new OAuth2Client('', '', '', {}, {
token_type: 'Bearer',
access_token: token
});
var now = moment().format();
client
.calendar
.events
.insert({
calendarId: 'primary',
resource: {
summary: 'hangout',
description: 'hangout',
reminders: {
overrides: {
method: 'popup',
minutes: 0
}
},
start: {
dateTime: now
},
end: {
dateTime: now
},
attendees: [{
email: '****@**********.com'
}]
}
})
.withAuthClient(oauthClient)
.execute(function (err, event) {
// event does not contain hangoutLink
console.log(event.hangoutLink);
});
});
});
});
答案 0 :(得分:2)
这不是一个完整的解决方案,但我通过稍微改变约束获得了部分成功。使用事件自动创建环聊链接似乎是特定于帐户的设置,而不是特定于日历的设置。这意味着使用服务帐户模型来创建事件不会触发环聊创建,因为我们没有(据我所知)有办法在创建的Google帐户中启用自动创建环聊服务帐户模型。
为了测试这个理论,我整理了一个基于OAuth的版本,该版本获得了传统的Google帐户令牌。它看起来像这样:https://gist.github.com/drewww/5665130
除了正在使用的令牌类型之外,它与您的示例大致相同。在回调中,可以可靠地填充hangoutLink。
显然,这不像你的例子那么干净。这取决于传统的oauth流,并且创建事件的用户必须在其个人帐户设置中启用自动创建环聊。从用户体验的角度来看,这显然非常不方便。我将尝试创建一个虚拟谷歌帐户并让它拥有我的所有环聊。
答案 1 :(得分:1)
一切都很好,除了必须分两部分添加视频群聊数据。首先,在要创建的事件中,还将其作为表示参数的版本的参数称为conferenceDataVersion
const event = {
"summary": "Google I/O 2015",
"location": "800 Howard St., San Francisco, CA 94103",
"description": "A chance to hear more about Google\"s developer products.",
"start": {
"dateTime": "2015-05-28T09:00:00-07:00",
"timeZone": "America/Los_Angeles",
},
"end": {
"dateTime": "2015-05-28T17:00:00-07:00",
"timeZone": "America/Los_Angeles",
},
"conferenceData": {
"createRequest": {
"requestId": "someRandomKey"
}
}
};
calendar.events.insert({
auth: yourAuth,
calendarId: 'primary',
resource: event,
conferenceDataVersion: 1
}, function (error, event) {
if (error) {
console.log("CALENDAR_ERROR", error);
}
console.log("CALENDAR_SUCCESS", event.data);
console.log("HANGOUT_LINK", event.data.hangoutLink);
});
const event
主要是从文档中的示例复制而来。这里的关键是在两部分中添加与会议相关的数据。仅添加:
"conferenceData": {
"createRequest": {
"requestId": "someRandomKey"
}
}
不起作用,您还必须在参数上使用conferenceDataVersion: int
。
答案 2 :(得分:0)
明确将凭据设置为auth客户端:
var oauthClient = new OAuth2Client('', '', '');
oauthClient.credentials = {
token_type: 'Bearer',
access_token: token
};