He intentado automatizar el envío de mensajes cuando algunos de mis informes se cargan a través de un activador de casilla de verificación en Gscript. (El informe de la idea se actualiza -> El usuario marca la casilla de verificación -> el mensaje se envía a Slack)
Hasta ahora, he podido crear el script para enviar el mensaje a Slack e incluso restablecer mis casillas de verificación por la noche. El único problema que tengo es con el gatillo.
He usado onEdit como disparador, en mis tres casillas de verificación (A1, B1, C1):
function onEdit(e) { const as = e.source.getActiveSheet(); const cell = e.range.getA1Notation(); if(as.getName() == 'Sheet1' && cell.getRange('A1').ischecked() === true) { SendSlackMessage1(); } else if (as.getName() == 'Sheet1' && cell.getRange('B1').ischecked() === true) { SendSlackMessage2(); } else if (as.getName() == 'Sheet1' && cell.getRange('C1').ischecked() === true) { SendSlackMessage3(); }}Como referencia, aquí está la función para enviar mensajes:
function SendSlackMessage1() { const url = "https://hooks.slack.com/services/XXXXXXXXXXXXX"; const params = { method: "post", contentType: "application/json", payload: JSON.stringify({ "text":"Report A has been uploaded" }) } const sendMsg = UrlFetchApp.fetch(url, params) var respCode = sendMsg.getResponseCode() Logger.log(sendMsg) Logger.log(respCode) }(Todas las funciones de SendSlackmessages son iguales, excepto el texto (Informe A/B/C), y ya he autorizado que las funciones se ejecuten en Google.
Entonces, obviamente, estoy haciendo algo mal, pero ¿qué? mi primera conjetura sería que no estoy definiendo correctamente el rango e, pero no sé qué hacer a continuación.
Estaría agradecido si alguien puede ayudarme o indicarme dónde buscar.
Vuelvo aquí porque he encontrado las respuestas a mis problemas y quiero compartir:
En primer lugar, con onEdit(e), no puede ejecutarlo dentro del editor, de ahí mis problemas para encontrar lo que estaba mal. Entonces, aquí está el código que estoy usando ahora, que funciona:
function SendSlackMessages(e) { const col = e.range.getColumn(); const row = e.range.getRow(); const checked = e.range.isChecked(); var rtexte = ""; const url = "https://hooks.slack.com/services/XXXX"; if (col == 3 && row == 3){ rtexte = "Short EPGS Horizon"; } else if (col == 4 && row == 3){ rtexte = "Generic Days with EPGS Data"; } else if (col == 5 && row == 3){ rtexte = "TBAs"; } else {return false;} const params = { method: "post", contentType: "application/json", payload: JSON.stringify({ "text":"Report "+ rtexte +" has been uploaded" }) } if(checked === true){ const sendMsg = UrlFetchApp.fetch(url, params); var respCode = sendMsg.getResponseCode(); Logger.log(sendMsg); Logger.log(respCode); } }En esta función, he agregado un disparador onEdit, y funciona, envía mensajes de holgura solo cuando la edición ocurre en las celdas correctas.
Espero que pueda ayudar a alguien en el futuro.
El activador simple onEdit() no se puede usar para realizar una acción que necesita una autorización. Probablemente una variante instalada del disparador pueda funcionar. Puede ser una de las causas del problema.
El código se ve raro. ¿Estás seguro de que funcionará en absoluto?
cell constante es una cadena. Por lo tanto, no puede obtener un rango de esta manera: cell.getRange('A1') . Quizás desee cambiar sus definiciones de esta manera (si necesita la constante): const cell = e.range;cell.getRange('A1') probablemente debería ser: as.getRange('A1')ischecked() funcionará. Debería ser isChecked() :https://developers.google.com/apps-script/reference/spreadsheet/range#ischecked
etc...