首页 > 解决方案 > 你能解释一下为什么我会收到这个错误:Unexpected error while getting the method or property getContacts on object ContactsApp

问题描述

这是错误:

异常:获取对象 ContactsApp 上的方法或属性 getContacts 时出现意外错误。(第 2 行,文件“ag1”)

原始问题:

代码来自这里。这是一个问题的先前答案。我不明白我怎么会在那里得到那个错误。

function getAllContacts() {
  var contactsA=ContactsApp.getContacts();//The Error occurs on this line
  var s='';
  var br='<br />';//line delimiter change to linefeed when not using html dialog
  var dlm=' ~~~ ';//field delimiter
  for(var i=0;i<contactsA.length;i++) {
    s+=Utilities.formatString('<br />\'%s\',\'%s\',\'%s\',\'%s\',\'%s\'%s',
    (typeof(contactsA[i].getFullName())!='undefined')?contactsA[i].getFullName():'',
    (typeof(contactsA[i].getAddresses().map(function (v,i,A) { return A[i].getAddress();}))!='undefined')?contactsA[i].getAddresses().map(function (v,i,A) { return A[i].getAddress();}).join(dlm):'',
    (typeof(contactsA[i].getEmails().map(function(v,i,A) {return A[i].getAddress();}))!='undefined')?contactsA[i].getEmails().map(function(cV,i,A) {return A[i].getAddress();}).join(dlm):'',
    (typeof(contactsA[i].getPhones().map(function(v,i,A){return A[i].getPhoneNumber();}))!='undefined')?contactsA[i].getPhones().map(function(v,i,A){return A[i].getPhoneNumber();}).join(dlm):'',
    (typeof(contactsA[i].getCompanies().map(function(v,i,A){return A[i].getCompanyName();}))!='undefined')?contactsA[i].getCompanies().map(function(v,i,A){return A[i].getCompanyName();}).join(dlm):'',br);
  }
  var ui=HtmlService.createHtmlOutput(s).setWidth(800)  ;
  SpreadsheetApp.getUi().showModelessDialog(ui, 'Contacts')
}

实际上,我可以在另一个电子表格中运行代码而没有错误,但是在我一直使用 StackOverflow Questions 的电子表格中它失败了。

此功能在第 2 行也失败:

function testing101() {
  const cA=ContactsApp.getContacts();
  Logger.log(cA.length);
}

修复 UrlFetch 问题后:

在这个文件中仍然得到同样的错误。它仍然适用于其他文件。这是我的清单文件(减去我的库):

{
  "timeZone": "America/Denver",
  "dependencies": {
    "enabledAdvancedServices": [{
      "userSymbol": "Drive",
      "serviceId": "drive",
      "version": "v2"
    }, {
      "userSymbol": "People",
      "serviceId": "peopleapi",
      "version": "v1"
    }, {
      "userSymbol": "Slides",
      "serviceId": "slides",
      "version": "v1"
    }, {
      "userSymbol": "Gmail",
      "serviceId": "gmail",
      "version": "v1"
    }, {
      "userSymbol": "Sheets",
      "serviceId": "sheets",
      "version": "v4"
    }, {
      "userSymbol": "DriveActivity",
      "serviceId": "driveactivity",
      "version": "v2"
    }, {
      "userSymbol": "Calendar",
      "serviceId": "calendar",
      "version": "v3"
    }],
  "webapp": {
    "access": "MYSELF",
    "executeAs": "USER_DEPLOYING"
  },
  "exceptionLogging": "STACKDRIVER",
  "oauthScopes": ["https://mail.google.com/", "https://www.google.com/m8/feeds", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/script.external_request", "https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/script.container.ui", "https://www.googleapis.com/auth/calendar", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/script.send_mail", "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/presentations", "https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/documents", "https://www.googleapis.com/auth/script.projects.readonly", "https://sites.google.com/feeds", "https://www.googleapis.com/auth/drive.activity"],
  "runtimeVersion": "V8"
}

标签: google-apps-scriptgoogle-contacts-api

解决方案


您需要在 GCP 项目中启用 Contacts API。

根据您在问题跟踪器中的评论

这是一个云平台项目。

我认为这里的问题是您尚未在 GCP 项目中启用联系人 API 。一旦你这样做,这个问题应该会消失。

因此,我认为这个问题与问题无关UrlFetch

更新 - 关于标准和高级服务:

@TheMaster 不只是高级服务需要在 GCP 项目中启用相应的 API;一些标准服务,包括当前的服务或DriveApp.getRootFolder()等,都需要这样做。看到这个问题:

特别是这条评论

这里提到了为高级服务启用 API 。但不适用于标准服务,我将此通知给了文档团队。

目前尚不清楚这是否是文档的问题,该文档不仅应提及高级服务,还是与这些失败的标准服务相关的错误。

无论如何,这已在问题跟踪器内部报告,并且仍在调查中。并且可以通过在 GCP 项目中启用 Contacts API 来解决 OP 遇到的问题。

参考:


推荐阅读