Bots de conversa de Telegram amb Google Apps Script

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

Generem una equació i l'enviem a Telegram

En aquest exemple crearem una equació a partir d'un codi LaTex que enviarem juntament amb la comanda i retornarem la imatge corresponent a l'equació demanada. La comanda que farem servir serà de l'estil següent:

/formula ##x^2+y^2=1

on la part que està en color, després de ##, és el codi LaTex de l'equació desitjada.

var token = "^^80216110:AAENhGXmFe3ezDo0TDfSJYA8z_KfxYRrMqs"; // API Token de Telegram 
var telegramUrl = "https://api.telegram.org/bot" + token;  // Url que comunica nuestro bot con Telegram 
function doPost(e){
  var data = JSON.parse(e.postData.contents);  // Llegeix les dades rebudes per JSON i les guarda
  var realitzat = false;
  var text = data.message.text;  // El text enviat
  var id = data.message.chat.id;  // Identificador de la finestra on s'ha escrit el missatge 
  var comanda = text.split("##");  // Separem els paràmetres 
  var cmd = comanda[0];
  if(cmd.indexOf("/formula") >= 0){
    realitzat = true;
    formula(id,comanda[1]);
  }
  if (!realitzat){
    var resposta = "Comanda desconeguda";
    sendText(id,resposta);
  }
}
function formula(ident,formu){
  // Identificador de la carpeta on guardarem els fitxers
  var folderId = "^^UazkEipsUysdDi4NR4rgZnzPmeWWHdk";
  // Demanem la imatge de la fórmula a l'adreça https://latex.codecogs.com 
  var url = "https://latex.codecogs.com/svg.image?%5Cbg%7Bwhite%7D"+ encodeURIComponent(formu);
  // Obtenim la imatge de l'adreça i la passem a format BLOB
  var img = UrlFetchApp.fetch(url).getBlob();
  // Guardem el BLOB en un fitxer
  var fitxer = DriveApp.getFolderById(folderId).createFile(img);
  // Agafem l'identificador del fitxer creat
  var id_fitxer = fitxer.getId();
  // Fem un bucle per esperar que estigui llesta la miniatura
  var repetir = true;
  var cnt = 0;  // Comptador de dècimes de segon
  while(repetir){  // Mentre no estigui
    var thumb = DriveApp.getFileById(id_fitxer).getThumbnail();  // Mirem si ja s'ha creat la miniatura
    Utilities.sleep(100);  // Esperem una dècima de segon
    cnt++;
    if((cnt > 100) || (thumb)){  // Si ja està o han passat deu segons
      repetir = false;  // Sortim del bucle
    }
  }
  sendBlobFile(ident,thumb,formu); // Enviem la imatge a Telegram
                                   // posant el codi LaTex com a peu 
  DriveApp.getFileById(id_fitxer).setTrashed(true);  // Marca com a esborrat el document provisional
}
function sendBlobFile(chatId,blob_data,caption){
  // Funció que envia una imatge en format BLOB
  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);
}
function sendText(chatId,text_env,keyBoard){
  // Funció que prepara per enviar un text o un teclat a Telegram 
  keyBoard = keyBoard || 0;
  if(keyBoard.inline_keyboard || keyBoard.keyboard){
    var data = {
      method: "post",
      payload: {
        method: "sendMessage",
        chat_id: String(chatId),
        text: text_env,
        parse_mode: "HTML",
        reply_markup: JSON.stringify(keyBoard)
      }
    }
  } else {
    var data = {
      method: "post",
      payload: {
        method: "sendMessage",
        chat_id: String(chatId),
        text: text_env,
        parse_mode: "HTML"
      }
    }
  }
  UrlFetchApp.fetch( telegramUrl + '/', data);
}

Si introduïm la comanda que hem indicat més amunt rebrem la següent imatge:

Missatge

 

 

 

 

 

 

 

 

 

 

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