Trabajo para una escuela chárter y cuando recibo nuevos estudiantes tengo que completar un formulario de solicitud de equipo para el estudiante a través de Google Forms. Me gustaría poder enviar automáticamente una respuesta sin tener que completar el formulario cada vez. Ya tengo toda la información sobre el estudiante que necesitaría en una Hoja de Google.
No tengo acceso de edición al formulario y solo puedo usar el script de la aplicación de Google para codificar porque no tengo acceso al servidor ni acceso de administrador en mi computadora portátil de trabajo. Así que esta es realmente mi única opción para la automatización.
Hasta ahora, he podido realizar una llamada de búsqueda con la URL del formulario y un objeto utilizando los ID de entrada para las preguntas.
const obj = { "entry.1111": tName, "entry.2222": sFirst, "entry.3333": sLast, "entry.4444": 'Option 1', //multiple answer question "entry.5555": 'yes', "entry.6666": 'yes', "entry.7777": 'minor', "entry.8888": 'initial' } const options = { 'method': 'post', 'payload': obj } UrlFetchApp.fetch(url,options)Esto funciona siempre que no necesite incluir más de una respuesta por pregunta, pero para algunos estudiantes necesito hacer precisamente eso. Si trato de enviar una cadena como "Opción 1, Opción 2", el script falla.
Editar: Mi código no tiene el comentario en el objeto.
Cuando se envían las respuestas múltiples para una pregunta, desafortunadamente, pensé que el objeto JSON podría no poder usarse directamente para la carga útil. Porque en este caso se utiliza la misma clave. E incluso cuando se utiliza la matriz para el valor, se produce un error. Esto ya se ha mencionado en su comentario.
Entonces, en esta respuesta, me gustaría proponer agregarlo al parámetro de consulta. En este caso, creo que hay 2 patrones para tu situación.
En este patrón, todos los valores se utilizan como parámetros de consulta.
// This script is from https://gist.github.com/tanaikech/70503e0ea6998083fcb05c6d2a857107 String.prototype.addQuery = function(obj) { return this + Object.keys(obj).reduce(function(p, e, i) { return p + (i == 0 ? "?" : "&") + (Array.isArray(obj[e]) ? obj[e].reduce(function(str, f, j) { return str + e + "=" + encodeURIComponent(f) + (j != obj[e].length - 1 ? "&" : "") },"") : e + "=" + encodeURIComponent(obj[e])); },""); } function myFunction() { const url = "### your URL ###"; // Please set your URL. const query = { "entry.1111": tName, "entry.2222": sFirst, "entry.3333": sLast, "entry.4444": ['Option 1', 'Option 2'], "entry.5555": 'yes', "entry.6666": 'yes', "entry.7777": 'minor', "entry.8888": 'initial' }; const endpoint = url.addQuery(query); const options = {'method': 'post'}; const res = UrlFetchApp.fetch(endpoint, options); console.log(res.getContentText()); }En este patrón, solo la pregunta de las múltiples respuestas se envía como parámetros de consulta.
// This script is from https://gist.github.com/tanaikech/70503e0ea6998083fcb05c6d2a857107 String.prototype.addQuery = function(obj) { return this + Object.keys(obj).reduce(function(p, e, i) { return p + (i == 0 ? "?" : "&") + (Array.isArray(obj[e]) ? obj[e].reduce(function(str, f, j) { return str + e + "=" + encodeURIComponent(f) + (j != obj[e].length - 1 ? "&" : "") },"") : e + "=" + encodeURIComponent(obj[e])); },""); } function myFunction() { const url = "### your URL ###"; // Please set your URL. const query = { "entry.4444": ['Option 1', 'Option 2'], }; const obj = { "entry.1111": tName, "entry.2222": sFirst, "entry.3333": sLast, "entry.5555": 'yes', "entry.6666": 'yes', "entry.7777": 'minor', "entry.8888": 'initial' }; const endpoint = url.addQuery(query); const options = { 'method': 'post', 'payload': obj }; const res = UrlFetchApp.fetch(endpoint, options); console.log(res.getContentText()) }