Apps Script API возвращает ошибку 404 для существующего проекта. Ошибка возвращена как HTML, а не JSON

Я пытался запустить функцию скрипта приложений с помощью API скрипта приложений. Я настроил сценарий в консоли и создал идентификатор клиента oauth для сценария. Я настроил экран авторизации и развернул скрипт как исполняемый файл API. Я протестировал вызов функции api в том же скрипте, но получил ошибку 404:

Запрошенный URL / v1 / scripts / {{my_script_id}}: запуск не был найден на этом сервере.

Ответ пришел в формате HTML. Я также заметил, что скрипт, кажется, создает собственный идентификатор клиента при вызове из API.

Я попытался отключить и снова включить API, но это не сработало. Я думаю, что проблема может быть в том, что вызывающее приложение находится не в том же проекте, но я не уверен, как это сделать, поскольку документация Google неясна.

function trigger(){
  var bogus = DriveApp.getRootFolder();
  var argument = ["Value0", "Value1", "Value2", "Value3", "Value4", "Value5"]; 

  //         https://www.googleapis.com/auth/script.external_request
  //         https://www.googleapis.com/auth/spreadsheets

 var postRequest = {
    "Content-Type": "application/json",
    "headers": { "Authorization" : "Bearer " + ScriptApp.getOAuthToken()},
    "function": "setStatus",
    "muteHttpExceptions": true,
    "parameters": [argument],
    "devMode": false
 };

  try{
    var response = UrlFetchApp.fetch("https://script.googleapis.com/v1/scripts/{{my_script_id}}:run", postRequest);
    Logger.log(response);
  }catch(err){
    Logger.log(err);
  }
}

Я ожидал какой-то формы ошибки в виде JSON или, возможно, даже для запуска функции, я получил документ HTML, который отображал ошибку 404 при отображении.


person Tommy McGuire    schedule 16.04.2019    source источник


Ответы (1)


Вы не POST отправляете запрос. По умолчанию .fetch метод GET.

Добавьте это в postRequest объект:

method: "POST",

payload также отсутствует в вашем postRequest.

Фрагмент:

var postRequest = {
    "method":"POST", //added
    "contentType": "application/json", //key changed
    "headers": { "Authorization" : "Bearer " + ScriptApp.getOAuthToken()},
    "muteHttpExceptions": true,
     "payload": JSON.stringify({   //added
      "function": "setStatus",
      "parameters": argument, //removed []
      "devMode": false
    })
 };

Использованная литература:

person TheMaster    schedule 16.04.2019
comment
Спасибо за ответ, HTML больше не возвращается. Однако он дает следующую ошибку: {error: {code: 400, message: Request contains an invalid argument., Status: INVALID_ARGUMENT}} Это после обновления запроса следующим образом: {method: POST, Content_Type: application / json, headers : {Авторизация: Bearer + ScriptApp.getOAuthToken ()}, функция: updateStatus, muteHttpExceptions: true, parameters: argument}; Есть идеи относительно того, что может быть причиной этого? - person Tommy McGuire; 16.04.2019
comment
@Tommy parameters и другие элементы в теле запроса должны быть в payload. Просмотрите документацию по UrlFetchApp. Если после изучения документации у вас все еще возникают проблемы, отредактируйте свой вопрос, указав новый код и ошибку, или задайте новый вопрос. - person TheMaster; 16.04.2019