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.