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 de dispersió 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 dispersió amb els valors del full de càlcul.

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("disp");  // Agafem el full
  var dades = sh.getDataRange().getValues();  // Agafem les dades
  var graf = Charts.newScatterChart();  // Creem el gràfic
  graf.setTitle("Resultats de les proves");  // Posem un títol
  graf.setDimensions(700, 500);  // Definim les mides
  for (var i in dades){  // Recorrem totes les dades
    var row = dades[i];  // Agafem una filera
    if (i == 0){  // La primera filera conté els títols
      // Configurem les columnes de la taula
      taula.addColumn(Charts.ColumnType.NUMBER, row[0]);
      taula.addColumn(Charts.ColumnType.NUMBER, row[1]);
      taula.addColumn(Charts.ColumnType.NUMBER, row[2]);
	  // Configurem el gràfic
      var titY = row[1] + "\n" + row[2];
      graf.setXAxisTitle(row[0]);
      graf.setYAxisTitle(titY);
    } else {
      taula.addRow([row[0], row[1], row[2]]);
    }
  }
  var taula_dades = taula.build();  // Construïm la taula
  graf.setDataTable(taula_dades);  // Vinculem la taula al gràfic
  graf.setPointStyle(Charts.PointStyle.MEDIUM);  // Tipus de punts desitjats
  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();  // Creem el gràfic
    var descrip = "Gràfic";  // Posem un títol
    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.