| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
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}]
]};

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