Enviar mensajes a un grupo de Telegram es realmente fácil pues con una simple llamada HTTP puedes enviarlos. En este post vamos a utilizar la capacidad de GoogleSheet de ejecutar scripts para hacer esta llamada a una serie de grupos de Telegram con un simple click.
Preparación
Vamos a necesitar:
Una hoja de cálculo de GoogleSheet
El token de un bot de Telegram que obtendremos desde @botfather
Los IDs de los grupos a los que queremos enviar el mensaje y en los que el admin de cada grupo habrá dado permisos para ello al bot
Bot de Telegram
Crear un bot de Telegram es realmente fácil y no lleva más de un minuto y unos pocos clicks (obviamente necesitas tener una cuenta de Telegram). Bien sea desde la aplicación del móvil, la versión web o la versión de escritorio (sí, Telegram tiene 3 formas de usarlo) buscaremos en los contactos a @botfather
Una vez empecemos el diálogo con BotFather seleccionaremos /newbot y seguiremos los pasos que nos va guiando el bot
Al final del proceso tendremos nuestro bot listo y podremos consultar su API token (siempre puedes consultarlo así que no necesitas guardarlo pero allá donde lo vayas a usar ten cuidado de no compartirlo o versionarlo en algún repo donde pueda acceder gente que no quieras que lo vean)
Grupos de telegram
Una vez que tengas el bot creado el admin del grupo al que quieres enviar mensajes le tiene que añadir como admin para que pueda escribir en el grupo.
Así mismo tienes que saber el ID del grupo. Si es público es simplemente su nombre (con la arroba) pero si es un grupo privado tienes que "adivinar" su id. La forma más fácil de buscarlo es con el cliente web (https://web.telegram.org) fijándote en la url una vez que seleccionas el grupo:
El id del grupo privado es "-100" más la parte subrayada de la imagen (a mí no me mires, es cosa de Telegram)
Sheet
Con todo ello vamos a preparar en una hoja de GoogleSheet una serie de celdas para que nos sea cómodo poder especificar:
el token
el titulo
el mensaje
una imagen (opcional)
una lista de grupos
una lista de celdas donde ir poniendo si el envío ha sido correcto o no.
El diseño que he hecho corresponde al de la imagen siguiente y el código adjunto será en base a estas posiciones:
A1: un dibujo de un boton y que tiene asociado el script
sendTelegrams
cuando se le pincha (usar el boton derecho sobre la imagen)B2: el Token
B3: el titulo
B4: una url a una imagen en internet
B5-N: recorreremos todas las celdas y las concatenaremos para hacer le mensaje
C3-N: una lista de ids de grupos privados o públicos
Desde Herramientas seleccionaremos "Editor de secuencias de comandos" y en el editor que nos aparece sustituieremos lo que nos crea por defecto por el siguiente código:
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 title = sheet.getRange(3,2).getValue()
const image = sheet.getRange(4,2).getValue()
let message = sheet.getRange(5,2,10,1).getValues().join('\n')
const bootToken = sheet.getRange(1,3).getValue()
if( image != ""){
message+="\n[]("+image+")"
}
const groups = sheet.getRange(3,3,100,1).getValues()
for( var g=0; g<groups.length; g++){
if(!groups[g][0]){
continue
}
var payload = {
'chat_id':groups[g][0],
'text': title+'\n'+message,
'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+'/sendMessage';
const resp = UrlFetchApp.fetch(url, options);
sheet.getRange(3+g,4).setValue(resp.getResponseCode()==200)
}
}
El script es realmente simple:
accedemos a los objetos de GoogleSheet
leemos los valores de las celdas de interés
concatenamos todas las celdas de mensajes con retornos de carro (\n)
si queremos ḿandar una imagen la incluimos en formato markdown
recorremos el rango destinado a los ids de grupo y para cada uno construimos un payload según lo quiere Telegram y un options según lo quiere Google
enviamos el mensaje con
UrlFetchApp
y vamos escribiendo si ha ido bien o malchimpun
- NOTE
-
Como ves para no complicar el ejemplo he optado por usar MarkdownV2 aunque también se puede usar HTML (en realidad un subconjunto del mismo) simplemente cambiando
parse_mode
ahtml
Guardamos el script y volvemos a la hoja de cálculo donde podemos añadir un dibujo (Insertar/Dibujo) de un botón por ejemplo y con el botón derecho sobre él asignarle que ejecute la función:
Escribir mensajes
Por último simplemente nos resta redactar nuestro mensaje usando formato markdown
La idea es que puedas escribir de forma cómoda usando las celdas de Google de tal forma que no hace falta que lo escribas todo en una única celda, sino aprovechar que, si le das al enter, Google te lleva a la celda inferior. El scritp concatenará todas estas celdas en una cadena con retornos de carro. De esta forma, si dejas una celda en blanco podrás formatear mejor los mensajes
- NOTE
-
He puesto un límite de 100 celdas, más que suficientes para un mensaje
Una vez que tengas preparado el mensaje puedes, por ejemplo, quitar (o mover) todos los ids salvo uno de pruebas y pulsar el botón para que se ejecute el script. Si todo ha ido bien y el mensaje es de tu gusto, puedes volver a poner en las celdas de los ids los mismos y volver a pulsar el botón.
Para cada grupo indicado el script escribirá un TRUE o FALSE si ha podido enviar el mensaje en ese canal o no
Top comments (0)