| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
Es tracta de què l'alumne pugui escollir una assignatura de les proposades i, a partir d'aquí, comenci a fer una sèrie d'exercicis organitzats aleatòriament que hagin estat preparats prèviament pel professor.
El professor ha d'escriure a un full de càlcul una llista amb els noms d'usuari dels alumnes que podran accedir al bot de Rita, és a dir, a treballar a la seva assignatura. A un full de càlcul diferent, haurà de preparar una llista d'operacions, problemes o preguntes amb les seves respectives solucions correctes i un conjunt d'opcions incorrectes. Aquestes últimes són necessàries per mostrar a l'alumne com a opció d'elecció de resposta.
El programa de l'script és el següent:
var token = "^^53920153:AAEVdYx2WnugBaDB9Y4jNt6IRvH_9Ij2MgU"; // API Token de Telegram
var telegramUrl = "https://api.telegram.org/bot" + token; // Url que comunica el nostre bot amb Telegram
var webAppUrl = "https://script.google.com/macros/s/^^fycbwA7Pk2IuLG7T9l-dbje2Ush3UdC8icF0WWQVDkVqf5GT4AN1gkvmyyiPQEm1ojOlII/exec";
function setWebhook(){
var url = telegramUrl + "/setWebhook?url=" + webAppUrl;
var response = UrlFetchApp.fetch(url);
}
var IdFull = "^^g8FhFHS-jaedX_BPPwaVyTtYOJdhA5NdlogKx_DOIA";
var num_ex = 0;
var correcte = 0;
var opcio = 0;
// Funció que envia un text a Telegram
function sendText(chatId,text_env){
var cont = {
method: "post",
payload: {
method: "sendMessage",
chat_id: String(chatId),
text: text_env,
parse_mode: "HTML"
}
}
UrlFetchApp.fetch(telegramUrl + '/', cont);
}
function sendText_tecles(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);
}
//Dades usuari
function doPost(e){ // Funció que rep les dades enviades, mitjançant post, per Telegram
var data = JSON.parse(e.postData.contents); // Llegeix les dades rebudes per JSON i les guarda
if (data.callback_query){ // Si és la resposta a un teclat
var text = data.callback_query.data; // Resposta del teclat
var id = data.callback_query.from.id; // Identificador de la finestra on s'ha escrit el missatge
var cmd = text;
}
if (data.message){ // Si és una comanda normal
var text = data.message.text; // Comanda enviada
var id = data.message.chat.id; // Identificador de la finestra d'on prové el missatge
var nom_usuari = data.message.from.username ; // Nom de l'usuari
}
if(text.indexOf(' ') > -1){
var comanda = text.split(" "); // El signe @ separa la comanda dels paràmetres
var cmd = comanda[0]; // Comanda
var par = comanda[1]; // Paràmetre
num_ex = comanda[2]; // num exe al que estem
opcio = comanda[3]; // opcio triada
correcte = comanda[4]; // opcio correcte
var porta_be = comanda[5];//recompte de les que porta be
} else {
var cmd = text;
var par = "";
}
if (cmd == '/catala'){
var resposta = "Actualment no està disponible";
sendText(id,resposta);
}
if (cmd == '/ang'){
var resposta = "Actualment no està disponible";
sendText(id,resposta);
}
if (cmd == '/geo'){
var resposta = "Actualment no està disponible";
sendText(id,resposta);
}
if (cmd == '/mates'){
if (par == "" ){
var tecles = {"inline_keyboard":[
[{"text":"Exercicis","callback_data":"/mates ex"},{"text":"Quiz","callback_data":"/mates quiz"}]//,
]};
var titol = "Què vols fer ?";
sendText_tecles(id,titol,tecles);
}
if (par == 'ex'){
if (isNaN(num_ex)){
var num_ex = 0;
exercici(id,num_ex);
} else {
comprobar_ex(id,num_ex,opcio,correcte);
exercici(id,num_ex);
}
}
if (par == 'quiz'){
if (isNaN(num_ex)){
var num_ex = 0;
var porta_be = 0;
quiz(id,num_ex,porta_be);
} else {
comprobar_quiz(id,num_ex,opcio,correcte,porta_be);
}
}
}
if (cmd == '/start'){
var resposta = "Aprèn amb Rita ??";
sendText(id,resposta);
comprobar(nom_usuari,id);
}
}
function comprobar(nom_usuari,id){
var sh = SpreadsheetApp.openById(IdFull);
var sheet = sh.getSheets();
var dades = sheet[1].getDataRange().getValues();
var rang = sheet[1].getLastRow();
var aturar = 0;
if (rang > 1){
for (var i in dades){
var filera = dades[i];
var nom = filera[0] ;
if (nom==nom_usuari){ // L'hem trobat
var aturar = 1 ;
var tecles = {"inline_keyboard":[
[{"text":"Català","callback_data":"/catala"},{"text":"Anglès","callback_data":"/ang"}],
[{"text":"Matemàtiques","callback_data":"/mates"},{"text":"Geografia","callback_data":"/geo"}]
]};
var titol = "Tria una assignatura ??";
sendText_tecles(id,titol,tecles);
}
}
}
if (aturar!=1){
var resposta = "No pertanys a aquesta classe";
sendText(id,resposta);
}
}
function quiz(id,num_ex,porta_be){
var sh = SpreadsheetApp.openById(IdFull); // Agafem el full
var sheet = sh.getSheets();
var dades = sheet[2].getDataRange().getValues();
var rang = sheet[2].getLastRow(); // Agafem les dades per buscar l'usuari
var n_ex = +rang -1;
num_ex = +num_ex +1 ;
if (n_ex >= num_ex){
if (rang > 1){ // Si és 1 només hi ha els títols
var filera = dades[num_ex];
var titol = filera[0] ;
var Opcio_A = filera[2];
var Opcio_B = filera[3];
var Opcio_C = filera[4];
var Opcio_D = filera[5];
correcte = filera[1];
var opc_num_a = "/mates quiz " + num_ex + " a " + correcte + " " + porta_be;
var opc_num_b = "/mates quiz " + num_ex + " b " + correcte + " " + porta_be;
var opc_num_c = "/mates quiz " + num_ex + " c " + correcte + " " + porta_be;
var opc_num_d = "/mates quiz " + num_ex + " d " + correcte + " " + porta_be;
var tecles = {"inline_keyboard":[
[{"text":Opcio_A,"callback_data":opc_num_a},{"text":Opcio_B,"callback_data":opc_num_b}],
[{"text":Opcio_C,"callback_data":opc_num_c},{"text":Opcio_D,"callback_data":opc_num_d}]
]};
sendText_tecles(id,titol,tecles);
}
} else {
var resposta = "Has fet bé " + porta_be + "/" + n_ex ;
sendText(id,resposta);
}
}
function exercici(id,num_ex){
var sh = SpreadsheetApp.openById(IdFull); // Agafem el full
var sheet = sh.getSheets();
var dades = sheet[0].getDataRange().getValues();
var rang = sheet[0].getLastRow(); // Agafem les dades per buscar l'usuari
if (rang > 1){ // Si és 1 només hi ha els títols
num_ex = +num_ex +1 ;
var filera = dades[num_ex];
var titol = filera[0] ;
var Opcio_A = filera[2];
var Opcio_B = filera[3];
var Opcio_C = filera[4];
var Opcio_D = filera[5];
correcte = filera[1];
var opc_num_a = "/mates ex " + num_ex + " a " + correcte;
var opc_num_b = "/mates ex " + num_ex + " b " + correcte;
var opc_num_c = "/mates ex " + num_ex + " c " + correcte;
var opc_num_d = "/mates ex " + num_ex + " d " + correcte;
var tecles = {"inline_keyboard":[
[{"text":Opcio_A,"callback_data":opc_num_a},{"text":Opcio_B,"callback_data":opc_num_b}],
[{"text":Opcio_C,"callback_data":opc_num_c},{"text":Opcio_D,"callback_data":opc_num_d}]
]};
sendText_tecles(id,titol,tecles); // Envia el teclat
}
}
function comprobar_ex(id,num_ex,opcio,correcte){
var sh = SpreadsheetApp.openById(IdFull); // Agafem el full
var sheet = sh.getSheets();
var dades = sheet[0].getDataRange().getValues();
var rang = sheet[0].getLastRow(); // Agafem les dades per buscar l'usuari
if (rang > 1){ // Si és 1 només hi ha els títols
if (opcio == 'a'){
var filera = dades[num_ex];
var resposta_alum = filera[2];
if (resposta_alum==correcte){
var resposta = "? Resposta correcta ";
sendText(id,resposta);
} else {
var resposta = "? Resposta incorrecta, la resposta és " + correcte;
sendText(id,resposta);
}
}
if (opcio == 'b'){
var filera = dades[num_ex];
var resposta_alum = filera[3];
if (resposta_alum==correcte){
var resposta = "? Resposta correcta ";
sendText(id,resposta)
} else {
var resposta = "? Resposta incorrecta, la resposta és " + correcte;
sendText(id,resposta);
}
}
if (opcio == 'c'){
var filera = dades[num_ex];
var resposta_alum = filera[4];
if (resposta_alum==correcte){
var resposta = "? Resposta correcta ";
sendText(id,resposta);
} else {
var resposta = "? Resposta incorrecta, la resposta és " + correcte;
sendText(id,resposta);
}
}
if (opcio == 'd'){
var filera = dades[num_ex];
var resposta_alum = filera[5];
if (resposta_alum==correcte){
var resposta = "? Resposta correcta ";
sendText(id,resposta);
} else {
var resposta = "? Resposta incorrecta, la resposta és " + correcte;
sendText(id,resposta);
}
}
}
}
function comprobar_quiz(id,num_ex,opcio,correcte,porta_be){
var sh = SpreadsheetApp.openById(IdFull); // Agafem el full
var sheet = sh.getSheets();
var dades = sheet[2].getDataRange().getValues();
var rang = sheet[2].getLastRow(); // Agafem les dades per buscar l'usuari
if (rang > 1){ // Si és 1 només hi ha els títols
if (opcio == 'a'){
var filera = dades[num_ex];
var resposta_alum = filera[2];
if (resposta_alum==correcte){
porta_be = +porta_be + 1;
quiz(id,num_ex,porta_be);
} else {
porta_be = porta_be;
quiz(id,num_ex,porta_be);
}
}
if (opcio == 'b'){
var filera = dades[num_ex];
var resposta_alum = filera[3];
if (resposta_alum==correcte){
porta_be = +porta_be + 1;
quiz(id,num_ex,porta_be);
} else {
porta_be = porta_be;
quiz(id,num_ex,porta_be);
}
}
if (opcio == 'c'){
var filera = dades[num_ex];
var resposta_alum = filera[4];
if (resposta_alum==correcte){
porta_be = +porta_be + 1;
quiz(id,num_ex,porta_be);
} else {
porta_be = porta_be;
quiz(id,num_ex,porta_be);
}
}
if (opcio == 'd'){
var filera = dades[num_ex];
var resposta_alum = filera[5];
if (resposta_alum==correcte){
porta_be = +porta_be + 1;
quiz(id,num_ex,porta_be);
} else {
porta_be = porta_be;
quiz(id,num_ex,porta_be);
}
}
}
}

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