使用Google App Script调用People API updateContact()遇404错误求助
解决Google App Script更新联系人时的404错误
核心错误分析
- 参数传递错误:调用
People.People.updateContact时,第二个参数误用了resource.resourceName——你的resource对象未定义该属性,导致请求指向不存在的资源路径,直接触发404。正确参数应为从表格读取的resourceName变量。 - etag格式错误:People API要求etag是单个字符串值,你代码里将其定义为数组
etag: []再push值,不符合API规范,会导致请求结构异常。 - 缺少更新字段掩码:调用
updateContact必须指定updatePersonFields参数,明确要更新的字段,否则即使解决404,API也会拒绝请求。
修正步骤及代码
- 先在Google App Script编辑器中启用People API:菜单→资源→高级Google服务→找到People API并开启。
- 修正参数传递、etag格式,添加字段掩码参数。
修正后的完整代码:
function updateContactsFromSheet() { var sheetId = '[SheetID]'; var sheetName = '[SheetName]'; var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName); var dataRange = sheet.getDataRange(); var data = dataRange.getValues(); var headerRow = data[0]; var emailColumnIndex = headerRow.indexOf('Email'); var firstNameColumnIndex = headerRow.indexOf('First Name'); var middleNameColumnIndex = headerRow.indexOf('Middle Name'); var lastNameColumnIndex = headerRow.indexOf('Last Name'); var phoneColumnIndex = headerRow.indexOf('Mobile'); var resourceNameColumnIndex = headerRow.indexOf('resourceName'); var etagColumnIndex = headerRow.indexOf('etag'); for (var i = 1; i < data.length; i++) { var row = data[i]; var email = row[emailColumnIndex]; var firstName = row[firstNameColumnIndex]; var middleName = row[middleNameColumnIndex]; var lastName = row[lastNameColumnIndex]; var phone = row[phoneColumnIndex]; var resourceName = row[resourceNameColumnIndex]; var etag = row[etagColumnIndex]; if(resourceName !== ''){ var resource = { names: [{ givenName: firstName, middleName: middleName, familyName: lastName }], emailAddresses: [{ value: email }], phoneNumbers: [{ value: phone }], etag: etag }; People.People.updateContact(resource, resourceName, { updatePersonFields: 'names,emailAddresses,phoneNumbers' }); } } }
额外注意事项
- 表格中的
resourceName和etag必须是从People API获取的有效值(可通过People.People.listContacts批量导出到表格),手动填写无效值仍会触发404。 - 建议先单条数据调试,确认无误后再批量执行。
内容的提问来源于stack exchange,提问作者user23506893
相关产品推荐
相关产品推荐

