| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
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:

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

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);
}

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