更新Google域共享联系人照片



我正在使用Google应用程序脚本访问域共享联系人,并使用People API更新联系人信息。

我能够使用成功地将联系人照片添加到授权用户联系人中

var photoClass = {photoBytes: Utilities.base64EncodeWebSafe(testIDPhotoBlob.getBytes()),
personFields:'photos'};
var testId = 'people/c12345678901234'
var updatePhoto = People.People.updateContactPhoto(photoClass,testId);

这成功更新了联系人照片。请注意,联系人是一个用户联系人,并带有"people/c"。

如果我使用相同的方法更新域共享联系人:

var photoClass = {photoBytes: Utilities.base64EncodeWebSafe(testIDPhotoBlob.getBytes()),
personFields:'photos'};
var testId = 'people/d12345678901234'
var updatePhoto = People.People.updateContactPhoto(photoClass,testId);

请注意,联系人Id以"person/d"开头。这会返回错误:

GoogleJsonResponseException: API call to people.people.updateContactPhoto failed with error: Resource name "people/d12345678901234" is not a valid contact person resource.

域联系人确实存在为:

var testPersonSearch = People.People.searchDirectoryPeople({query:'Domain Contact Name',readMask:findFields,sources:['DIRECTORY_SOURCE_TYPE_DOMAIN_CONTACT']});
Returns:
{ people: 
[ { organizations: [Object],
names: [Object],
phoneNumbers: [Object],
emailAddresses: [Object],
etag: '%xxxxxx/yyyyyyy',
resourceName: 'people/d12345678901234"' } ],
totalSize: 1 }

据我所知,旧的API/m8/feeds没有正确实现此功能。

如果我对SharedContactsAPI:使用以下代码

var contact = SharedContactsApp.getContactById('hexadecimalValueofContact');
console.log(contact.hasProfilePicture()); 
returns false as contact is valid but no image exists....
console.log(contact.setProfilePicture(testIDPhotoBlob));
returns null

此外,通过使用REST API直接使用UrlFetchApp.fetch等也会产生类似的结果,表明无法找到联系人。

对于共享联系人,您需要使用共享联系人API

注意:

共享联系人API仅适用于外部联系人。使用此API为域用户或组创建联系人信息可能会导致这些用户和组的联系人信息重复,这可能会导致意外行为。

要使用Apps脚本实现Shared Contacts API,您可以使用开源的SharedContactsApp库。该文档为您提供了如何使用它的说明和示例

最新更新