miércoles, 20 de julio de 2022

BOT Whatsapp empleando OCR

 Hola a continuación le dejo material para que puedan implementar un BOT con Whatsapp que te permite hacer lectura de texto de imagenes a traves de whatsapp que puedan usarlo en caso de uso de leer documento , archivos , facturas boletas y/o otros empleando hoja de calculo google sheet.

¿ Deseas solo probarlo YA?

1) Ingresar a la siguiente pagina

https://anlusoftware.blogspot.com/

2) Seleccionar la opcion "GENERAR TOKEN WHATSAPP PARA BOT" y luego el BOT que deseas activar "Whatsapp chatbot OCR con google sheets"


3) Si todo esta OK se le mostrara mensaje confirmacion

4) Conversele al numero de celular .

5) El BOT trabaja con la siguiente hoja sheet se iran almacenado los registros ahi,

https://docs.google.com/spreadsheets/d/1hEJJgYVFCvPD5wvSHEJlmclnz1wXhMJspMsvHLXNsOc/edit?usp=sharing

¿ Necesitas implementarlo tu mismo para realizar cambios ?

- Crear la hoja Google sheet como indica el video 

         - Escanear la hoja para obtener token QR

         -  Whatsapp version android no business

Video Implementación




Página Excel Plantilla


https://docs.google.com/spreadsheets/d/1hEJJgYVFCvPD5wvSHEJlmclnz1wXhMJspMsvHLXNsOc/edit?usp=sharing


Código AppScript 


var excel_qr = SpreadsheetApp.getActiveSpreadsheet();

var sheet_qr = excel_qr.getSheetByName("Configuracion");

var api_interna = "https://script.google.com/macros/s/AKfycbyoBhxuklU5D3LTguTcYAS85klwFINHxxd-FroauC4CmFVvS0ua/exec";

var appscript = sheet_qr.getRange(1, 2).getValue();

function onOpen() {

    createMenus();

}


function createMenus() {


    var menu = SpreadsheetApp.getUi().createMenu("Whatsapp");

    menu.addItem('1) Obtener TOKEN Session - QR Whatsapp', 'qrwhatsapp');

    menu.addItem('2) Habilitar BOT - Whatsapp', 'enviarconversacion');

    menu.addToUi();

}


function validacionocr(base64,codigo_archivo,carpeta){

  /*https://gist.github.com/kltng/c25422538e15e155bccef0e289ea3faa**/

  var decoded = Utilities.base64Decode(base64);  

  var image_base = Utilities.newBlob(decoded,'image/jpeg',codigo_archivo+".jpg");

  Drive.Files.insert({title:codigo_archivo,mimeType: "image/jpeg"}, image_base, { ocr: true });

  var newFile = DriveApp.getFilesByName(codigo_archivo).next();  

  var folder_ = DriveApp.getFolderById(carpeta);//"1V0W-EdgBY1Q05v1uQfiGZsyzCNESf8Hb" 

  folder_.addFile(newFile);

  var files_ = folder_.getFilesByName(codigo_archivo);

  var resultado="";

  while (files_.hasNext()) {

     var file = files_.next();

     var doc = DocumentApp.openById(file.getId());

      resultado = doc.getBody().getText();    

  }

  return resultado;

};



function doPost(e) {


    var operacion = JSON.parse(e.postData.contents)

    var respuesta = "";

    if (operacion.op == "qr") {

        respuesta = generar(JSON.stringify(operacion));

    }


    if (operacion.op == "find_conversacion") {

        respuesta = find_conversacion(JSON.stringify(operacion));

    }


    return ContentService.createTextOutput(respuesta).setMimeType(ContentService.MimeType.JSON);

}


function generar(informacion) {


    try {

        var qr = JSON.parse(informacion);

        sheet_qr.getRange(2, 2).setValue(encodeURIComponent(qr.qr));

        var result, jo = {};

        if (qr.numero && qr.qr == "CONECTADO") {

            sheet_qr.getRange(3, 2).setValue(qr.session);

        }

        jo.status = '0';

        jo.message = ' Se grabo el registro';

    } catch (e) {

        jo.status = '-1';

        jo.message = e.toString();

    }

    var result = JSON.stringify(jo);

    return result;

}


function qrwhatsapp() {

  var response = "No"

    try {

        //sheet_qr.getRange(3, 2).setValue("");

        var response = Browser.msgBox('Seguro que quiere generar QR ahora ?', Browser.Buttons.YES_NO);

    } catch (e) {

        Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK);

    }

    if (response == "yes") {

        enviar();

        Browser.msgBox('La acción ha sido realizada , escanear registros luego de 10 segundos', Browser.Buttons.OK);

    }

}


