- INFO
-
Un lector ha pedido si sería posible modificar el script para enviar primero la imagen y luego el texto, así que he aprovechado para crear otro post y engordar el blog.
Este post es simplemente otra forma de enviar mensajes a Telegram desde GoogleSheet parecido al del post googlesheet-telegram.html, así que básicamente copiare el codigo nuevo sin muchas explicaciones
Como este post se basa exactamente en el post comentado los requisitos son los mismos así como la preparación y entorno de ejecución. Simplemente vamos a usar otra disposición de las celdas y en lugar de enviar a muchos grupos vamos a suponer que queremos mandar a uno sólo
Hoja Excel
El script se va a basar en la disposición de celdas reflejadas en la imagen siguiente:
Como puedes ver la idea ahora es poner en filas los mensajes que queremos enviar y asociar una imagen a cada uno (así mismo fíjate que podemos formatear el texto con negritas, subrayados, etc usando un subset de Markdown)
La "clave" para que el script se ejecute correctamente es la primera columna "Estado" donde el script irá mirando si queremos enviar esa fila. Aquellas filas que estado sea enviar
serán enviadas al grupo
Así mismo, a modo de control, el script usará esta columna para indicar si ha podido enviar el mensaje y cuando lo ha hecho y de esta forma facilitar el poder ejecutar el script sin repetir mensajes
El script sólo leerá las primeras 100 filas , así que de vez en cuando haz limpieza de estas borrando/moviendo las que ya no te interesen
Script
El script es muy parecido al anterior así que simplemente comentar:
ahora recorremos filas de un rango (A5:C100)
enviamos un primer mensaje a Telegram llamando al endpoint /sendPhoto
enviamos un segundo mensaje con el texto a modo de explicación de la foto
var ui = SpreadsheetApp.getUi();
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var rangeData = sheet.getDataRange();
var lastColumn = rangeData.getLastColumn();
var lastRow = rangeData.getLastRow();
function sendTelegrams() {
const bootToken = sheet.getRange(1,3).getValue()
const group = sheet.getRange(2,3).getValue()
const rows = sheet.getRange(5,1,100,3).getValues()
for( var r=0; r<rows.length; r++){
const row = rows[r];
if( row[0].toString().toLowerCase() !== "enviar"){
continue;
}
var payload = {
'chat_id':group,
'photo': row[1],
'parse_mode':'MarkdownV2',
'disable_web_page_preview':false
}
var options = {
'method' : 'post',
'contentType': 'application/json',
'payload': JSON.stringify(payload),
'muteHttpExceptions':true
};
var url = 'https://api.telegram.org/bot'+bootToken+'/sendPhoto';
const respImage = UrlFetchApp.fetch(url, options);
Logger.log(options.payload)
Logger.log(respImage)
if( respImage.getResponseCode() != 200 ){
sheet.getRange(5+r,1).setValue(respImage.getResponseCode()==200?"Enviado "+new Date():respImage.getContentText())
return;
}
payload.text = row[2];
options.payload = JSON.stringify(payload);
var url = 'https://api.telegram.org/bot'+bootToken+'/sendMessage';
const respMessage = UrlFetchApp.fetch(url, options);
Logger.log(options.payload)
Logger.log(respMessage)
sheet.getRange(5+r,1).setValue(respImage.getResponseCode()==200?"Enviado "+new Date():respImage.getContentText())
}
}
Y ya estaría. Cada vez que pulsemos el botón "Enviar", el script se ejecutará (si seguiste los pasos del post anterior) recorriendo las filas y enviando aquellas que estén marcadas como "enviar"
Top comments (0)