10

到目前为止,我已经成功地将googleapisgapitoken包组合在一起,通过 API 在 Google 日历上创建事件。这一切的重点是找到一种以编程方式生成 Google Hangout 链接的方法,据我所知,这是您无法通过 API 完成的。根据这篇文章,您应该能够在创建活动时启用自动创建环聊链接,我已经为该帐户完成了这项工作。

我使用的代码只会从 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);
                });
        });
    });
});
4

3 回答 3

3

一切似乎都很好,除了您必须分两部分添加环聊数据。首先,如果您要创建,并且还作为表示参数版本的参数,它被称为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论点。

于 2018-07-11T20:01:15.207 回答
2

这不是一个完整的解决方案,但我通过稍微改变约束取得了部分成功。自动创建带有事件的环聊链接似乎是特定于帐户的设置,而不是特定于日历的设置。这意味着使用服务帐户模型创建事件不会触发环聊创建,因为我们(据我所知)没有办法在创建的谷歌帐户上打开自动创建环聊服务帐户模型。

为了测试这个理论,我组合了一个基于 OAuth 的版本,它可以获取传统的 google 帐户令牌。它看起来像这样:https ://gist.github.com/drewww/5665130

它或多或少与您的示例相同,除了使用的令牌类型。在回调中,hangoutLink 被可靠地填充。

显然,这不像您的示例那样干净。它依赖于传统的 oauth 流程,创建事件的用户必须在其个人帐户设置中启用自动创建视频群聊。从用户体验的角度来看,这显然非常不方便。我将尝试创建一个虚拟谷歌帐户并让它拥有我所有的环聊。

于 2013-05-28T17:07:55.360 回答
0

将凭据显式设置为身份验证客户端:

var oauthClient = new OAuth2Client('', '', '');
oauthClient.credentials = {
  token_type: 'Bearer',
  access_token: token
};
于 2013-05-05T17:25:23.740 回答