You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:35