| Bots de conversa | Exemples | Dades pràctiques | Recursos CITCEA | |
| Google Apps Script | Projectes | Interacció | Inici |
En aquest exemple el bot de conversa esperarà que li enviem una fotografia i, quan la rebi, farà servir el reconeixement òptic de caràcters (OCR) per obtenir el text que la imatge pugui contenir. Cal preveure la possibilitat que la funció retorni una cadena buida en cas que la imatge no tingui cap text reconeixible.
També hem previst el cas que el bot de conversa pugui rebre una comanda de tipus text (en aquest cas, la comanda /help) però en podria rebre altres si modifiquem el programa convenientment.
En aquest exemple s'empra el servei Drive. Si és la primera vegada que el fem servir al nostre entorn de Google Apps Script ens caldrà habilitar-lo.
var token = "^^80216110:AAENhGXmFe3ezDo0TDfSJYA8z_KfxYRrMqs"; // API Token de Telegram
var telegramUrl = "https://api.telegram.org/bot" + token; // Url que comunica nuestro bot con Telegram
function doPost(e){
var data = JSON.parse(e.postData.contents); // Llegeix les dades rebudes per JSON i les guarda
var realitzat = false;
var id = data.message.chat.id; // Identificador de la finestra on s'ha escrit el missatge
if(data.message.text){ // Si s'ha enviat una imatge
var text = data.message.text; // El text enviat
var comanda = text.split(" "); // Separem els paràmetres
var cmd = comanda[0];
if(cmd == "/help"){
realitzat = true;
var resposta = "Si envies una imatge que contingui text, el bot et tornarà aquest text.";
sendText(id,resposta);
}
}
if(data.message.photo){ // Si s'ha enviat una imatge
realitzat = true;
var textImg = TextOcr(data.message.photo);
// Enviem el text a Telegram
if(textImg.length == 0){
textImg = "La imatge no conté cap text reconeixible";
}
sendText(id,textImg);
}
if (!realitzat){
var resposta = "Comanda desconeguda";
sendText(id,resposta);
}
}
function TextOcr(foto){
try{
// La foto es recull en forma de vector
// Normalment el darrer element del vector és el que té millor resolució
var llarg = foto.length;
var fitxer = foto[llarg - 1].file_id;
// Demanem la imatge a Telegram
var url_document = telegramUrl + "/getFile?file_id=" + fitxer;
// Recollim la imatge rebuda
var document = UrlFetchApp.fetch(url_document);
// Recull el text rebut
var json_document= document.getContentText();
// Tracta el JSON rebut
var dades = JSON.parse(json_document);
// Ruta del document
var ruta_document = dades.result.file_path;
// Adreça completa del fitxer
var documentUrl = "https://api.telegram.org/file/bot" + token + "/" + ruta_document;
// Agafem el BLOB de la imatge
var imatge = UrlFetchApp.fetch(documentUrl).getBlob();
var file = {
title: 'OCR File',
mimeType: 'image/png'
}; // configurem el nom i el tipus del document
// Guardem la image en un document de Google Drive amb l'opció d'OCR activada
file = Drive.Files.insert(file, imatge, {ocr: true});
// Obrim el fitxer
var doc = DocumentApp.openById(file.id);
// Llegim el text del Document
var text_igm = doc.getBody().getText();
// Un cop llegit el text, marquem el fitxer com a esborrat
DriveApp.getFileById(file.id).setTrashed(true);
return text_igm;
} catch(err){
return err;
}
}
function sendText(chatId,text_env,keyBoard){
// Funció que prepara per enviar 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 emprem Telegram en un dispositiu mòbil, enviarem la fotografia picant la icona del clip
i triant quina és la imatge que volem enviar. Si fem servir Telegram a l'ordinador, a més de l'opció ja comentada, podem arrossegar la imatge sobre el xat corresponent i se'ns presentaran diverses opcions

i triarem la que fa referència a fotografies.
Si li enviem la imatge següent:

Obtindrem el següent resultat:
RECOLLIR TIQUET RECOGER TIQUE PRENDRE LE TICKET TAKE A TICKET

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