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 un diagrama tipus pastís que es pot consultar des de Telegram

En aquest exemple agafarem unes dades que tenim en un full de càlcul i generarem una imatge en forma de diagrama de tipus pastís amb els valors del full de càlcul. En aquest cas hi ha dotze valors i hem definit dotze possibles colors).

La següent imatge mostra el contingut del full de càlcul en un moment donat:

Full de càlcul

El resultat que obtindrem serà el gràfic següent:

Gràfic

En el nostre cas, podem demanar el gràfic des de Telegram (funció doPost) fent servir la comanda /grafic.

El programa és el següent:

var token = "^^34328844:AAFIpk-e7j3UZtYQYQaTduf4hEhnDqIcNXI"; // API Token de Telegram 
var telegramUrl = "https://api.telegram.org/bot" + token;  // URL que comunica el bot de conversa amb Telegram 
var ssId = "^^ThsoSjkeMSfwEKy4mn_4QEYH96sxv3VURqE3WHCTswDA";  // Identificador del full de càlcul
function grafic(){
  var taula = Charts.newDataTable();  // Creem una taula de dades
  var sh = SpreadsheetApp.openById(ssId).getSheetByName("circ");  // Agafem el full
  var dades = sh.getDataRange().getValues();  // Llegim les dades del full
  for (var i in dades){  // Recorrem totes les dades
    var row = dades[i];  // Llegeix una filera
    if (i == 0){  // La primera filera conté els títols de les columnes
      // Configurem les columnes de la taula
      taula.addColumn(Charts.ColumnType.STRING, row[0]);
      taula.addColumn(Charts.ColumnType.NUMBER, row[1]);
    } else {
      taula.addRow([row[0], row[1]]);
    }
  }
  var taula_dades = taula.build();  // Creem la taula
  var graf = Charts.newPieChart();  // Creem el gràfic
  // Definim les propietats del gràfic
  graf.setTitle("Consum mensual");
  graf.setDimensions(700, 500);
  graf.setDataTable(taula_dades);  // Vinculem la taula al gràfic
  graf.set3D();  // Demanem que sigui un gràfic amb aspecte tridimensional
  // Definim dotze colors per als sectors
  graf.setColors(["#FF0000","#008800","#0000FF","#666600",
    "#FF00FF","#006666","#CC6600","#8000FF",
    "#888888","#884400","#00FFFF","#444444"]);
  var grafic = graf.build();  // Construïm el gràfic
  var grafic_blob = grafic.getBlob(); // Converteix el gràfic a dades binàries 
  return grafic_blob;
}
function doPost(e){
  var data = JSON.parse(e.postData.contents);  // Llegeix les dades rebudes per JSON i les guarda
  var text = data.message.text;  // Comanda enviada
  var id = data.message.chat.id;  // Identificador de la finestra d'on prové el missatge 
  var id_usuari = data.message.from.id; // Identificador de l'usuari
  var id_missatge = data.message.message_id; // Identificador del missatge
  var lang = data.message.from.language_code ;  // Idioma de l'usuari 
  var nom_usr = data.message.from.first_name ;  // Nom de l'usuari
  var location = data.message.location;  // Localització de l'usuari (si es sap) 
  var realitzat = false;
  if(text == '/grafic'){
    var blob = grafic();  // Generem el gràfic
    var descrip = "Gràfic";  // Títol per a la imatge
    sendBlobFile(id,blob,descrip);  // Enviem el gràfic a Telegram
    realitzat = true;
  }
  if (!realitzat){
    var resposta = "Comanda desconeguda";
    sendText(id,resposta);
  }
}
function sendText(chatId,text_env,keyBoard){  // Funció que envia 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);
}
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);
}

 

 

 

 

 

 

 

 

 

 

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