如何判断Google Calendar API与会者是否为群组电子邮件?

时间:2015-03-04 18:52:49

标签: api calendar google-calendar-api

Google Calendar API可让您轻松判断“与会者”是否真的是一种资源:

https://developers.google.com/google-apps/calendar/v3/reference/events#resource

但是,如何判断“与会者”实际上是一个群体,而不是一个人。即。 engineers@company.com vs john@company.com

2 个答案:

答案 0 :(得分:1)

目前无法使用Calendar API v3。

答案 1 :(得分:0)

从2019年12月起,使用Google Calendar API仍无法实现,但是如果您是G Suite域管理员并且可以访问G Suite Admin SDK Directory API,则可以这样做。

下面是一个示例函数,该函数使用Admin SDK Directory Service中的Google Apps Script

您将电子邮件地址字符串发送到getGSuiteAddressType(),它将返回具有以下地址类型的对象:

  • user
  • userAlias
  • group
  • groupAlias
  • null(如果在G Suite域中找不到该地址)

它还具有以下额外功能,对于G Suite开发人员来说可能很方便:

  • 如果该地址是userAlias或groupAlias,则还将返回其别名的地址。
  • 如果该地址是用户或userAlias,它还将返回用户的上次登录时间(如果以前从未登录过,则返回null)
  • 如果该地址是一个group或groupAlias,它将返回一组该组成员的电子邮件地址。

这使用Google Apps脚本,但是可以使用this page“快速入门”侧栏部分中列出的任何语言来访问API。

function getGSuiteAddressTypeTest() {

    getGSuiteAddressType('group@domain.com'); // returns addressType "group"
    getGSuiteAddressType('group.alias@domain.com'); // returns addressType "groupAlias"

}

function getGSuiteAddressType(email) {

    email = email.toLowerCase();

    var data = {
        email: email,
        addressType: null,
        aliasOf: null,
        lastLoginTime: null
    };

    // check user and aliases

    try {

        var user = AdminDirectory.Users.get(email);

        data.addressType = 'user';

        for (var i = 0; i < user.aliases.length; i++) {

            var alias = user.aliases[i].toLowerCase();

            if (email === alias) {

                data.addressType = 'userAlias';
                data.aliasOf = user.primaryEmail;

            }

        }

    } catch (e) {}

    if (data.addressType) {

        var lastLoginTimestamp = user.lastLoginTime; // this outputs an ISO 8601 string that can be used to create a new date object

        if (lastLoginTimestamp === '1970-01-01T00:00:00.000Z') {

            Logger.log('the user has never logged in');

        } else {

            data.lastLoginTime = new Date(lastLoginTimestamp);

        }

        return data;

    }

    try {

        var group = AdminDirectory.Groups.get(email);

        data.addressType = 'group';

        if (group.aliases) {

            for (var i = 0; i < group.aliases.length; i++) {

                if (email === group.aliases[i].toLowerCase()) {

                    data.addressType = 'groupAlias';
                    data.aliasOf = group.email;

                }

            }

        }

        data.members = [];

        var groupMembers = getMembersOfGroup(email);

        for (var i = 0; i < groupMembers.length; i++) {

            data.members.push(groupMembers[i].email);

        }

    } catch (e) {}

    return data;

}

function getMembersOfGroup(groupEmail) {

    var pageToken, page;

    var members = [];

    do {

        try {

            page = AdminDirectory.Members.list(groupEmail, {
                pageToken: pageToken
            });

            if (page.members) {

                members = members.concat(page.members);

            }

            pageToken = page.nextPageToken;

        } catch (e) {}


    } while (pageToken);

    return members;

}