function enviar() {

    var payload = { "op": "iniciarqr","app_script": appscript,"sheet_id":excel_qr.getId(), "fechahora": Utilities.formatDate(new Date(), "GMT-5", "yyMMddHHmmss") };

    var options =

    {

        'headers': { "Content-Type": "application/json" },

        'method': "POST",

        'payload': JSON.stringify(payload)

    };

    try {

        var response = UrlFetchApp.fetch(api_interna, options);

        var json = JSON.parse(response.getContentText());

    } catch (e) {

    }

}


function enviarconversacion() {

  

    var response = "No"

    var token_session = "";

    try {

        token_session = sheet_qr.getRange(3, 2).getValue();

        var response = Browser.msgBox('Seguro que quiere habilitar el BOT con la conversacion , el token de session sera : ' + token_session + ' ?', Browser.Buttons.YES_NO);


    } catch (e) {

        Browser.msgBox('La acción no se ha realizado', Browser.Buttons.OK);

    }

    if (response == "yes") {

          var dataConversacion = [];

        if (excel_qr.getSheetByName("Conversacion")) {

            var sheet = excel_qr.getSheetByName("Conversacion");

            var rows = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();

            for (var i = 0, l = rows.length; i < l; i++) {

                var dataRow = rows[i];

                var record = {};

                record['evento'] = dataRow[0];

                record['entrada'] = dataRow[1];

                record['salida'] = JSON.parse(dataRow[2]);

                record['retornar'] = dataRow[3];

                dataConversacion.push(record);

            }

        }

        var payload = { "op": "registermessage", "token_qr": token_session, "conversacion": dataConversacion };

        var options =

        {

            'headers': { "Content-Type": "application/json" },

            'method': "POST",

            'payload': JSON.stringify(payload)

        };

        try {

            var response = UrlFetchApp.fetch(api_interna, options);

            var json = JSON.parse(response.getContentText());

            if (json.status == "0") {

                Browser.msgBox('Se habilito el BOT inicie la conversacion ', Browser.Buttons.OK);

            } else {

                Browser.msgBox('Error al iniciar : ' + json.message, Browser.Buttons.OK);

            }

        } catch (e) {

            Browser.msgBox('Se habilito el BOT inicie la conversacion ', Browser.Buttons.OK);

        }

    }

}


function find_conversacion(informacion) {


    var result, jo = {};

    try {


        var resultado = JSON.parse(informacion);

        var excel = SpreadsheetApp.getActiveSpreadsheet();

        var sheet = excel.getSheetByName("Configuracion");

        var numero = (resultado.numero).substring(0, (resultado.numero).lastIndexOf("@"));

        var appcarpeta = sheet.getRange(4, 2).getValue();

        var nombre_carpeta = ((appcarpeta).substring(appcarpeta.lastIndexOf("/") + "/".length,appcarpeta.length)).split("?")[0];

        jo.status = '1';

        jo.message = "error";

        var codigo_pedido = ""+new Date().getTime();

        var ultimoevento = "";

        var data_archivo_base64="";

        var fecha = Utilities.formatDate(new Date(), "GMT", "yyyy-MM-dd HH:mm:ss");

        for (var ill = 0; ill < resultado.mensaje.length; ill++) {

            if (resultado.mensaje[ill].evento == "despues_archivo" && resultado.mensaje[ill].mensaje=="documento_send") {

                data_archivo_base64 = resultado.mensaje[ill].documento.data;

            }

            ultimoevento = resultado.mensaje[ill].evento;

        }

        jo.status = '1';

        jo.message = ' No existe';

        if (ultimoevento == "despues_archivo") {

                    if (data_archivo_base64 !="") {

                        jo.status = '0';

                        var resultadosocr= validacionocr(data_archivo_base64,codigo_pedido,nombre_carpeta);

                        jo.message = resultadosocr;

                        jo.conversacion = { "mensaje": resultadosocr, "evento": "despues_archivo_v1", "retornar": "terminar_archivo" };

                    }

        }


    } catch (e) {

        jo.status = '-1';

        jo.message = e.toString();

    }

    var result = JSON.stringify(jo);

    return result;

}


HABILITAR BOT 24 x 7 :

La solución BOT emplea Web Whatsapp  para recibir y enviar mensajes , por lo cual es necesario la contratación de un servidor para el BOT este operativo 24 x 7  , debido a ello existe un pago mensual de $ 8.00 .

IR a PAGAR 8 DOLARES

ASESORIA PERSONALIZADA :

En caso necesites alguna asesoría personalizada agéndame un espacio.

https://reservarasesoriaanlusoft.blogspot.com/

No hay comentarios:

Publicar un comentario

Chatbot Taxi en whatsapp con Chatgpt

  Hola a continuación le dejo material para que puedan implementar un BOT de solicitud de taxi a traves de BOT whatsapp empleando la Super I...