首页 > 解决方案 > Google Apps Script Google People API 从联系人组中获取联系人

问题描述

我有一个脚本(使用 Google Apps 脚本),它使用联系人 API 从联系人组中提取电子邮件,然后向联系人组发送电子邮件。尝试转换为 PeopleAPI 并且似乎无法复制该功能。这是相关的脚本示例,其中包含但已注释掉的工作 ContactsAPI 代码:

function sharereport() {
//var CGroup = ContactsApp.getContactGroup('group_name');
//var Dist = CGroup.getContacts();
var CGroup = People.ContactGroups.get('contactGroups/498ba6e40f63a476') 
var Dist = People.People.getBatchGet('CGroup','people.email_addresses');

. . .

 for (var i = 0; i < Dist.length; i++) {
 var nextemail = Dist[i].getEmails();
 var usethisemail = nextemail[0].getAddress();
 Drive.Permissions.insert(
   // @ts-ignore
   {
     'role': 'writer',
     'type': 'user',
     'value': usethisemail,
   },
   MyID,
   {
     'sendNotificationEmails': 'false',
   });
 MailString = MailString + ',' + usethisemail;
};

我确定我在这里遗漏了一些非常简单的东西,让 PeopleAPI 返回一组联系人,我可以从中获取电子邮件地址,以便我可以填充驱动器权限和电子邮件至:字段。

标签: google-people-api

解决方案


由于我没有找到任何直接获取它们的方法,因此我确实使用People.People.Connections.list并过滤了数据,直到收到电子邮件。这应该是您的代码的样子。

function sharereport() {
  var CGroup = ContactsApp.getContactGroup('label1');
  var Emails = CGroup.getContacts().map(function (contact) {
    return contact.getEmailAddresses();
  });
  // Show emails of people belonging to the group label1
  Logger.log(Emails);

  var PGroup = People.People.Connections.list('people/me', {
    personFields: 'emailAddresses,memberships'
  });
  // resource name of label1
  var resourceName = 'contactGroups/7086c0fa8e7b006b';
  var Emails2 = [];
  PGroup.connections.forEach(function (person) {
    person.memberships.forEach(function (membership) {
      if (resourceName == membership.contactGroupMembership.contactGroupResourceName) {
        var addresses = [];
        person.emailAddresses.forEach(function (emailAddress){
          // people can have multiple email addresses, add them all
          addresses.push(emailAddress.value);
        });
        Emails2.push(addresses);
      }
    });
  });
  Logger.log(Emails2);
}

行为:

  • 得到你手下的所有人脉关系。
  • 获得他们所有的会员资格
  • 检查他们的会员资源名称是否与您想要的相同。(他们可以属于多个成员)
  • 循环该特定人的所有电子邮件(他们可以有多个电子邮件),然后推入一个数组。
  • 将该数组推入包含属于该资源名称的所有人的所有电子邮件的最终数组。

输出:

  • 记录了两者ContactsAppPeopleAPI 结果,下面显示它们是相同的。

输出

资源:


推荐阅读