| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
Els inline bots són un tipus especial de bots que es poden fer servir des de qualsevol xat o grup de Telegram. Normalment el seu nom comença per una @. Per exemple, si a un xat de Telegram escrivim
@gif mail
se'ns mostrarà una col·lecció d'imatges GIF relatives al correu. Picant sobre una de les imatges s'enviarà al xat corresponent.
Anem a crear el nostre inline bot. D'entrada el procés amb el BotFather serà el mateix que per a un bot normal. Un cop tenim el bot definit, passarem a configurar-lo. Amb la comanda /mybots ens sortirà la llista dels nostres bots (potser només un) i picarem sobre el nom d'usuari del nou bot. Podem editar les mateixes opcions que per a un bot normal però també hem d'anar a Bot Settings i seleccionar Inline Mode i dir-li Turn On.
També podem anar a Edit inline placeholder per especificar què volem que ens demani quan fem servir el bot. Per exemple podem posar una frase com Indica usuari.
Els inline bots poden ser de diversos tipus. En el tipus article la informació es mostra com es pot veure a la figura següent.

El text que es mostra, en color gris clar, a la línia d'ordres és el que hem posat a Edit inline placeholder. A l'indicar la dada que se'ns demana la llista es restringeix a les condicions especificades.
Si piquem sobre un dels elements de la llista mostrada se'ns mostrarà la fitxa detallada.

