Google Script权限错误:无法创建Google Contacts联系人求助
Google Sheets脚本创建Google Contacts时权限错误的解决方法
核心问题分析
权限错误通常来自三个方面:OAuth权限范围未正确配置、ContactsApp的受限权限授权流程问题,或是代码参数格式错误(虽不直接触发权限错误,但可能伴随执行异常)。以下是针对性解决步骤:
1. 重新执行完整授权流程
- 打开Google Sheets,点击扩展 > Apps 脚本进入编辑器
- 点击右上角「运行」按钮,首次运行会弹出授权窗口
- 若未显示完整权限列表,点击「高级」,选择「转到[你的脚本名称](不安全)」
- 在权限列表中确认勾选「查看和管理你的联系人」权限,完成授权
2. 配置脚本OAuth权限清单
- 在脚本编辑器中,点击项目设置,勾选「显示"appsscript.json"清单文件」
- 打开
appsscript.json文件,确保包含以下权限范围,若缺失则添加:
{ "oauthScopes": [ "https://www.googleapis.com/auth/spreadsheets.currentonly", "https://www.googleapis.com/auth/contacts" ], "timeZone": "你的时区(如Asia/Shanghai)", "dependencies": {}, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8" }
- 保存文件后,再次点击「运行」重新授权
3. 修正ContactsApp代码的参数格式
setAddresses和setPhones方法需要传入数组类型参数,而非单个对象,修正后的代码如下:
function createContact() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var row = sheet.getActiveRange().getRow(); var data = sheet.getRange(row, 2, 1, 9).getValues()[0]; var fullName = data[0]; var names = fullName.split(" "); var firstName = names[0]; var lastName = names.length > 1 ? names[names.length-1] : ""; var address = { 'homeAddress': data[3] + ', ' + data[4] + ', ' + data[5] + ', ' + data[6], }; var phone = { 'mobilePhone': data[7] }; var email = data[1]; var instagram = data[8]; var contact = ContactsApp.createContact(firstName, lastName, email); contact.setAddresses([address]); // 修改为数组格式 contact.setPhones([phone]); // 修改为数组格式 contact.addCustomField("Instagram", instagram); }
4. 迁移到People API(推荐方案)
ContactsApp属于旧版服务,Google更推荐使用People API,稳定性和权限配置更清晰:
- 在脚本编辑器中,点击服务 +,搜索「People API」并添加
- 使用以下代码替代原脚本:
function createContact() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); var row = sheet.getActiveRange().getRow(); var data = sheet.getRange(row, 2, 1, 9).getValues()[0]; var fullName = data[0]; var names = fullName.split(" "); var firstName = names[0]; var lastName = names.length > 1 ? names[names.length-1] : ""; // 构建联系人资源 var contactResource = { names: [{givenName: firstName, familyName: lastName}], emailAddresses: [{value: data[1], type: "home"}], addresses: [{ formattedValue: data[3] + ', ' + data[4] + ', ' + data[5] + ', ' + data[6], type: "home" }], phoneNumbers: [{value: data[7], type: "mobile"}], userDefined: [{key: "Instagram", value: data[8]}] }; // 创建联系人 People.People.createContact(contactResource, { personFields: "names,emailAddresses,addresses,phoneNumbers,userDefined" }); }
- 确保
appsscript.json中包含https://www.googleapis.com/auth/contacts权限,重新授权即可
内容的提问来源于stack exchange,提问作者all1word
相关产品推荐
相关产品推荐

