【问题标题】:Google Apps Script Google People API get contacts from contact groupGoogle Apps Script Google People API 从联系人组中获取联系人
【发布时间】:2021-05-21 19:41:27
【问题描述】:

我有一个脚本(使用 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


    【解决方案1】:

    由于我没有找到任何直接获取它们的方法,因此我确实使用了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);
    }
    

    行为:

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

    输出:

    • 记录了ContactsAppPeople API 结果,下面显示它们是相同的。

    资源:

    【讨论】:

      【解决方案2】:

      这是一种更有效的方式来做你想做的事:

      var group = People.ContactGroups.get('contactGroups/50e3b0650db163cc', {
          maxMembers: 25000
        });
        Logger.log("group: " + group);
      
        var group_contacts = People.People.getBatchGet({
          resourceNames: group.memberResourceNames,
          personFields: "emailAddresses"
        });
        
        Logger.log("emails: " + group_contacts.responses.map(x => {
          var emailObjects = x.person.emailAddresses;
          if (emailObjects != null) {
            return emailObjects.map(eo => eo.value);
          }
        }));
      

      第一次调用获取所有组的成员(resourcesNames AKA contactIds) 第二次调用获取所有成员的电子邮件地址。

      然后我们只是从响应中获取电子邮件的实际值(通过地图)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多