| 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 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:

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

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