| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
Aquest bot filtra, entre els millors restaurants de la ciutat de Barcelona, l'adequat segons un seguit de paràmetres tals com tipus de cuina, el districte on es troba, la valoració del restaurant, el rang de preus, l'horari d'obertura o els serveis oferts pel local (menjar per emportar, consum a l'establiment, etc.).
El programa de l'script és el següent:
var token = "^^70897236:AAHUjCJY2fgTuZHXrBOa1h5wGp2Z8Ay2EeQ"; // API Token de Telegram
var telegramUrl = "https://api.telegram.org/bot" + token; // Url que comunica el nostre bot amb Telegram
var IdFull = "^^QR0FLyqTmnsL9IAoPFyESX0L5jjjtsjMFPPOBxsqJc"; // Identificador del full de càlcul
function doPost(e){
var data = JSON.parse(e.postData.contents); // Llegeix les dades rebudes per JSON i les guarda
var realitzat = false
if (data.message){ // Si és una comanda normal
var text = data.message.text; // El text enviat
var id = data.message.chat.id; // Identificador de la finestra on s'ha escrit el missatge
if (text == '/start'){ // Si és una comanda normal
realitzat = true;
var titol = 'Tipus de cuina';
var tecles = {"inline_keyboard":[[{"text":"Americà","callback_data":"Americà"},
{"text":"Àrab","callback_data":"Àrab"}],[{"text":"Chino","callback_data":"Chino"},
{"text":"Espanyol","callback_data":"Espanyol"}],[{"text":"Fleca","callback_data":"Fleca"},
{"text":"Grec","callback_data":"Grec"}],[{"text":"Índi","callback_data":"Índi"},
{"text":"Italià","callback_data":"Italià"}],[{"text":"Japonés","callback_data":"Japonés"},
{"text":"Mexicà","callback_data":"Mexicà"}]]};
sendText(id,titol,tecles); // Envia el teclat
}
}
if (data.callback_query){
var text = data.callback_query.data;
var id_callback = data.callback_query.from.id;
if (text == 'Americà'){
realitzat = true;
var titol1 = 'Barri'
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Americà%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Americà%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Americà%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Americà%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Americà%Les Corts"},
{"text":"Nou Barris","callback_data":"Americà%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Americà%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Americà%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Americà%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Americà%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Àrab'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Àrab%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Àrab%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Àrab%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Àrab%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Àrab%Les Corts"},
{"text":"Nou Barris","callback_data":"Àrab%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Àrab%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Àrab%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Àrab%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Àrab%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Chino'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Chino%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Chino%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Chino%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Chino%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Chino%Les Corts"},
{"text":"Nou Barris","callback_data":"Chino%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Chino%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Chino%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Chino%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Chino%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Espanyol'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Espanyol%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Espanyol%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Espanyol%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Espanyol%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Espanyol%Les Corts"},
{"text":"Nou Barris","callback_data":"Espanyol%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Espanyol%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Espanyol%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Espanyol%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Espanyol%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Fleca'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Fleca%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Fleca%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Fleca%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Fleca%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Fleca%Les Corts"},
{"text":"Nou Barris","callback_data":"Fleca%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Fleca%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Fleca%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Fleca%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Fleca%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Grec'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Grec%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Grec%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Grec%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Grec%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Grec%Les Corts"},
{"text":"Nou Barris","callback_data":"Grec%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Grec%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Grec%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Grec%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Grec%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Índi'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Índi%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Índi%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Índi%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Índi%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Índi%Les Corts"},
{"text":"Nou Barris","callback_data":"Índi%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Índi%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Índi%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Índi%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Índi%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Italià'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Italià%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Italià%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Italià%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Italià%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Italià%Les Corts"},
{"text":"Nou Barris","callback_data":"Italià%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Italià%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Italià%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Italià%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Italià%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Japonés'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Japonés%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Japonés%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Japonés%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Japonés%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Japonés%Les Corts"},
{"text":"Nou Barris","callback_data":"Japonés%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Japonés%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Japonés%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Japonés%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Japonés%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text == 'Mexicà'){
realitzat = true;
var titol1 = 'Barri';
var tecles1 = {"inline_keyboard":[[{"text":"Ciutat Vella","callback_data":"Mexicà%Ciutat Vella"},
{"text":"Gràcia","callback_data":"Mexicà%Gràcia"}],
[{"text":"Horta - Guinardó","callback_data":"Mexicà%Horta - Guinardó"},
{"text":"L'Eixample","callback_data":"Mexicà%L'Eixample"}],
[{"text":"Les Corts","callback_data":"Mexicà%Les Corts"},
{"text":"Nou Barris","callback_data":"Mexicà%Nou Barris"}],
[{"text":"Sant Andreu","callback_data":"Mexicà%Sant Andreu"},
{"text":"Sant Martí","callback_data":"Mexicà%Sant Martí"}],
[{"text":"Sants - Montjuic","callback_data":"Mexicà%Sants - Montjuic"},
{"text":"Sarrià - Sant Gervasi","callback_data":"Mexicà%Sarrià - Sant Gervasi"}]]};
sendText(id_callback,titol1,tecles1);
}
if (text.length > 9){
realitzat = true;
var arr = text.split('%'); // Separem la comanda en tipus i barri
var tipus = arr[0]; // tipus
var barri = arr[1]; // barri
create_filter(tipus, barri); // Filtrem segons la comanda
var resposta = "";
var ss = SpreadsheetApp.openById(IdFull); // Agafem el full
var sh = ss.getSheetByName("Info_Filtrada");
var dades = sh.getDataRange().getValues();
for (var i in dades){ // Recorrem totes les dades rebudes
if(i > 0){ // Descartem la filera dels títols
var filera = dades[i]; // Agafem una filera
var t = filera[0]; // Filera tipus
var b = filera[1]; // Filera barri
var n = filera[2]; // Filera nom
var inf = filera[3]; // Filera informació
resposta = resposta + n + "\n" + inf + "\n\n";
}
}
sendText(id_callback,resposta);
var s1 = SpreadsheetApp.getActive();
var sheet = s1.getSheetByName("Info_Filtrada");
s1.deleteSheet(sheet); // Eliminem la pestanya del full de càlcul
}
}
}
function create_filter(tps, brr){ // Funció que filtra les dades del full de càlcul
const ss = SpreadsheetApp.openById(IdFull);
const sheet1 = ss.getSheetByName("Docs")
var range = sheet1.getRange("A:D");
const filter = range.createFilter();
const FilterCriteria1 = SpreadsheetApp.newFilterCriteria().whenTextContains([tps]);
const FilterCriteria2 = SpreadsheetApp.newFilterCriteria().whenTextContains([brr]);
const coll1 = 1;
const coll2 = 2;
const add_filter1 = filter.setColumnFilterCriteria(coll1,FilterCriteria1);
const add_filter2 = filter.setColumnFilterCriteria(coll2,FilterCriteria2);
Logger.log("Filter has been added");
var range1 = sheet1.getDataRange();
const new_sheet = ss.insertSheet();
new_sheet.setName("Info_Filtrada");
range1.copyTo(new_sheet.getRange(1,1));
filter.remove();
}
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);
}

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