1

我正在为 Google 表格编写一个脚本,该脚本使用在数据中找到的电子邮件将成员添加到特定的 Google 组。似乎找到了 Google Group,并且正确返回了 Google Group 的 email/groupKey。会话中的currentUser(我)是组(所有者)的成员。我已启用管理目录 API。在一次测试中,我什至打电话给group.getUsers()该组的所有成员都正确返回。日志记录中的所有值都符合预期。

为什么调用插入仍然失败?什么是未添加到 google 组的成员?

我已经包含了代码和日志。

代码

function addMembersFromSheet() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MySheet");
  var emails = sheet.getRange(2,3,sheet.getLastRow()-1,1).getValues();
  Logger.log(emails);
  
  var currentUser = Session.getActiveUser();
  Logger.log(currentUser);
 
  var group = GroupsApp.getGroupByEmail("<mygroup>@googlegroups.com");
    
  if (group.hasUser(currentUser)) {
    Logger.log("You are a member of this group. group is: ");
    Logger.log(group.getEmail()); //correctly finds the group
  
  }
  else {
    Logger.log("You are not a member of this group.");
  }

  for(i = 0; i < emails.length; i++) {
    try {
      addMember(emails[i][0], group);
    }
    catch(e) {
      console.error(e);
      Logger.log(e);
      continue;
    }   
  }
}

function addMember(email, group) {
  
  var hasMember = group.hasUser(email);
  Logger.log(hasMember);
  Utilities.sleep(1000);
  
  if(!hasMember) {
    var newMember = {email: email, 
                     role: "MEMBER",
                     delivery_settings: "NONE"};
    Logger.log(newMember);
    Logger.log(group.getEmail())
    AdminDirectory.Members.insert(newMember, group.getEmail());
  }
}

记录输出(对私人细节进行了一些更改):

Jul 26, 2020, 3:22:09 PM    Info    [[<testmember>@gmail.com]]
Jul 26, 2020, 3:22:09 PM    Info    <currentUser>@gmail.com
Jul 26, 2020, 3:22:10 PM    Info    You are a member of this group. group is: 
Jul 26, 2020, 3:22:10 PM    Info    <mygroup>@googlegroups.com
Jul 26, 2020, 3:22:10 PM    Info    false
Jul 26, 2020, 3:22:11 PM    Info    {delivery_settings=NONE, role=MEMBER, email=<testmember>@gmail.com}
Jul 26, 2020, 3:22:11 PM    Info    <mygroup>@googlegroups.com
Jul 26, 2020, 3:22:11 PM    Error   { [GoogleJsonResponseException: API call to directory.members.insert failed with error: Resource Not Found: groupKey]
  details: 
   { code: 404,
     message: 'Resource Not Found: groupKey',
     errors: [ [Object] ] },
  name: 'GoogleJsonResponseException' }
Jul 26, 2020, 3:22:11 PM    Info    GoogleJsonResponseException: API call to directory.members.insert failed with error: Resource Not Found: groupKey
4

1 回答 1

0

您正在检索一组消费者帐户并尝试对其执行 A GSuite 管理员的方法

  • 从您的组名(以 结尾googlegroups.com)我可以假设您有一个消费者帐户(免费的 Gmail 帐户)
  • 但是,该类AdminDirectory的方法仅对 GSsuite 帐户的管理员可用。该文档指定:

此 API 使 G Suite 网域的管理员(包括转销商)能够管理其网域中的设备、群组、用户和其他实体。

  • 因此,不幸的是,对于消费者帐户,您不允许使用AdminDirectory以编程方式插入用户。
  • 您可以使用GroupsApp,但该服务没有插入用户的方法。
于 2020-07-27T11:40:03.853 回答