将用户从目录添加到联系人

问题描述

我正在尝试从Gsuite目录添加用户,作为该目录中所有用户的联系人。

var credential = GetCredentialForUser(User.PrimaryEmail);

                // Create Drive API service.
                var peopleService = new PeopleServiceService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential
                });
                PeopleResource.ListDirectoryPeopleRequest peopleRequest =
                 peopleService.People.ListDirectoryPeople();
                peopleRequest.ReadMask = "names,emailAddresses,addresses,phoneNumbers";
                peopleRequest.Sources = PeopleResource.ListDirectoryPeopleRequest.SourcesEnum.DIRECTORYSOURCETYPEDOMAINPROFILE;
                peopleRequest.PageSize = 1000;
                //peopleRequest.SortOrder = (PeopleResource.ConnectionsResource.ListRequest.SortOrderEnum)1;
                var res = peopleRequest.Execute();
                var list = peopleService.ContactGroups.List().Execute();
                //var directoryPeople = peopleService.People.ListDirectoryPeople().Execute();
                var person = res.People.FirstOrDefault();
                foreach (var label in list.ContactGroups)
                {
                    Console.WriteLine(label.ResourceName);
                }
                var all = list.ContactGroups.Where(s => s.Name== "myContacts").FirstOrDefault();
                var members = peopleService.ContactGroups.Members.Modify(new ModifyContactGroupMembersRequest() { ResourceNamesToAdd = new List<string> { person.ResourceName },ResourceNamesToRemove = new List<string> {  } },all.ResourceName).Execute();

我收到例外情况

{"Google.Apis.Requests.RequestError\r\nResource name \"people/XXXYYYY\" is not a valid contact person resource. [400]\r\nErrors [\r\n\tMessage[Resource name \"people/XXXYYYY\" is not a valid contact person resource.] Location[ - ] Reason[badRequest] Domain[global]\r\n]\r\n"}

这是否意味着我们不能使用目录中的人api作为联系人来添加用户,如果是,批量处理的最佳方法是什么?清除所有联系人并从目录添加新用户?

解决方法

问题是您正在尝试将个人资料添加到联系人组。您只能将联系人添加到联系人组。因此,您应该只使用个人资料电子邮件创建联系人。

,

这是我设置批量请求以创建联系人的功能。

将所有目录联系人转换为 Person,然后使用 BatchRequest 将其发送。 最后执行批处理请求以创建联系人。

确保在 Person 中包含主要电子邮件地址。请注意,我检查了 ClientData - 这是我存储我的应用名称和 AD 的用户唯一 ID 以跟踪我的应用添加的内容的位置。

    public Person CreateContact(BatchRequests batchRequest,Person contact,List<string> errors)
    {

        if (contact.EmailAddresses == null || 
            contact.EmailAddresses.Count == 0 || 
            !contact.EmailAddresses.Any(e => e.Metadata.Primary == true))
            throw new Exception("Primary Email Address Not Found.");

        try
        {
            if (!batchRequest.BatchCreateContactsRequest.Contacts.Any(c => c.ContactPerson.ClientData == contact.ClientData))
            {
                ContactToCreate contactToCreate = new ContactToCreate();
                contactToCreate.ContactPerson = contact;
                batchRequest.BatchCreateContactsRequest.Contacts.Add(contactToCreate);
            }
        }
        catch (Exception ex)
        {
            // CurrentPersonEmail is the user's email whose contacts are being modified.
            errors.Add($"Error;{CurrentPersonEmail};{ex.Message}. StackTrace:{ex.StackTrace}");
        }

        return contact;
    }

一旦您准备好所有联系人 - 然后执行请求(这不是完整的代码,但我希望您知道如何调用它):

    BatchCreateContactsResponse batchCreateContactsResponse = PeopleService.People.BatchCreateContacts(BatchCreateContactsRequest).Execute();

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...