DEV Community

Jorge
Jorge

Posted on • Originally published at jorge.aguilera.soy on

Enviar imágenes y texto a Telegram desde GoogleSheet

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:

sheet2

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())
  }
}
Enter fullscreen mode Exit fullscreen mode

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)