Bots de conversa de Telegram amb Google Apps Script

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

Donem l'enllaç per descarregar un document de Google Drive

Aquest és un exemple senzill en el que enviarem a l'usuari un enllaç per descarregar un document de Google Drive. En una segona versió, donarem un botó en lloc d'un enllaç, de manera que es veurà d'una forma més endreçada.

Aquest exemple es pot generalitzar, però a partir de tres o quatre documents pot ser més pràctic tenir les descripcions i els enllaços dels documents en un full de càlcul i que l'script els llisti o en generi els botons. També hi ha l'opció de tenir els documents en una carpeta i fer que l'script llisti el seu contingut, així es poden variar els documents sense necessitat de modificar el programa ni estar pendents del full de càlcul.

En principi, el nostre document és només accessible per a ús personal. Si volem que hi puguin accedir altres persones ho haurem de canviar. Amb el document obert, piquem sobre el botó Comparteix.... Se'ns obrirà una finestra en la que picarem el botó canvia. En el desplegable triarem tothom que tingui l'enllaç. Això també ho podem canviar en la carpeta, picant sobre el document amb el botó dret i seleccionant l'opció comparteix. En aquesta finestra hi surt un enllaç que haurem de posar en el programa. L'enllaç obtingut serà similar a aquest:

https://docs.google.com/document/d/1OMqWP7S9oDmclJjd1auSVFunhocukDWPImjhv0FkNFg/edit?usp=sharing

El tros marcat en color és l'identificador del document. Aquest exempel val per a qualsevol tipus de fitxer que estigui guardat a Google Drive i es pugui descarregar amb un enllaç.

El programa, en el que haurem de personalitzar l'adreça URL del fitxer i el token de Telegram, é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 nostre bot amb Telegram 
var docURL = "https://docs.google.com/document/d/1OMqWP7S9oDmclJjd1auSVFunhocukDWPImjhv0FkNFg/edit?usp=sharing";
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 realitzat = false;
  if(text == '/doc'){
    var resposta = "Enllaç al document:\n" + docURL;
    realitzat = true;
    sendText(id,resposta);
  }
  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);
}

Podem fer que se'ns mostri un botó per descarregar el document. Això dona un format més compacte, ja que els enllaços als documents són molt llargs, i és més pràctic si hi ha uns quants documents com a opcions. El programa quedaria com es mostra a continuació:

var token = "^^34328844:AAFIpk-e7j3UZtYQYQaTduf4hEhnDqIcNXI"; // API Token de Telegram 
var telegramUrl = "https://api.telegram.org/bot" + token;  // Url que comunica el nostre bot amb Telegram 
var docURL = "https://docs.google.com/document/d/1OMqWP7S9oDmclJjd1auSVFunhocukDWPImjhv0FkNFg/edit?usp=sharing";
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 realitzat = false;
  if(text == '/doc'){
    realitzat = true;
    // El teclat s'envia en forma de matriu
    // Els claudàtors marquen una filera de tecles
    // L'etiqueta text correspon al que es mostra a la tecla
    // L'etiqueta url correspon a l'enllaç que s'envia
    var tecles = {"inline_keyboard":[
      [{"text":"Document","url":docURL}]
    ]};
    var titol = "Tria una opció";
    sendText(id,titol,tecles);  // Envia el teclat
  }
  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);
}

Si haguéssim de posar botons per a diversos documents (com és lògic, definint una adreça URL per a cada un), podríem posar-los un sota un sota l'altre substituïnt les línies marcades en color per aquestes:

    var tecles = {"inline_keyboard":[
      [{"text":"Document 1","url":docURL1}],
      [{"text":"Document 2","url":docURL2}],
      [{"text":"Document 3","url":docURL3}],
      [{"text":"Document 4","url":docURL4}]
    ]};

Si, en canvi, volem posar dos botons a cada filera, la definició seria així:

    var tecles = {"inline_keyboard":[
      [{"text":"Document 1","url":docURL1}, {"text":"Document 2","url":docURL2}],
      [{"text":"Document 3","url":docURL3}, {"text":"Document 4","url":docURL4}]
    ]};

 

 

 

 

 

 

 

 

 

 

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