Els inline bots intercanvien informació en format JSON i pot arribar de diferents formes. Per evitar sorpreses, és recomanable preveure-les totes, com es fa a continuació:
var data = JSON.parse(e.postData.contents); // Tracta les dades rebudes com a JSON i les guarda a dades
if(data.mesage){ // En cas que no fem servir callback
var text = data.message.text; // Text del missatge (el que escrivim al costat del nom del bot)
var id = data.message.chat.id; // Identificador de la finestra des de la que s'ha enviat
var id_usuari = data.message.from.id; // Identificador de l'usuari que ha escrit el missatge
var id_missatge = data.message.message_id; // Identificador del missatge
var update_id = data.update_id // Identificador del missatge final
var lang = data.message.from.language_code ; // Llengua que l'usuari té configurada a Telegram
var nom_usuari = data.message.from.first_name ; // Nom de l'usuari que ha enviat el missatge
var posicio = data.message.location; // Localizació de l'usuari, si és possible
}
if(data.callback_query){ // En cas que fem servir callback
var id_usuari = data.callback_query.from.id; // Identificador de l'usuari que ha escrit el missatge
var id = data.callback_query.message.chat.id; // Identificador de la finestra des de la que s'ha enviat
var id_missatge = data.callback_query.message.message_id; // Identificador del missatge
var text = data.callback_query.data; // Text del missatge (el que escrivim al costat del nom del bot)
var usuari = data.callback_query.from.user_name ; // Nom de l'usuari que ha enviat el missatge
var nom = data.callback_query.from.first_name ; // Nom de l'usuari que ha enviat el missatge
var lang = data.callback_query.from.language_code ; // Llengua que l'usuari té configurada a Telegram
}
if(data.inline_query){ // En cas que fem servir inline
var id_usuari = data.inline_query.from.id; // Identificador de l'usuari que ha escrit el missatge
var id = data.inline_query.id; // Identificador de la finestra des de la que s'ha enviat
var id_missatge = data.update_id; // Identificador del missatge
var text = data.inline_query.query; // Text del missatge (el que escrivim al costat del nom del bot)
var usuari = data.inline_query.from.user_name ; // Nom de l'usuari que ha enviat el missatge
var nom = data.inline_query.from.first_name ; // Nom de l'usuari que ha enviat el missatge
var lang = data.inline_query.from.language_code ; // Llengua que l'usuari té configurada a Telegram
}
Per enviar les dades a Telegram podem fer servir la següent funció:
// Les variables següents ens permeten personalitzar l'script al nostre projecte
var token = "^^11744646:AAERCpfRifGP0_UIB8XASKSVd_LROkdQcKo"; // API Token de Telegram
var telegramUrl = "https://api.telegram.org/bot" + token; // Url que comunica el nostre bot amb Telegram
// Id del full de càlcul (l'obtenim quan el compartim)
var IdFull = "^^c7-jZogBimkSTqv2HRCSIFbDL2RQ1n7-VnVEE53V7E";
// Funció que envia un text a Telegram
// Cal donar-li l'identificador del xat o finestra de Telegram on enviar-ho
// i la llista que s'ha d'enviar
function answerInlineQuery(id, result){
var options = {
method: "post",
payload: {
method: "answerInlineQuery",
inline_query_id: id,
cache_time: 1,
results: JSON.stringify(result)
}
};
var request = UrlFetchApp.fetch(telegramUrl + '/', options);
}
La llista que s'ha d'enviar en format JSON conté dos tipus d'informació per a cada element. Per un costat hi ha el que sortirà a la llista i per un altre el que ens mostrarà quan piquem sobre un dels elements. El següent tros de programa ens mostra un exemple de com podem generar aquesta informació.
var sh = SpreadsheetApp.openById(IdFull).getSheetByName("Alumnes"); // Agafem el full
var dades = sh.getDataRange().getValues(); // Agafa les dades
var llista = new Array(); // Vector on guardarem la llista
for (var i in dades){ // Recorre totes les dades
var row = dades[i]; // Agafa una filera
var nom = row[0];
var cognoms = row[1] + " " + row[2];
var grup = row[3];
var caption = nom + " " + cognoms; // El títol que sortirà a la llista
// En aquest cas les fotos les hem agafat d'un web però podrien estar al
// nostre drive i haver-hi l'enllaç a una columna de la taula
var url_foto = "https://robohash.org/" + i;
// Això és el que surt quan es pica a un dels elements de la llista
var fitxa = "\n\n" + "\n\n" +
"Grup: " + grup + "\n\n" +
cognoms + ", " + nom + "\n\n" +
url_foto + "\n\n";
if (i > 0){
// Mirem si a grup hi ha el text que hem entrat al costat del nom del bot
if (grup.indexOf(text) > -1){ // Mira si hi surt
var item = {
'type': 'article',
// Això és el que es veu quan es posa el nom del bot
'title': text + " " + caption,
"thumb_url": url_foto,
'id': i,
// Mides de la foto
'thumb_width': 100,
'thumb_height': 100,
// Això és el que surt quan es pica a un dels elements de la llista
"input_message_content":{
"message_text": fitxa,
"parse_mode": "HTML"
}
};
llista.push(item); // Afegeix a la llista
}
}
}
answerInlineQuery(id, llista); // Retorna les dades
A les dades que surten en la fitxa individual de cada persona hi podem posar comandes. Quan Telegram detecti que comencen per una barra les mostrarà en color i, si ens interessa, podrem fer-hi clic. Per exemple:
var fitxa = "\n\n" + "\n\n" +
"Grup: " + grup + "\n\n" +
cognoms + ", " + nom + "\n\n" +
url_foto + "\n\n" +
"/falta";
Com és lògic, caldrà preveure que l'script executi aquestes comandes. Però si rep la comanda /falta no sabrà a qui li ha de marcar. Per tant, cal que la comanda ho inclogui. Per exemple, imaginem que a la taula tenim el DNI o el número de matrícula de la persona (ha de ser un identificador que mai pugui estar repetit); llavors podríem fer:
var dni = row[4];
var fitxa = "\n\n" + "\n\n" +
"Grup: " + grup + "\n\n" +
cognoms + ", " + nom + "\n\n" +
url_foto + "\n\n" +
"/falta@" + dni;
No podem separar el paràmetre de la comanda perquè només interpretaria que /falta és una comanda, per això hem posat un caràcter de separació (@ en el nostre cas) que després tindrem en compte a l'hora de separar la comanda dels paràmetres.
Podem posar diverses comandes per a cada persona, només cal separar-les amb un o més espais en blanc.
var dni = row[4];
var fitxa = "\n\n" + "\n\n" +
"Grup: " + grup + "\n\n" +
cognoms + ", " + nom + "\n\n" +
url_foto + "\n\n" +
"/falta@" + dni + " /retard@" + dni;
Un cop programat l'script corresponent al bot, cal recordar assignar-lo.
En aquest exemple podem veure algunes possibilitats de l'ús dels inline bots.
En aquesta pàgina hi ha informació sobre els altres tipus d'inline bots.

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