| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
En aquest exemple situarem un punt i marcarem una àrea en un mapa de Google i l'enviarem a l'usuari com a imatge en format de dades binàries (BLOB). La imatge que generarem és la següent:

En aquest cas, per simplificar el programa, els punts estan definits en el propi programa. Podrien, però, estar en un full de càlcul; d'aquesta manera el programa podria agafar uns punts diferents segons els paràmetres introduïts per l'usuari.
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
function mapa(){
var map = Maps.newStaticMap(); // Crea un mapa
// Definim les propietats i els punts
map.setSize(600, 600);
map.setCenter("Avinguda Diagonal 647, Barcelona");
map.setZoom(17);
map.addMarker("ETSEIB");
map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.ORANGE,"A");
map.addMarker("Avinguda Diagonal 649, Barcelona");
var coord = [41.3851564,2.1160347,
41.3838964,2.1166047,
41.3834964,2.1149047,
41.3847264,2.1143547,
41.3851564,2.1160347]; // Coordenades per a l'àrea
map.setPathStyle(4, Maps.StaticMap.Color.RED, Maps.StaticMap.Color.BLUE);
map.addPath(coord);
var mapa_blob = map.getBlob(); // Converteix el mapa a dades binàries
return mapa_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 == '/mapa'){
var blob = mapa(); // Crea el mapa
var descrip = "Mapa";
sendBlobFile(id,blob,descrip); // L'envia 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);
}
Podem generar un fitxer PDF amb el mapa i fer que, a més de mostrar-se la imatge, es pugui descarregar el fitxer. Per fer-ho, canviaríem les línies marcades en color en l'script anterior per les següents:
var b64 = blob.getContentType() + ';base64,'+ Utilities.base64Encode(blob.getBytes());
var htmlEst = '<style type="text/css" media="print">@page {size: landscape;} </style>';
var htmlInst = htmlEst + '<img src="data:' + b64 + '" width=600 alt="Mapa">';
var html = HtmlService.createHtmlOutput(htmlInst);
var pdf = DriveApp.createFile(html.getAs("application/pdf").setName("mapa.pdf"));
var urlDescPDF = pdf.getDownloadUrl(); // Enllaç per descarregar el fitxer
var pdfId = pdf.getId();
var descrip = "Pots descarregar el PDF aquí: " + urlDescPDF;
sendBlobFile(id,blob,descrip);
Una altra opció seria crear un arxiu amb la imatge (per exemple en format GIF) i enviar l'enllaç per descarregar-lo. Això és el que fa el següent programa:
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 IdCarpeta = "^^Hlod5Y4qEsLF9HrIsE6oYQa32f6NHeo"; // Carpeta on guardarem el fitxer
function mapa(id_usr){
var map = Maps.newStaticMap(); // Crea un mapa
// Defineix les propietats i els punts del mapa
map.setSize(600, 600);
map.setCenter("Avinguda Diagonal 647, Barcelona");
map.setZoom(17);
map.addMarker("ETSEIB");
map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID, Maps.StaticMap.Color.ORANGE,"A");
map.addMarker("Avinguda Diagonal 649, Barcelona");
var coord = [41.3851564,2.1160347,
41.3838964,2.1166047,
41.3834964,2.1149047,
41.3847264,2.1143547,
41.3851564,2.1160347]; // Coordenades de l'àrea
map.setPathStyle(4, Maps.StaticMap.Color.RED, Maps.StaticMap.Color.BLUE);
map.addPath(coord);
var mapimg = map.getAs("image/gif"); // El converteix a imatge GIF
mapimg.setName("mapa.gif"); // Li posa nom
// Crea el fitxer
var file = DriveApp.getFolderById(IdCarpeta).createFile(mapimg); // Crea el fitxer
var url_fitxer = file.getDownloadUrl(); // Agafa l'adreça per descarregar-lo
var resposta = "El fitxer està llest, el pots descarregar a " + url_fitxer;
sendText(id_usr,resposta);
}
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 == '/mapa'){
mapa(id); // Crea el mapa
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.