#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
}