Bots de conversa de Telegram amb Google Apps Script

Bots de conversa Exemples Dades pràctiques   Recursos CITCEA
Google Apps Script Projectes Interacció   Inici

Enviar fitxers a Telegram

Enviar documents

Podem enviar un document que es trobi a internet fent servir la següent funció:

function sendDocument(id,fitxer){
  var url = telegramUrl + "/sendDocument?chat_id=" + id + "&document=" + fitxer;
  UrlFetchApp.fetch(url);
}

Telegram afirma que aquesta comanda serveix per a fitxers PDF, GIF o ZIP. Aquesta funció, però, no serveix per enviar fitxers que estan a Google Drive ja que l'adreça d'aquests no acaba en un nom de fitxer.

Enviar fotos o imatges

Per enviar una imatge o una fotografia a Telegram podem fer servir la següent funció:

// El primer paràmetre és el xat al que s'ha d'enviar, el segon la URL de la foto  
//  i el tercer el títol de la foto
function sendPhoto(chatId,url_foto,caption){ 
  // La variable cont conté, en format JSON, les dades que cal enviar
  var cont = {
    method: "post",
    payload: {
      method: "sendPhoto",
      chat_id: String(chatId),
      photo: url_foto,
      caption: caption,
      parse_mode: "HTML"
    }
  }
  UrlFetchApp.fetch(telegramUrl + '/', cont);
}

El tros de programa que hi ha a continuació mostra un possible ús de la funció.

  var token = "^^11744646:AAERCpfRifGP0_UIB8XASKSVd_LROkdQcKo"; // API Token de Telegram
  var telegramUrl = "https://api.telegram.org/bot" + token;  // Url que comunica el nostre bot amb Telegram 
  var num_aleatori = Math.floor(Math.random() * 9);  // Valor aleatori
  var url = "https://robohash.org/" + num_aleatori;  // Creem una URL de la foto a partir d'un valor aleatori
  var titol = "Imatge " + num_aleatori;  // Títol de la foto
  sendPhoto(id,url,titol);  // Enviem la foto

I aquest seria un dels possibles resultats:

Enviar imatge

Enviar vídeos

Podem enviar un vídeo que es trobi a internet fent servir la següent funció:

function sendVideo(id,fitxer){
  var url = telegramUrl + "/sendVideo?chat_id=" + id + "&video=" + fitxer;
  UrlFetchApp.fetch(url);
}

Enviar fitxers com a dades binàries (BLOB)

BLOB (binary large objects) és una forma de guardar o enviar dades que es basa en un format binari. Podem fer servir aquest format per enviar imatges o altres elements. És especialment interessant per a imatges que hem generat en línia, per exemple els codis QR. Per enviar una imatge en format BLOB podem fer servir aquesta funció:

function sendBlobFile(chatId,blob_data,caption){
  var payload = {
    method: "sendPhoto",
    chat_id: String(chatId),
    photo: blob_data,
    caption: caption,
    parse_mode: "HTML"
  };
  var options = {
    method: "POST",
    payload: payload,
    muteHttpExceptions: true
  };
  UrlFetchApp.fetch( telegramUrl + '/', options);
}

Per exemple, per enviar una imatge podríem fer:

  var caption = "Imatge de prova"; // Missatge que acompanya al codi 
  var imat = "https://recursos.citcea.upc.edu/telegram/tutor/funciona.gif"; 
  var response = UrlFetchApp.fetch(imat); // Carrega la imatge corresponent a la url generada 
  var binaryData = response.getContent(); 
  // La funció newBlob té tres paràmetres: les dades, el tipus de dades i el nom que li volem donar
  // carrega la imatge com a dades binaries en una variable 
  var blob_data = Utilities.newBlob(binaryData, 'image/gif', 'Esquema'); 
  sendBlobFile(chatId,blob_data,caption); // Enviem la imatge al Telegram però amb format binari (BLOB) 

Els tipus de dades que probablement farem servir més habitualment són:

Tipus Utilització Extensions
habituals
image/gif Imatge en format Graphics Interchange Format gif
image/jpeg Imatge en format Joint Photographic Experts Group jpg
jpeg
image/png Imatge en format Portable Network Graphics png

Els tipus possibles són moltíssims i la llista no està tancada. Podeu trobar una versió actualitzada en aquesta pàgina. Abans, però, d'enviar un tipus de fitxer a terceres persones feu una prova per veure si funciona. Jo ho he provat amb alguns tipus que m'ha semblat que haurien de funcionar i no ha estat així. No els llisto perquè sempre pot ser que Telegram contempli implementar-ho més endavant.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.