Вызов исполняемой функции API сценариев приложений с параметрами из другого сценария приложений вызывает проблемы

#google-apps-script

Вопрос:

Я разработал сценарий приложений под названием «sudofunctions», который выполняет конфиденциальные команды с использованием учетной записи с повышенными правами. Он используется совместно со всем доменом и выполняется от имени автора.

Затем я разработал «Клиентские функции», которые могут выполняться любым аутентифицированным пользователем и должны вызывать функции в sudofunctions.

sudofunctions до сих пор имеет 2 функции

 function test()
{
  createUser("email@domain.com", "Full name")

}
function createUser(email, name)
{
  console.log("Checkpoint Alpha")
}
 

Затем clientFunctions пытается вызвать обе эти функции, вызов функции test() работает отлично

   var token = ScriptApp.getOAuthToken();
  var options = {
    "method" : "POST", 
    "headers": {"Authorization": "Bearer "   token }, 
    "payload" : {
      "function": "test",
      "devMode": "true"
    },
    muteHttpExceptions:true
   }
  var rest = UrlFetchApp.fetch("https://script.googleapis.com/v1/scripts/ABCXYZ:run", options)
  
 

Однако вызов CreateUser завершается ошибкой

  var token = ScriptApp.getOAuthToken();
 var options = {
    "method" : "POST", 
    "headers": {"Authorization": "Bearer "   token }, 
    "payload" : {
      "function": "createUser",
      "parameters":["john@domain.com", "John Doe"],
      "devMode": "true"
    },
    muteHttpExceptions:true
   }
  var rest = UrlFetchApp.fetch("https://script.googleapis.com/v1/scripts/ABCXYZ:run", options)
       
 

С ошибкой:

     {
  "error": {
    "code": 400,
    "message": "Invalid JSON payload received. Unknown name "parameters": Cannot bind query parameter. 'parameters' is a message type. Parameters can only be bound to primitive types.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.BadRequest",
        "fieldViolations": [
          {
            "description": "Invalid JSON payload received. Unknown name "parameters": Cannot bind query parameter. 'parameters' is a message type. Parameters can only be bound to primitive types."
          }
        ]
      }
    ]
  }
}
 

Согласно документации, это должно сработать.

https://developers.google.com/apps-script/api/reference/rest/v1/scripts/run#request-body

Есть идеи, где я ошибаюсь?

Спасибо за помощь.

Ответ №1:

В вашем сценарии, судя по вашему сообщению об ошибке, как насчет следующей модификации?

От:

  var options = {
    "method" : "POST", 
    "headers": {"Authorization": "Bearer "   token }, 
    "payload" : {
      "function": "createUser",
      "parameters":["john@domain.com", "John Doe"],
      "devMode": "true"
    },
    muteHttpExceptions:true
   }
 

Для:

 var options = {
  "method": "POST",
  "headers": { "Authorization": "Bearer "   token },
  "contentType": "application/json",
  "payload": JSON.stringify({
    "function": "createUser",
    "parameters": ["john@domain.com", "John Doe"],
    "devMode": "true"
  }),
  "muteHttpExceptions": true
}
 

Ссылка: