Bots de conversa de Telegram amb Google Apps Script

Bots de conversa Exemples Dades pràctiques   Recursos CITCEA
Google Apps Script Projectes Interacció   Inici

BotRestaurant

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

 

 

 

 

 

 

 

 

 

 

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