martes, 5 de julio de 2022

BOT Whatsapp de Reserva de Taxi

Hola a continuación le dejo material para que puedan implementar un BOT de Solicitud Taxi 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 taxi 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/15O5A8MZ4YPzstLMn4aCERfii2IR8wR0FVA9yjlxUIYI/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/15O5A8MZ4YPzstLMn4aCERfii2IR8wR0FVA9yjlxUIYI/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 doPost(e) {


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

    var respuesta = "";

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

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

    }

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

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

  }

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

    respuesta = find_word(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 {

        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","sheet_id":excel_qr.getId(),"app_script": appscript, "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") {


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

             var dataConversacion = [];

            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_word(informacion){

    var result,jo={};

    try{

        var resultado = JSON.parse(informacion);

        var excel= SpreadsheetApp.getActiveSpreadsheet(); 

        var sheet_sede =excel.getSheetByName("Solicitud");

        var rows_sede = sheet_sede.getRange(2,1,sheet_sede.getLastRow()-1, sheet_sede.getLastColumn()).getValues(); 

        jo.status = '1';

        jo.message = ' No existe'; 

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

      for(var i2 = 0, l2= rows_sede.length; i2<l2 ; i2++){

          var dataRow = rows_sede[i2];

          var record = {};

          if((dataRow[2]+"")==(numero+"")){

            jo.status = '0';

            jo.message = ' Hola 👋 '+dataRow[3]+', soy tu operadora de taxi virtual ANLUSOFT  🤖👇 ';

            jo.conversacion={"mensaje":dataRow[3]};            

            break;

          }

        }

      } catch (e) {

        jo.status = '-1';

        jo.message = e.toString();

      } 

    var result = JSON.stringify(jo); 

    return result;

  

}


function end_conversacion(informacion){

 try{

   var venta = JSON.parse(informacion);

   var excel= SpreadsheetApp.getActiveSpreadsheet(); 

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

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

   var fecha_solicitud = "."+Utilities.formatDate(new Date(), "GMT", "yy-MM-dd HH:mm");

   var nombre_cliente ="" + "132"

   var ubicacion_cliente ="";

   var direccion_cliente ="";

   var mensaje="";

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

   

   for (var ill = 0; ill < venta.conversacion.length; ill++) {

    

     if(venta.conversacion[ill].evento=="MenuInicio"){

       nombre_cliente=venta.conversacion[ill].mensaje;

     }

     if(venta.conversacion[ill].evento=="Solicitar_Taxi_Reservar"){

       fecha_solicitud=venta.conversacion[ill].mensaje;

     }

     if(venta.conversacion[ill].evento=="End_Solicitar_Taxi_Reservar"){

       if(venta.conversacion[ill].mensaje==="ubicacion_send"){

         ubicacion_cliente=venta.conversacion[ill].documento.latitud+","+venta.conversacion[ill].documento.longitud;

         var response = Maps.newGeocoder().reverseGeocode(venta.conversacion[ill].documento.latitud,venta.conversacion[ill].documento.longitud);

         for (var iz = 0; iz < response.results.length; iz++) {

           direccion_cliente= response.results[iz].formatted_address;

            break;

         }

       }

       mensaje="*Su reserva fue registrada* ✅ \n exitosamente con los siguientes datos* ✅😃:\n "+fecha_solicitud+", "+direccion_cliente+"\nEsté pendiente 30min antes 🕑, que un conductor se podrá en contacto con usted. Gracias por preferirnos.";

       sheet.appendRow([fecha,fecha_solicitud,numero,nombre_cliente,ubicacion_cliente,direccion_cliente,'Pendiente',JSON.stringify(venta.conversacion)])

     }

     if(venta.conversacion[ill].evento=="End_Solicitar_Taxi_Ahora"){

       if(venta.conversacion[ill].mensaje==="ubicacion_send"){

         ubicacion_cliente=venta.conversacion[ill].documento.latitud+","+venta.conversacion[ill].documento.longitud;

         var response = Maps.newGeocoder().reverseGeocode(venta.conversacion[ill].documento.latitud,venta.conversacion[ill].documento.longitud);

         for (var iz = 0; iz < response.results.length; iz++) {

           direccion_cliente= response.results[iz].formatted_address;

           break;

         }

       }   

       mensaje="*Su solicitud registrada* ✅ \n exitosamente con los siguientes datos ✅😃:\n *Fecha Y Hora*"+fecha_solicitud+ ", "+ "\n 1 *Direccion:* "   +direccion_cliente+"\n En estos momentos 🕑, un conductor se podrá en contacto con usted. Gracias por preferirnos.";

       sheet.appendRow([fecha,fecha_solicitud,numero,nombre_cliente,+ "\n" + ubicacion_cliente,direccion_cliente,'Pendiente',JSON.stringify(venta.conversacion)])

     }

     if(venta.conversacion[ill].evento=="End_Ver_Mis_Reservas"){

       mensaje="No tienes reservas pendientes:";

       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];

         if((dataRow[2]+"")===""+numero && dataRow[6]==="Pendiente"){

           if(i==0){

             mensaje = dataRow[3]+", tiene las siguientes reservas pendientes:\n";

           }

           mensaje+= (i+1)+" "+dataRow[1]+" "+dataRow[5]+"\n";           

         }  

       }

       break;

     }     

     

   }

   var result,jo={};

    jo.status = '0';

    jo.message = mensaje;   

 } 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

Implementa ChatBOT con API Oficial Whatsapp + Chatgpt + Google Sheet

  Hola a continuación le dejo material para que puedan implementar un BOT whatsapp usando IA de Chat GPT empleando hoja de calculo google sh...