Javascript 谷歌应用程序脚本驱动器错误

Javascript 谷歌应用程序脚本驱动器错误,javascript,google-apps-script,google-drive-api,Javascript,Google Apps Script,Google Drive Api,这是我在上的第一篇文章,所以我希望我做得正确。我有一个GoogleApps脚本,它被用作web钩子,用于创建两个服务之间的集成:YouCanBook.Me和Taleo。该脚本作为一个web应用程序发布,具有“任何人,甚至匿名”访问权限,并已运行数周。最近(我相信截至2014年2月3日),它停止工作,现在导航到公共URL会导致以下错误消息: Google Drive遇到错误。如果重新加载页面没有帮助,请报告错误 要了解有关Google Drive的更多信息,请访问我们的帮助中心 给您带来不便,我们

这是我在上的第一篇文章,所以我希望我做得正确。我有一个GoogleApps脚本,它被用作web钩子,用于创建两个服务之间的集成:YouCanBook.Me和Taleo。该脚本作为一个web应用程序发布,具有“任何人,甚至匿名”访问权限,并已运行数周。最近(我相信截至2014年2月3日),它停止工作,现在导航到公共URL会导致以下错误消息:

Google Drive遇到错误。如果重新加载页面没有帮助,请报告错误

要了解有关Google Drive的更多信息,请访问我们的帮助中心

给您带来不便,我们深表歉意。谢谢你的帮助! -谷歌驱动团队

以下是整个脚本的代码:

function doGet(request) {

  try {
    //Get token data from URL parameters
    var candidateID = request.parameter.candID;
    var requisitionID = request.parameter.reqID;
    var interviewType = request.parameter.intType;
    var requestType = request.parameter.request;
  }
  catch(e) {
    Logger.log('Unable to capture required parameters.  Error message: ' + e);
    return;
  }

  //Get authToken by passing in credentials
  var authToken = taleoLogin();

  //Get candidate application ID
  var candidateApplicationID = getCandidateApplicationID(authToken, candidateID, requisitionID);

  //Make PUT request to change candidate's status
  taleoSubmit(authToken, candidateID, requisitionID, candidateApplicationID, interviewType, requestType);

  //Logout
  taleoLogout(authToken);
}



function getCandidateApplicationID(authToken, candidateID, requisitionID) {
  //Build API call
  var loginURL = 'https://ch.tbe.taleo.net/CH06/ats/api/v1/object/candidateapplication?candidateId=' + candidateID + '&requisitionId=' + requisitionID;
  var loginOptions = {
    'method' : 'get',
    'headers' : {
      'cookie' : authToken
    },
    'contentType' : 'application/json; charset=utf-8'
  };

  //Make API call
  try {
    var loginResponse = UrlFetchApp.fetch(loginURL, loginOptions);
    if (loginResponse.getResponseCode() == 200) {
      Logger.log('Logged in!');
    }
    else {
      Logger.log('Error logging in: ' + loginResponse.getContentText());
    }
  }
  catch (e) {
    Logger.log('Could not log in: ' + e);
  }

  //Return candidate application ID
  return candidateApplicationID = JSON.parse(loginResponse).response.candtoreqs[0].candidateapplication.id.toFixed(0);
}



//-----------------------------------//
//  Log into Taleo via the REST API  //
//-----------------------------------//

function taleoLogin() {
  //Build API call
  var loginURL = 'https://ch.tbe.taleo.net/CH06/ats/api/v1/login?orgCode=[companyCode]&userName=[username]&password=[password]';
  var loginOptions = {
    'method' : 'post',
    'contentType' : 'application/json'
  };

  //Make API call
  try {
    var loginResponse = UrlFetchApp.fetch(loginURL, loginOptions);
    if (loginResponse.getResponseCode() == 200) {
      Logger.log('Logged in!');
    }
    else {
      Logger.log('Error logging in: ' + loginResponse.getContentText());
    }
  }
  catch (e) {
    Logger.log('Could not log in: ' + e);
  }

  //Return full authToken key
  return authToken = 'authToken=' + JSON.parse(loginResponse).response.authToken;
}


//-------------------------------------//
//  Log out of Taleo via the REST API  //
//-------------------------------------//

function taleoLogout(authToken) { 
  //Build API call
  var logoutURL = 'https://ch.tbe.taleo.net/CH06/ats/api/v1/logout';
  var logoutOptions = {
    'method' : 'post',
    'headers' : {
      'cookie' : authToken
    },
    'contentType' : 'application/json; charset=utf-8'
  };

  //Make API call
  try {
    var logoutResponse = UrlFetchApp.fetch(logoutURL, logoutOptions);
    if (logoutResponse.getResponseCode() == 200) {
      Logger.log('Logged out!');
    }
    else {
      Logger.log('Error logging out: ' + logoutResponse.getContentText()); 
    }
  }
  catch (e) {
    Logger.log('Could not log out: ' + e); 
  }
}


//-----------------------------------------//
//  Submit data to Taleo via the REST API  //
//-----------------------------------------//

function taleoSubmit(authToken, candID, reqID, appID, intType, requestType) {

  //If phone interview and initial booking
  if(intType == 'phone' && requestType == 'booking') {
    //Build API call
    try {
      var submitURL = 'https://ch.tbe.taleo.net/CH06/ats/api/v1/object/candidateapplication/' + appID;
      var payload = JSON.stringify({ "candidateapplication" : { "candidateId" : candID, "requisitionId" : reqID, "status" : 5033 }});
      var submitOptions = {
        'method' : 'put',
        'headers' : {
          'cookie' : authToken
        },
        'contentType' : 'application/json; charset=utf-8',
        'payload' : payload
      };
    }
    catch (e) {
      Logger.log('Error creating API call: ' + e); 
    }
  }
  else if(intType == 'final' && requestType == 'booking') {
    //Build API call
    try {
      var submitURL = 'https://ch.tbe.taleo.net/CH06/ats/api/v1/object/candidateapplication/' + appID;
      var payload = JSON.stringify({ "candidateapplication" : { "candidateId" : candID, "requisitionId" : reqID, "status" : 5048 }});
      var submitOptions = {
        'method' : 'put',
        'headers' : {
          'cookie' : authToken
        },
        'contentType' : 'application/json; charset=utf-8',
        'payload' : payload
      };
    }
    catch (e) {
      Logger.log('Error creating API call: ' + e); 
    }
  }
  else if(intType == 'phone' && requestType == 'cancel') {
    //Build API call
    try {
      var submitURL = 'https://ch.tbe.taleo.net/CH06/ats/api/v1/object/candidateapplication/' + appID;
      var payload = JSON.stringify({ "candidateapplication" : { "candidateId" : candID, "requisitionId" : reqID, "status" : 5032 }});
      var submitOptions = {
        'method' : 'put',
        'headers' : {
          'cookie' : authToken
        },
        'contentType' : 'application/json; charset=utf-8',
        'payload' : payload
      };
    }
    catch (e) {
      Logger.log('Error creating API call: ' + e); 
    }
  }
  else if(intType == 'final' && requestType == 'cancel') {
    //Build API call
    try {
      var submitURL = 'https://ch.tbe.taleo.net/CH06/ats/api/v1/object/candidateapplication/' + appID;
      var payload = JSON.stringify({ "candidateapplication" : { "candidateId" : candID, "requisitionId" : reqID, "status" : 5047 }});
      var submitOptions = {
        'method' : 'put',
        'headers' : {
          'cookie' : authToken
        },
        'contentType' : 'application/json; charset=utf-8',
        'payload' : payload
      };
    }
    catch (e) {
      Logger.log('Error creating API call: ' + e); 
    }
  }

  //Make API call
  try {
    var submitResponse = UrlFetchApp.fetch(submitURL, submitOptions);
    if (submitResponse.getResponseCode() == 200) {
      Logger.log('Results submitted!');
    }
    else {
      Logger.log('Error submitting results: ' + submitResponse.getContentText());
    }
  } 
  catch (e) {
    Logger.log('Could not submit results: ' + e); 
  }
}

你好,smackjack3,当我写了一些不可能的东西时,我遇到了这些错误,例如,当我忘记了一个“+”符号,或者当我将“+”替换为“=”时。我最好的猜测是返回行“return authToken=”authToken=“”。但您可以尝试检查代码,删除大部分代码。如果您没有收到此错误,但代码没有返回预期的内容(因为不完整),您将知道在哪里查找。谢谢您的建议。如果我在代码编辑器中执行,代码运行良好。“错误”出现在尝试从公共URL访问/执行脚本时。我刚刚意识到,尽管我收到了Google Drive错误消息,以及来自YouCanBook.Me服务的错误消息,但脚本实际上仍在执行。显然,即使脚本执行得很好,我也没有从服务器得到200个响应。出于某种原因,页面似乎返回了500个响应代码。我试图编辑OP,但它一直告诉我代码格式不正确,即使我不碰它也不允许保存。我遇到了完全相同的问题。我也在日志和跟踪中看到我的脚本运行得很好。但是谷歌硬盘的错误也让我很沮丧。@LouisKleiman我找到了一个解决办法,这要感谢Google+社区中的某个人。如果将以下代码添加到doGet()函数中,似乎可以解决问题:var app=UiApp.createApplication();返回应用程序;